在具有开放环境和大量静态内容(例如孤岛危机)的现代AAA游戏中,如何执行遮挡剔除?


19

我有两个想法:

1)使用低分辨率和低多边形数模型(甚至仅使用诸如立方体或球体的边界体积)将场景渲染到不可见的缓冲区。然后检查缓冲区以了解可见或不可见。在渲染低分辨率场景之前,可以应用一些视锥剔除,以尽可能多地移除对象。

2)在静态地图上运行一个工具,该工具将执行复杂(因此较慢)的光线跟踪,以了解地图上的某些3d位置,哪些是可见的,哪些不是。然后,所有这些信息都以一种有效的方式存储,以后可以在运行时供用户使用(例如:八叉树)。该解决方案仅适用于静态网格物体(例如:建筑物)而不是移动对象。


3
根据FAQ, “游戏<X>如何做到这一点”的问题明确不在主题之列。也许编辑这个要问的问题是如何,你可以做遮挡剔除,而不是如何别人不是吗?(此外,在问题的正文中提供您自己的答案,就好像您要的是讨论或列表,而不是答案
Trevor Powell

Answers:


13

Jovan的回答很好,但只是想补充一点,有时会提供硬件支持来询问“此几何图形实际上是否渲染了像素吗?”这一问题。(你的想法#1),这些被称为遮挡查询-这是一个不错的GPU精粹文章关于他们在这里

这与您的想法1非常相似,不同之处在于您不需要隐形缓冲区,并且比检查缓冲区更有效或更简单。链接的文章在深入了解硬件遮挡查询的工作方式方面做得很好。

除了其他技术(例如视图视锥剔除和预先计算遮挡了哪些静态几何体)之外,虚幻引擎还利用了支持它的平台上的硬件遮挡查询。


如今,硬件遮挡查询实际上比“有时”更为普遍-除某些移动GPU可能的例外之外,它们可以被视为无处不在。
Maximus Minimus 2013年

他们不是很慢吗?
Quonux

12

1)使用低分辨率和低多边形数模型(甚至仅使用诸如立方体或球体的边界体积)将场景渲染到不可见的缓冲区。然后检查缓冲区以了解可见或不可见的内容。在渲染低分辨率场景之前,可以应用一些视锥剔除,以尽可能多地移除对象。

此技术由Killzone使用,并在他们的PS3上的实用遮挡剔除中进行了详细介绍。他们还使用门户进入室内区域。

大型室外地图要记住的一件事是,简化网格与遮挡剔除同样重要,因此经常使用几何裁剪来改变高度场。这是一篇很好的论文,也涵盖了剔除。GPU Gems 2有一个实现


5

至少前两个Quake游戏使用策略2;我不知道idTech引擎是否仍在使用它。可到达的世界被划分为以树数据结构(“二进制空间分区”)组织的凸空间,并且对于树中的每个节点,都有一个位向量表示从该节点可见的其他节点(“潜在可见集合”)。


1
如果您要引入Quake,则不妨引入Thief的渲染技术;)- nones.org/gamedev/thief_rendering.html
Jovan
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.