Skip to main content

1. 遮挡剔除的基本原理

Unity 场景中,遮挡剔除通过将世界划分为许多个越来越小的空间区块来实现的。在这些数据中,系统会记录每个区块中的哪些物体是可见的,哪些是不可见的。场景中的 遮挡剔除(Occlusion) 是一种数据处理技术,它将场景划分为若干空间块,每个空间块又包含更小的子空间块。在每个划分单元中,会记录该视角下可见与不可见对象的相关数据。Unity 正是利用这些数据来“隐藏”那些被其他物体遮挡的游戏对象。通过这些数据判断对象是否需要渲染,进而隐藏无需显示的内容。

需要明确的是,遮挡剔除只会在视觉上隐藏物体。即使物体被隐藏,它们的状态也不会改变,大部分功能仍然会继续运行,因此遮挡剔除主要用于减少绘制调用需重点注意:遮挡剔除仅作用于视觉层面—— (Draw大多数对象即便被隐藏,其逻辑仍会继续运行。因此,遮挡剔除的核心用途是 calls)减少绘制调用(draw ,而不是完全移除掉被遮挡的物体。calls) 以优化性能。此外,无论物体距离观察者有多远,Unity 都将不会隐藏它判断为可见的对象。所以我们可以看出,距离并不是影响遮挡剔除的因素。只会隐藏其判定为不可见的对象,无论该对象距离多远;也就是说,遮挡剔除与距离无关

等等,遮挡剔除仅作用于视觉效果吗?

遮挡剔除是否仅限于视觉效果?没错 —— 遮挡剔除仅阻止对象被渲染,并不会终止其逻辑处理。因此,若你开发的大型场景已按区域划分,可通过禁用已知当前未激活的区域进一步提升性能。

是的,遮挡剔除的作用仅仅是阻止物体的渲染!它并不会终止物体的其他处理过程,因此如果你有一个划分为多个区域的大型世界,你可以通过剔除那些当前不活跃的区域来提高整体性能。