Options 选项卡提供了开启或关闭当前场景遮挡剔除的功能。勾选 Enable occlusion for current scene 后,引擎会在当前场景同级目录下创建一个与场景同名的文件夹,并在其中生成 OcclusionCulling.asset 文件,用于保存场景中的遮挡剔除数据。 取消勾选该选项后,将会删除该文件。 此外,开启遮挡剔除后,Options 选项卡中会出现两个配置项:Scene Depth Buffer 和 Shadow Depth Buffer,分别用于配置基于相机视角的遮挡剔除和基于 Shader 的阴影遮挡剔除。
合理设置这些参数可以有效优化内存使用,避免过大的缓冲区浪费内存或过小的缓冲区导致精度问题。
在使用遮挡剔除之前,首先要确定哪些游戏对象是遮挡物(会遮挡其他物体),哪些是被遮挡物(会被其他物体遮挡)。一个游戏对象可以同时是遮挡物和被遮挡物。与旧版本不同,遮挡物和被遮挡物现在不一定要是静态的。 适合作为遮挡物的游戏对象通常是中型到大型的实体,例如墙壁或建筑物。 如果希望将场景中某个对象设置为遮挡物,那么该游戏对象需要满足下面的条件
任何可能在运行时被遮挡的游戏对象都适合设定为被遮挡物,包括小的或透明的游戏对象。要被设定为被遮挡物,游戏对象必须满足以下条件:
当确定好要设定为遮挡物和被遮挡物的游戏对象之后,就可以开始设置场景了。
1.选择要设定为遮挡物的游戏对象。
2.在 Inspector 窗口中,点击 Add Component,搜索 Occluder 并为设定为遮挡物的游戏对象添加一个 Occluder 组件。
3.选择要设定为被遮挡物的游戏对象。
4.在 Inspector 窗口中,打开 Renderer 组件(例如,Mesh Renderer),确保其中的 Additional Settings 中的 Dynamic Occlusion 选项被勾选。同理,如果取消某个游戏对象上的 Dynamic Occlusion,那么该对象将从遮挡剔除效果中排除。
5.将一个相机添加到场景中并选择该相机,或者选择一个现有相机。
6.在 Inspector 窗口中,确保启用了 Occlusion CullingA that disables rendering of objects when they are not currently seen by the camera because they are obscured (occluded) by other objects. More info
See in Glossary 功能。
完成上述步骤后,打开 Occlusion 视图 和 Scene 视图。然后,移动启用了遮挡剔除的相机,观察 Scene 视图。当相机因为 视锥体剔除 或 遮挡剔除 无法看到某个游戏对象时,您会看到该对象从视图中消失,表示该对象已被遮挡或不在相机的可视范围内。 在以下示例中,我们使用支持遮挡剔除的相机来观察场景。相机从正上方俯视场景,红色和蓝色对象代表遮挡物。它们下方有四个绿色的被遮挡物体。随着遮挡物的移动,你会看到被遮挡的绿色物体逐渐从视图中消失。
在 Stats选项中,您可以查看 Statistics窗口,了解当前的分析数据。与遮挡剔除相关的数据包括:
通过上述步骤,可以看到:设置被遮挡物只需要在对应的渲染组件上确保 Dynamic Occlusion 被勾选即可;而作为遮挡物的游戏对象上,需要添加一个新的 Occluder 组件,如下图所示:
开发者利用该组件,可以调整遮挡物对象的一些设置。
Occluder type: