Unity 中的遮挡剔除

时间:2021-01-19 10:22:35

标签: unity3d

我在 Unity 中使用了遮挡剔除,它适用于相机的旋转。但是,假设摄像机视野前有一堵大墙,而墙后有许多物体。现在,因为这些对象在相机的方向上,它们不会被剔除,即使它们在相机的视图中不可见。 我的问题是,在这种情况下,遮挡剔除是否可以隐藏在相机视野中被遮挡的物体?

1 个答案:

答案 0 :(得分:1)

要获得更详尽的解释,请通读以下内容;如果你想切入正题,请跳到最后。

说明:根据 Unity 文档,遮挡剔除是如何工作的:

<块引用>

遮挡剔除会在 Unity 编辑器中生成有关场景的数据,然后在运行时使用该数据来确定相机可以看到的内容。生成数据的过程称为烘焙。

当您烘焙遮挡剔除数据时,Unity 会将场景划分为多个单元格并生成描述单元格内几何体以及相邻单元格之间可见性的数据。 Unity 然后在可能的情况下合并单元格,以减少生成的数据的大小。要配置烘焙过程,您可以在 Occlusion Culling 窗口中更改参数,并在场景中使用 Occlusion Areas。

在运行时,Unity 将此烘焙数据加载到内存中,并且对于每个启用了遮挡剔除属性的相机,它都会对数据执行查询以确定该相机可以看到的内容。请注意,当启用遮挡剔除时,相机会执行视锥体剔除和遮挡剔除。

可以在此处找到有关遮挡剔除的更多信息unity's doc on culling

所以,基本上,Unity 使用这些烘焙数据来确定是否应该剔除游戏对象;但这仅适用于静态游戏对象。看看 unity 是如何剔除动态游戏对象的:

<块引用>

要确定动态 GameObject 是否充当被遮挡者,您可以在任何类型的 Renderer 组件上设置 Dynamic Occlusion 属性。启用动态遮挡后,当静态遮挡器从相机的视图中阻挡渲染器时,Unity 会剔除渲染器。禁用动态遮挡时,当静态遮挡器从相机的视图中阻挡渲染器时,Unity 不会剔除它。

可以在此处找到有关 unity 如何剔除动态游戏对象的更多信息:Using occlusion culling with dynamic GameObjects

使用遮挡剔除窗口,你应该烘焙unity所需的数据以启用遮挡剔除occlusion culling window

结论:所以为了剔除墙后的敌人,墙,“遮挡物”,应该是一个静态的游戏对象,你的敌人,“被遮挡的”应该有Dynamic Occlusion 在他们的渲染器上启用,Occlusion culling 应该在您的相机上激活,并且应该为您的场景烘焙遮挡剔除数据。