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即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值