Version: 1.6
语言 : 中文
开始使用遮挡剔除
设置阴影遮挡剔除

设置场景遮挡剔除

在 Options 选项卡中打开遮挡剔除开关

Options 选项卡提供了开启或关闭当前场景遮挡剔除的功能。勾选 Enable occlusion for current scene 后,引擎会在当前场景同级目录下创建一个与场景同名的文件夹,并在其中生成 OcclusionCulling.asset 文件,用于保存场景中的遮挡剔除数据。 取消勾选该选项后,将会删除该文件。 此外,开启遮挡剔除后,Options 选项卡中会出现两个配置项:Scene Depth BufferShadow Depth Buffer,分别用于配置基于相机视角的遮挡剔除和基于 Shader 的阴影遮挡剔除。

  • Width:用于设置场景遮挡剔除时深度缓冲区的宽度。默认值 512,最小值 8,最大值 8192。
  • Height:用于设置场景遮挡剔除时深度缓冲区的高度。默认值 512,最小值 4,最大值 8192。

合理设置这些参数可以有效优化内存使用,避免过大的缓冲区浪费内存或过小的缓冲区导致精度问题。

设置场景

在使用遮挡剔除之前,首先要确定哪些游戏对象是遮挡物(会遮挡其他物体),哪些是被遮挡物(会被其他物体遮挡)。一个游戏对象可以同时是遮挡物和被遮挡物。与旧版本不同,遮挡物和被遮挡物现在不一定要是静态的。 适合作为遮挡物的游戏对象通常是中型到大型的实体,例如墙壁或建筑物。 如果希望将场景中某个对象设置为遮挡物,那么该游戏对象需要满足下面的条件

  • 拥有一个 Renderer 组件;
  • 不透明。

任何可能在运行时被遮挡的游戏对象都适合设定为被遮挡物,包括小的或透明的游戏对象。要被设定为被遮挡物,游戏对象必须满足以下条件:

  • 具有任何类型的 Renderer 组件。

当确定好要设定为遮挡物和被遮挡物的游戏对象之后,就可以开始设置场景了。

1.选择要设定为遮挡物的游戏对象。

2.在 Inspector 窗口中,点击 Add Component,搜索 Occluder 并为设定为遮挡物的游戏对象添加一个 Occluder 组件。

3.选择要设定为被遮挡物的游戏对象。

4.在 Inspector 窗口中,打开 Renderer 组件(例如,Mesh Renderer),确保其中的 Additional Settings 中的 Dynamic Occlusion 选项被勾选。同理,如果取消某个游戏对象上的 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_Culling功能

在 Scene 窗口中预览遮挡剔除效果

完成上述步骤后,打开 Occlusion 视图 和 Scene 视图。然后,移动启用了遮挡剔除的相机,观察 Scene 视图。当相机因为 视锥体剔除 或 遮挡剔除 无法看到某个游戏对象时,您会看到该对象从视图中消失,表示该对象已被遮挡或不在相机的可视范围内。 在以下示例中,我们使用支持遮挡剔除的相机来观察场景。相机从正上方俯视场景,红色和蓝色对象代表遮挡物。它们下方有四个绿色的被遮挡物体。随着遮挡物的移动,你会看到被遮挡的绿色物体逐渐从视图中消失。

遮挡剔除效果的动态演示过程
遮挡剔除效果的动态演示过程

Stats选项中,您可以查看 Statistics窗口,了解当前的分析数据。与遮挡剔除相关的数据包括:

  • Culled renderers:表示已被剔除的 Renderer 数量,格式为:[被剔除的数量] / [当前场景中的总数量];
  • Culled shadow casters:表示已被剔除的阴影数量,格式为:[被剔除的阴影数量] / [当前场景中的阴影总数量];
  • OC Verts (scene / shadow):显示场景和阴影中分别被遮挡剔除的顶点数量。
遮挡剔除统计数据面板
遮挡剔除统计数据面板

Occluder 组件

通过上述步骤,可以看到:设置被遮挡物只需要在对应的渲染组件上确保 Dynamic Occlusion 被勾选即可;而作为遮挡物的游戏对象上,需要添加一个新的 Occluder 组件,如下图所示:

添加新的Occluder组件
添加新的Occluder组件

开发者利用该组件,可以调整遮挡物对象的一些设置。

Occluder type

  • Mesh:需要指定一个 Proxy Mesh。它应与实际遮挡物 Mesh 尽量贴合,但不要超出范围,且为优化性能,尽量减少顶点数量。如果不指定 Proxy Mesh,引擎会默认使用当前 Mesh Renderer 组件中的 Mesh,但通常不建议这样做,因为默认的 Mesh 可能顶点较多。
  • Volume:选择后设置边数并点击 Create 创建 Volume。创建完成后,点击 Edit Occluder Volume,然后可以调整位置和旋转。
选择 Volume 作为遮挡物类型
选择 Volume 作为遮挡物类型
  • Position、Rotation、Scale:这些参数用于调整遮挡物相对于当前游戏对象的变换偏移量,可用于微调遮挡效。
  • Open:该选项对应旧版本遮挡剔除功能中的 OcclusionPortal 组件。勾选此选项后,对应的遮挡物将不再进行遮挡剔除。此选项允许在游戏中动态设置遮挡物的遮挡剔除能力是否生效。
开始使用遮挡剔除
设置阴影遮挡剔除