1. 遮挡剔除的基本原理
在Unity场景中的遮挡——是将世界划分为包含越来越小空间块的数据。在这些区域中,记录了每个区域中什么是可见的,以及什么是不可见的数据。Unity利用这些数据来隐藏被渲染的物体。在 Unity 场景中,遮挡剔除通过将世界划分为许多个越来越小的空间区块数据来实现的。在这些数据中,系统会记录每个区块中的哪些物体是可见的,哪些是不可见的。Unity 正是利用这些数据来“隐藏”那些被其他物体遮挡的游戏对象。
要记住,遮挡只会在视觉上隐藏物体。大多数物体在隐藏时会继续运行,因此遮挡剔除严格用于减少绘制调用。需要明确的是,遮挡剔除只会在视觉上隐藏物体。即使物体被隐藏,它们的状态也不会改变,大部分功能仍然会继续运行,因此遮挡剔除主要用于减少绘制调用 (Draw calls) ,而不是完全移除掉被遮挡的物体。此外,Unity不会隐藏它认为可见的对象,无论它们离得有多远。遮挡剔除不关心距离。无论物体距离观察者有多远,Unity 都将不会隐藏它判断为可见的对象。所以我们可以看出,距离并不是影响遮挡剔除的因素。
遮挡剔除只是视觉上的吗?遮挡剔除是否仅限于视觉效果?
没错——遮挡剔除仅阻止物体的渲染。是的,遮挡剔除的作用仅仅是阻止物体的渲染!它不会停止它们进行任何处理,因此如果你有一个划分成多个区域的大世界,你可以通过禁用你知道当前不活跃的部分来提升性能。它并不会终止物体的其他处理过程,因此如果你有一个划分为多个区域的大型世界,你可以通过剔除那些当前不活跃的区域来提高整体性能。