遮挡剔除介绍
遮挡剔除是一种什么样的特性呢, 当一个物体被其他物体遮挡住而不在摄像机的可视范围内时不对其进行渲染。. 遮挡剔除在3D图形计算中并不是自动进行的。因为在绝大多数情况下离 camera 最远的物体首先被渲染,靠近摄像机的物体后渲染并覆盖先前渲染的物体(这被称为重复渲染,无效渲染"overdraw"). 遮挡剔除不同于视锥体剔除. 视锥体剔除只是不渲染摄像机视角范围外的物体而对于被其他物体遮挡但依然在视角范围内的物体则不包括在内. 注意当你使用遮挡剔除时你依然受益于视锥体剔除(Frustum Culling).
在检视面板(Inspector) 你需要标识(tag) 所有需要应用遮挡剔除的场景物体。最快的方法是选择多个想要遮挡计算的物体,然后标记它们为Occlusion Static 和 Occludee Static。
我应该在什么时候使用Occludee Static?透明物体不能遮挡,以及小物件,都不可能阻挡其他的东西,应标记为Occluders,但不是遮挡。这意味着它们将被视为能被其他物体遮挡,但不会被视为作为遮挡物自身,这将有助于减少计算量。
对于大场景,一定要用上遮挡剔除,要不场景大了,渲染绘制的太多,会很卡。
首先创建一个简单的场景。
一个大的物体挡住后面N多小物体。
遮挡剔除的操作
设置物体的遮挡和被遮挡,一般直接设为Static,但是我建议最好还是自己勾选。
先全部选中,然后勾上OccluderStatic和OccludeeStatic,如图:
移动摄像机我们就可以看到摄像机视锥体之外的内容将会被剔除掉遮挡剔除前
遮挡提出后
图中红色圆形框的内容是由于高楼挡住摄像机的视野,剔除掉的区域
具体参数详解
遮挡区域,用于场景较大而摄像机运动范围相对较小的情况。为摄像机活动的区域设置Occlusion Area,可以减少烘焙的数量,从而节约烘焙时间。可以在未选中场景中物体的情况下,在Occlusion面板的Occlusion Area选项夹下点击Create New后的Occlusion Area,并可以在场景中调整其位置和大小。当需要进行遮挡剔除的区域被覆盖之后就可以对其进行烘焙。在此区域内可以对静态和动态的物体进行遮挡剔除。
Smallest Occluder:设置最小遮挡物的尺寸,当遮挡物的长度或者宽大于设定值时,该物体才能够遮挡住后面的物体。
Smallest Hole:设置最小孔的尺寸,当穿过物体内部的孔或者多个物体堆叠形成的孔的大小小于设定的值时,遮挡剔除烘焙将忽略该孔的存在。
Backface Threshold:设置背面移除阈值,用于优化场景,当该值为100时,摄像机拍摄不到的背面信息也会完整保留;当该值较小时,系统将对背面信息进行优化甚至去掉背景信息。
遮挡剔除技术作为场景优化的重要技术之一,在虚拟场景的优化过程中被广泛应用。Unity作为比较成熟的游戏开发引擎,使用Occlusion Culling引入了遮挡剔除功能。