unity 遮挡剔除的实现

unity在渲染时,默认只是对模型进行视椎体剔除,也就是在相机显示范围内的物体进行剔除,而遮挡剔除则是,渲染物体被整个遮挡住后,将不参与此帧的渲染,unity虽然内置,但是不默认启用,需要我们进行一些操作,才能够实现当前的操作。

设置场景

对于静态的模型,我们需要设置其为static属性,最简单的方式。
在这里插入图片描述
或者,单独设置其的属性
在这里插入图片描述
Occluder Static 属于静态遮挡物体,设置后,客气遮挡其它物体
Occludee Static 属于静态被遮挡物体,设置后,可以被其它遮挡物体遮挡。

对于动态或者可移动的物体,如果需要被遮挡,那么需要在其Mesh Renderer 或者 Skinned Mesh Renderer上面设置即可
在这里插入图片描述
开启Dynamic Occlusion

对于动态加载的物体,要能够遮挡其它物体,需要挂载Occlusion Portal脚本进行实现
在这里插入图片描述
比如 门 那种入口处的,可以用这个实现,实现遮挡 需要将Occlusion Portal脚本的Open属性关闭。确保未将此游戏对象标记为 Occluder Static 或 Occludee Static

注意:

场景内元素设置好以后,需要再烘焙一次场景资源,才能够实现遮挡的效果。动态加载的物体也一样。
对于会移动的物体,遮挡效果不会起作用。有可能会出现视觉错误。

烘焙遮挡数据

在这里插入图片描述
可以在Window --Rendering–Occlusion Culling 打开遮挡剔除面板。
在这里插入图片描述
Object 为对象选择面板,在里面可以选择All 全部对象显示,Renderers 只显示带有渲染器的对象 Occlusion Areas 只显示创建的遮挡剔除区域。
随着你的选择,你的Hierarchy列表也会跟着变化。
下面也会显示你没有设置静态遮挡的渲染器。

在这里插入图片描述
Bake 列表是烘焙遮挡数据的一些配置项。
Smallest Occluder 可以遮挡其他游戏对象的最小游戏对象的大小(以米为单位)。通常,要使文件最小且烘焙时间最短,应选择在场景中产生良好结果的最大值。

Smallest Hole 摄像机可以看到的最小间隙的直径(以米为单位)。通常,要使文件最小且烘焙时间最短,应选择在场景中产生良好结果的最大值。

Backface Threshold 如果需要减小烘焙数据的大小,Unity 可以在烘焙时对场景进行采样,并排除场景中可见遮挡物几何体所含背面超过给定百分比的部分。背面百分比很高的区域可能在几何体的下方或内部,因此不太可能是在运行时摄像机所在的某个位置。默认值 100 表示绝不会从数据中删除区域。值越小,产生的文件就越小,但可能会导致视觉失真。

正常的操作就是,Smallest Occluder和Backface Threshold的值调小,Smallest Hole的往大调,一直调到不可以接受的值,再回调一下即可。这就是最适合当前场景的配置。
在这里插入图片描述
可视化,可以运行起来,然后选择Cameras,列表就会显示所有的相机,选择一个,就会发现窗口上有一个可视化配置,
在这里插入图片描述
选择Visualize选项,我们可以查看当前的剔除效果。
在这里插入图片描述
勾选Occlusion culling可以查看当前相机剔除了多少模型。

在这里插入图片描述
面板最下面就是清空烘焙的数据,以及重新烘焙。调整好之后,在未运行的状态下,点击Bake即可。

猜你喜欢

转载自blog.csdn.net/qq_30100043/article/details/126973971