在“DOOM”的世界里,两个概念是相互联系的。Node Builder创建地图的“大脑”,而冲突检测系统则利用这个大脑来判断你是否打破了墙壁还是被怪物的火球击中了。

  1. **分割树」( Creating the Tree)在80年代的时期,地图设计者完成了地图并将其保存在编辑器中(如DEU或DoomEd),但地图还不能玩。它只是一个线条集合(Linedefs)和一个顶点集合(Vertexes)。为了让它可玩化,你需要在节点生成器(如ZenNode或BSP)中运行。节点生成器的功能:

• 分隔符:它将2D地图中的线条作为树结构的根,尽可能地将地图分成相等的两个部分。

• 划分:它在墙壁上画一个无限线,所有东西都被划分成两个分支。

• 子集:这个过程重复进行,直到空间变得足够小,使得任何两个点都能看到对方。这被称为子集。

• 输出:它将NODES数据块和SSECTORS数据块保存入WAD文件中。没有这些,DOOM引擎就无法决定墙壁之间的空间关系。

  1. 冲突检测( Using the Tree)一旦分隔树被映射出来,引擎就会使用它进行实 时冲突检测。这就是为什么DOOM在486处理器上能够快速运行的原因。.Point-in-Subsector测试

代替检查机器人的坐标与每个线条(墙壁)的位置是否匹配(会导致超载),引擎会使用这个测试。

墙壁碰撞当你试图移动时,引擎只会检查当前分区中的墙壁(Linedefs)及其周边墙壁。如果你的半径触及一个标记为“实体”的线条,引擎就会停止你的移动。

火灾与投射物• Hitscans(子弹):当你开火时,引擎会沿着一条直线“走”并检查哪些子集它通过哪边。它会在它撞击第一面的墙壁或怪物时停止。

• Projectiles(火箭):这些被认为是一个玩家。每帧,火箭检查它所在的分区,看看它是否撞击了墙壁或玩家。

“为什么这个对于Ghost Monsters(幽灵怪物)中的bug重要”的时候,_NODE Builder 会出错而你死于边界的时候,这个会导致引擎迷失了怪物。这引起了一个有名的Bug,因为你可能只能在墙壁上移动。

提示:渐近下降和二分法和BSP树

当我们对DOOM引擎和计算机图形学进行背景调色时,都会出现问题。 三个概念似乎与三种不同的主题相似,但它们都是用来找出某一物件“最佳”位置的迭代工具。

  1. 综合性下降(Gradient Descent):“山下行人”如果一种BSP树是预先建立的地图,那么综合性下降就像在黑暗中行走。这包括:

• 搜索过程:它从找到最好的值开始,并沿着最陡的斜率下降到一个最小的误差下。
• 它与地图设计无关:在DOOM中,BSP树是静态的,而在现代游戏中,却被机器人AI(让它学习如何玩)和光照引擎(计算表面的最实体光)使用。梯度向量是行进的路径向量。
2. 二进制分类(Binary Search):这是二进制分类算法内部。每当引擎检查BSP树时,它都会再次进行二分法。它询问:“机器人是否在线的左边或右边”?通过不断将其选项分半直到找到答案。它通过不断将它的选项分半直到找到答案来找到它的位置。

  1. 将它们结合起来这些三种概念会用Spatial Intelligence来创建一个等级图。
    方法 性质 DOOM及图形学中的例子

  2. Binary Sort / Search Navigation 在一个复杂的地图中快速找到房间

  3. BSP Tree(BSP树) Structure 地图永久的大脑,分节点生成器

  4. Gradient Descent Optimization 通过综合性下降来使节点生成器找到一个可行的拆分线。

这些是DOOM引擎如何寻找你的座标的方式。

简要教程

在 DOOM,BSP树中使用的是二进制数据。

BSP树使用了二进制分类法,避免了寻找一个大地图中的每个位置。

3D BSP树中的“分隔符”

下面的图像展示了2D BSP树中的“分隔符”。上面右边的图像展示了3D BSP树中的分隔符。

这个图中,红色区域是当前的子集,分隔符线是绿色区域。这个分隔符将3D BSP树分成两个子集。

在这个例子中,最终分隔符线是蓝色的,红色区域上的所有点都向两个子集中。

这两种情况都使用了二进制分类法来寻找子集的分隔符。

使用BSP树查找房间

BSP树是地图结构的关键部分。下面是一种使用BSP树找出机器人的房间的方法。

  1. 分节点生成器执行

当我们在地图编辑器中使用分节点生成器时,它会为机器人创建一个大的结构:BSP树。

  1. BSP树

BSP树是一种组织地图结构的方法。它将地图分成许多更小的子集。

  1. 机器人

机器人是地图上的一个对象,他寻找一个房间。

为了寻找这个房间,他会使用BSP树。

  1. 分子分子

每个分子分子都代表一个子集。机器人需要遍历子集以找到他需要的房间。

为了找到房间,机器人需要使用BSP树。BSP树会提示机器人他应该遍历哪个子集。

  1. 行进

一旦机器人知道了应该遍历哪个子集,他就可以开始遍历它。

他会在两个子集之间进行选择。

他会选择绿色的子集。这个子集包含了他寻找的房间。

  1. 房间

一旦机器人进入了房间,他就在他的任务中了。

他成功地找到这个房间,继续执行他的任务。

这是BSP树与二进制分类法在DOOM中找到房间的过程。