空间分割技术
虽然包围盒技术已经可以检测出物体的是否可见,但是在复杂场景中存在大量的物体时,即使通过z-检测无需渲染即可探测出物体是否可见仍会导致更多的性能损耗
因此我们需要一种一次检测多个或一组物体是否可见的技术,基本思想是不仅依托物体来分解场景,还要分解整个3D世界空间。例如使用平面和长方体分割3D空间
无论分割方法如何,基本思想都是要在对数复杂度内探测可见物体
网格系统
使用2D和3D网络进行分割,其中2D网格多用于“室外”环境,3D网格多用于如楼群等这样的垂直环境。
2D网格将笛卡尔城分割城一个个方格,每个方格中有一个或多个建筑。在探测网格是否可见时,可以通过计算视锥的轴对齐边界框AABB并于网格系统做交集
但是一个网格应该多大是很难确定的,而且它是均匀的,这无法真实的反应现实环境的复杂性
而且存储2D中的网格信息是平方,3D中的网格信息是立方,这对于计算机内存也是一个挑战
四叉树和八叉树
对于简单空间网格存在的问题,我们引入分割2D空间的四叉树和3D空间的八叉树
以四叉树为例
INFO
遵循的规则是:物体横跨两个网格,则放在同级节点;反之则放在下级节点
例如:12、13、14、15、16、18、23横跨两个网格,那么它们是同级节点,由于是第一个节点,那么它们共同构成根节点
那么什么时候停止节点的划分呢?
- 节点内物体或三角形数目已经很少,进一步划分没有意义
- 子节点足够小,不仔继续划分
- 达到树的深度限制。例如:限制树的深度为5层
由于仅在必要的地方细分,使得四叉树对几何体有更好的适应性。
构建好四叉树之后,我们就有了定位物体、物体级别剔除或碰撞检测的有效工具。基本思想是:如果能在某一级抛弃节点,那么它的所有节点都可以抛弃
BSP树
看不太懂
遮断检测
看不太懂