Skip to content

空间分割技术

虽然包围盒技术已经可以检测出物体的是否可见,但是在复杂场景中存在大量的物体时,即使通过z-检测无需渲染即可探测出物体是否可见仍会导致更多的性能损耗

因此我们需要一种一次检测多个或一组物体是否可见的技术,基本思想是不仅依托物体来分解场景,还要分解整个3D世界空间。例如使用平面和长方体分割3D空间

无论分割方法如何,基本思想都是要在对数复杂度内探测可见物体

网格系统

使用2D和3D网络进行分割,其中2D网格多用于“室外”环境,3D网格多用于如楼群等这样的垂直环境。

2D网格将笛卡尔城分割城一个个方格,每个方格中有一个或多个建筑。在探测网格是否可见时,可以通过计算视锥的轴对齐边界框AABB并于网格系统做交集

img.png

但是一个网格应该多大是很难确定的,而且它是均匀的,这无法真实的反应现实环境的复杂性

而且存储2D中的网格信息是平方,3D中的网格信息是立方,这对于计算机内存也是一个挑战

四叉树和八叉树

对于简单空间网格存在的问题,我们引入分割2D空间的四叉树和3D空间的八叉树

以四叉树为例

img.png

INFO

遵循的规则是:物体横跨两个网格,则放在同级节点;反之则放在下级节点

例如:12、13、14、15、16、18、23横跨两个网格,那么它们是同级节点,由于是第一个节点,那么它们共同构成根节点

img.png

那么什么时候停止节点的划分呢?

  • 节点内物体或三角形数目已经很少,进一步划分没有意义
  • 子节点足够小,不仔继续划分
  • 达到树的深度限制。例如:限制树的深度为5层

由于仅在必要的地方细分,使得四叉树对几何体有更好的适应性。

img.png

构建好四叉树之后,我们就有了定位物体、物体级别剔除或碰撞检测的有效工具。基本思想是:如果能在某一级抛弃节点,那么它的所有节点都可以抛弃

BSP树

看不太懂

遮断检测

看不太懂