游戏的“空间分区”技术水平如何?[关闭]


18

我知道使用BSP树,Octrees和Portal的时间很长。但是现代游戏仍在使用此系统,还是在使用新事物?

如果有利有弊,请考虑渲染和碰撞检测。


虽然并不能给出完整的答案,但是空间哈希似乎是一个新主意。或受到青睐。它并不能解决所有问题,但最大的好处是易于实施。
乔纳森·迪金森

Answers:


15

是的,例如,虚幻引擎3仍使用BSP-主要是因为它是在CSG流程中使用的。Doom3 / id tech 4使用门户网站,我想我已经读到了id Tech 5回到BSP树上的内容。也有一些使用八叉树的游戏。在游戏中,我的理解是UE3转向了使用遮挡查询的更加动态的方法,但是如果他们不使用BSP至少确定可见的静态网格物体,我将感到惊讶。其他游戏可能只使用视锥台剔除(例如,文明)。这实际上取决于您所看游戏的类型。

BSP和内容仍然存在的原因是因为您无法做得更好。如果您具有静态几何体,那么正确构造BSP就是很好的选择。不过,这需要您编写一个BSP构建器,这很棘手(但是,如果您的CSG解决方案使用一个,它可能是免费发生的!)八进制和更多动态解决方案(例如依赖于所有对象的遮挡查询)更易于实现,运行时间更长成本,但不需要(昂贵的)关卡预处理。这是某些游戏愿意做的折衷(例如,Crytek希望所有内容都实时运行,因此他们不花费处理时间来构建静态加速结构。)其他运行时方法例如是在CPU并在CPU上执行遮挡查询(该功能由Frostbite引擎使用。)

对于真正现代化的方法,请查看Umbra,这是可见性查询的中间件。如果您在网上稍作搜索,应该会找到一些描述Umbra早期发展的硕士论文。

底线:是否要使用BSP /八叉树/不使用AS将在很大程度上取决于您要创建的游戏类型。如果您的关卡大部分都是静态的,则应该利用它并构建一些静态加速结构。如果一切都是动态的,那么您当然需要另一种方法。

对于碰撞检测,我来看看Bullet和PhysX及其碰撞检测算法。但是我的感觉是,物理解决方案与可见性的联系不再像以前那样紧密-物理解决方案可能希望使用基于GPU的BVH,在这种情况下,尝试将其用于可见性查询没有太大意义。


15

老实说,我不知道这些天下一代引擎正在使用什么,但是我会告诉你我所知道的。在优化和用于协助优化的数据结构之间容易混淆。尽管下面提到的所有内容都是为了优化,但我将指出具体是哪些数据结构。

BSP:数据结构-用于检测动态运动对象和静态世界几何图形之间的交集。在没有zbuffer的情况下曾经用于正确的碰撞检测和几何图形渲染,但是由于我们现在有足够的内存用于z缓冲区,因此不再用于渲染。尽管从技术上来说,它们的生成略有不同,但仍认为是相同的树类型。需要预处理。

八叉树或Kd-Tree:数据结构-用于确定同一“单元”或区域中的对象,以避免对所有动态对象进行n ^ 2检查。

这些不是唯一的,但可能是最常见的。还有很多优化措施可以使引擎避免总体上渲染几何图形。但是以下内容只是剔除了几何图形,通常就是它的全部用途:

门户:从技术上讲不是数据结构,但需要一种特殊的数据收集方法。用于从视图中剔除世界几何图形和动态对象几何图形。需要进行预处理才能将世界划分为我认为的区域。但是我实际上还没有实现,所以我不知道。

遮挡剔除:优化-用于可视化剔除您想要的任何对象,可能是动态对象。

常规视口剔除:优化-剔除不在相机视图中的对象。

更多视口剔除:优化-可以使用八叉树进一步优化常规视口剔除。您可以清除相机后面或视图中没有的八叉树的整个单元。这包括地形(如果您在外面)。无论八叉树没有剔除任何东西,您都将执行“常规视口剔除”。然后,剩下的一切都将渲染。

背面剔除:优化-剔除背对相机的几何图形以防止栅格化。如果正确设置了渲染状态,通常在硬件中完成。

特例数据结构:

AABB树或Sphere树:这些是特殊情况的数据结构。他们将凹形变成凸形。例如,具有骨头的角色在技术上是凹形的。它将其分解成较小的凸块。可以用作碰撞检测的优化(通常是动态对象的可见性剔除),并且由于它是凸形的,因此可以更轻松地进行相交测试。因为它们通常是动态对象,所以它们会进入八叉树的内部。这些也可以用于协助遮挡剔除优化。

您没有理由必须使用单个结构来表示所有内容(例如场景图)。我认为,最好将不同的数据结构用于不同的任务,而不要尝试使用某种通用树。例如,我目前正在使用的引擎,我计划通过以下优化实现BSP / Octree / AABB树组合:遮挡剔除,视口,当然还有背面剔除。这意味着我将在该八叉树中有一棵bsp树,一棵八叉树,可能还有多个aabb树。

最佳数据结构和算法/优化的选择可能是您可以为引擎做的最大,最有益的事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.