Unity遮挡剔除使用
(1)设置对象为遮挡物or被遮挡物
选中某个对象后,在其Occlusion窗口可以设置其Occluder Static和Occludee Static属性:
- 遮挡物
通过勾选一个对象的Occluder Static 可将其设置为静态遮挡物。理想的遮挡物应该是实心的,体积较大的物体。
原则1:可能阻挡到其它对象的对象才应该被设置为遮挡物。一些远景物体不要设置成遮挡物,否则很可能会导致剔除数据成倍增长以及运行时剔除查询效率降低。另外半透明的物体也不应设置为遮挡物。
原则2:对于某些带类似小孔的物体(例如网,树叶茂盛的树木),可以不将其设置为遮挡物,这样可以避免得到不正确的结果。(smallest
hole参数可以处理这种情况但是其值不宜设得太小)
- 被遮挡物
通过勾选一个对象的Occludee Static(如上图)可将其设置为静态被遮挡物。
理想的被遮挡物应该是体积较小的,这样它被完全遮挡到的情况才会比较多,因此做遮挡剔除查询才比较有意义。但是如果将对象拆分得过小,也会导致遮挡剔除性能下降。
较大的物体不宜设成被遮挡物(例如在3dMax里合并了之后再倒入到Unity编辑器),但是请注意到被U3D做batch之后渲染的多个mesh在做遮挡剔除时还是会针对单个mesh分别进行,所以不受影响。
(2)烘培
在Occlusion窗口的Bake页面进行对场景的遮挡剔除数据的烘培。参见下图。
参数设置:
烘培参数的调整本质来说是剔除准确性和性能/效率的折中。在实践中,所示的三个参数值都应该从一个较大的值开始,不断调小,直到得到满意的结果。当你发现烘培时间过长或者烘培数据过大时,就应该尝试调大参数。
Smallest Hole
解释:如果场景中有带孔的物体需要能被视线穿透(例如墙上的洞, 房间的门),那么需要将Smallest Hole设置为小于孔的直径
原则:在不出现剔除错误(可见的物体被剔除了)的情况下,应该尽量将该值设大些。
建议值:0.05~0.50
Smallest Occluder
解释:顾名思义,就是场景内最小遮挡物的尺寸。设得过大会导致剔除成功率下降(但是应该不会产成剔除错误),过小会导致性能问题。
原则:设置为比Player高度略大的值。目前Player高度大概为1.8.
建议值:2~6
Backface threshold
解释:本参数的引入是为了减少剔除数据大小,另一方面,设置不当会导致剔除错误(可见的物体被剔除了)。因此,暂时请保持默认值100不变。