Unity-遮挡剔除

1.遮挡剔除简述

遮挡剔除的作用:可以降低被渲染对象的个数,降低渲染时间。
原理:避免对因为完全被其他物体挡住而不可见的物体的渲染。

2.遮挡剔除使用方法

Unity主要是用于静态遮挡剔除,但可以对动态物体进行遮挡剔除。
使用遮挡剔除主要有:
1.开启Occlusion Culling窗口,选中物体若为被遮挡物则在Static中设置为Occludee Static ,若为遮挡物在Static中设置为Occluder Static。

遮挡物
理想的遮挡物应该是实心的,体积较大的物体。

原则1:可能阻挡到其它对象的对象才应该被设置为遮挡物。一些远景物体不要设置成遮挡物,否则很可能会导致剔除数据成倍增长以及运行时剔除查询效率降低。另外半透明的物体也不应设置为遮挡物。

原则2:对于某些带类似小孔的物体(例如网,树叶茂盛的树木),可以不将其设置为遮挡物,这样可以避免得到不正确的结果。(smallest
hole参数可以处理这种情况但是其值不宜设得太小)

被遮挡物
通过勾选一个对象的Occludee Static(如上图)可将其设置为静态被遮挡物。

理想的被遮挡物应该是体积较小的,这样它被完全遮挡到的情况才会比较多,因此做遮挡剔除查询才比较有意义。但是如果将对象拆分得过小,也会导致遮挡剔除性能下降。

较大的物体不宜设成被遮挡物(例如在3dMax里合并了之后再倒入到Unity编辑器),但是请注意到被U3D做batch之后渲染的多个mesh在做遮挡剔除时还是会针对单个mesh分别进行,所以不受影响。

bake(烘焙)
在Occlusion窗口的Bake页面进行对场景的遮挡剔除数据的烘培

Smallest Hole 场景中有带孔的物体需要能被视线穿透,其设置小孔的直径(尽量大)。在0.05~0.50间
Smallest Occluder场景内最小遮挡物的尺寸,比player高度略大 ,一般在2~6。
Backface threshold 减少剔除数据的大小,设置不当可能导致出错,因此,暂时请保持默认值100不变。

Occlusion Culling:
用于观察遮挡剔除的效果。

动态遮挡剔除

动态遮挡剔除只用于被遮挡物,当要确定动态游戏对象是否充当被遮挡物,可以在任何类型的渲染器组件上设置 Dynamic Occlusion 属性。

启用 Dynamic Occlusion 后,渲染器在摄像机的视图中被静态遮挡物 (Static Occluder) 阻挡时,Unity会剔除渲染器。
禁用 Dynamic Occlusion 后,渲染器在摄像机的视图中被静态遮挡物 (Static Occluder)阻挡时,Unity 不会剔除渲染器。 默认情况下会启用Dynamic Occlusion。为了获得特定的效果,例如在墙后的角色周围绘制轮廓,可能需要禁用 Dynamic Occlusion。 如果确定 Unity 绝对不应该将遮挡剔除应用于特定的游戏对象,则可以禁用 Dynamic Occlusion 以减少运行时计算并降低 CPU使用率。 虽然这些计算对每个游戏对象的影响很小,但如果规模足够大,减少这些计算可能有利于提高性能。

猜你喜欢

转载自blog.csdn.net/AD_GOD/article/details/124635285