当前位置:文档之家› Unity场景遮挡剔除技术优化

Unity场景遮挡剔除技术优化

Unity场景遮挡剔除技术优化
复杂的三维场景,尤其是复杂的地表模型,具有复杂的结构,在渲染时需要花费更多的时间。

若要在实时渲染过程中快速绘制地形,应该首先考虑如何解决大规模数据构成的复杂地形表面模型与计算机图形硬件有限的绘制能力之间的矛盾。

遮挡剔除技术的出现,很大程度上解决了这一矛盾。

遮挡剔除(Occlusion Culling)技术,是用于三维场景优化的重要技术,当物体被其它更靠近摄像机的物体完全遮挡而无法在摄像机中显示时,将不对该物体进行渲染。

虚拟漫游系统的视点离地表较近,三维场景中较远的物体易被较近的物体所遮挡,当应用遮挡剔除技术时,将大幅降低场景中需要渲染的模型的数量,从而增加了产品实时渲染的速度。

Unity中的遮挡剔除技术
遮挡剔除在技术实现上,主要有两类方法:
一是将三维遮挡物体投影生成二维遮挡面并保存到深度缓存中,再利用深度图确立的遮挡关系进行深度剔除操作,即深度剔除法
另一类是将三维遮挡物体映射到二维平面,然后直接叠加到生成图像上,从而解决遮挡问题,即图像叠加方法。

在Unity中使用遮挡剔除时,会在渲染对象被送进渲染管线之前,将因为遮挡而不会被看到的隐藏对象或隐藏面进行剔除,从而减少了每帧的渲染数据量,提高了渲染性能。

Unity在减少渲染对象时,先通过摄像机的视场角范围和剪切平面将不显示的内容进行剔除,然后可以对显示视角范围内的保留物体进行遮挡剔除。

Unity中遮挡剔除技术的应用
(一)Occlusion Culling的应用
打开Unity,在场景中导入或者创建三维场景,这里重点研究遮挡剔除问题,所以使用Unity 建立一个如下图所示的简易示例场景。

场景中立方体表示实际场景中的建筑,它们之间会根据场景摄像机拍摄位置和视角的变化出现遮挡的情况。

Occlusion Culling的应用就是将被遮挡住的物体从渲染队列中剔除,以减少硬件设备的数据计算量。

(二)设置Occlusion面板
在Unity菜单中选择Windows—Occlusion Culling命令,将打开Occlusion窗口,场景中将出现Occlusion Culling设置面板,选择该面板中的View Volumes选项,场景中的物体将被网格进行空间划分,如下图所示。

选中场景中所有长方体(即模拟的建筑物),选择Occlusion窗口中的Object选项夹,勾选该窗口中的Occluder Static 和Occludee Static 选项。

其中Occluder Static选项用于赋予物体遮挡其它物体的能力,Occludee Static选项表示物体能够被其它物体所遮挡。

对于一些透明、较小的物体,一般只选择Occludee Static而不选择Occluder Static。

选择Occlusion窗口中的Bake选项夹,调整其中的Smallest Occluder、Smallest Hole 和Backface Threshold三项的值。

它们的功能如下:
●Smallest Occluder:设置最小遮挡物的尺寸,当遮挡物的长或者宽大于设定值时,该物体才能够遮挡住后面的物体。

●Smallest Hole:设置最小孔的尺寸,当穿过物体内部的孔或者多个物体堆叠形成的孔的大小小于设定值时,遮挡剔除烘焙将忽略该孔的存在。

●Backface Threshold:设置背面移除阈值,用于优化场景。

当该值为100时,摄像机拍摄不到的背面信息也会完整保留;当该值较小时,系统将对背面信息进行优化甚至去掉背面信息。

(三)遮挡剔除烘焙
参数设置完成后,点击窗口下方的Bake按钮即可进行遮挡剔除的烘焙,烘焙完成后,选择Occlusion窗口中的Visualization选项夹,即可在场景窗口中看到遮挡后的效果,大多数的长方体被剔除。

(四)使用Occlusion Area
Occlusion Area,即遮挡区域,用于场景较大而摄像机运动范围相对较小的情况。

为摄像机活动的区域设置Occlusion Area,可以减少烘焙的数据量,从而节约烘焙时间。

可以在未选中场景中物体的情况下,在Occlusion面板的Occlusion Areas选项夹下点击Create New后的Occlusion Area按钮进行创建。

然后就可以在层次面板中看到创建的Occlusion Area,并可以在场景中调整其位置和大小。

当需要进行遮挡剔除的区域被覆盖之后就可以对其进行烘焙。

相关主题