欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 【Unity3D】遮挡剔除 Occlusion

【Unity3D】遮挡剔除 Occlusion

2025/2/23 20:53:47 来源:https://blog.csdn.net/qq_39574690/article/details/144907772  浏览:    关键词:【Unity3D】遮挡剔除 Occlusion

目录

一、实现方法

二、为什么遮挡剔除无效,仅有视椎体剔除生效?

三、关于Occlusion Area组件的影响

四、动态遮挡物体 Occlusion Portal


参考文档:遮挡剔除 - Unity 手册

一、实现方法

版本:Unity 2021.2.7f1c1
位于射线前创建若干个立方体,将最前面的立方体放大遮挡住后面的立方体。

打开Occlusion面板

可单独选中遮挡物:勾选Occluder Static,将其变为遮挡静态物体

其他被遮挡物体则勾选Occludee Static

然后点击Bake,之后选中Main Camera 并点击进入Visualization

勾选Occlusion culling开启遮挡剔除,就生效了。

遮挡剔除包含2个部分的剔除,1、剔除视椎体之外的物体。2、剔除被挡住的物体。

如果你所有物体都可以是遮挡物体和被遮挡物体,那么Occludee Static、Occluder Static都要勾选

注意事项:

Smallest Occluder(最小的遮挡物体大小)设置太小会导致Bake数据增大,一般设置合适的遮挡物大小即可(默认是5)
Smallest Hole(最小的洞大小):是指那种镂空物体的洞如果想看到洞背后的物体,那么这个值必须比这个洞大小要小,也就是小于这个Smallest Hole大小的洞背后的物体都会被剔除掉。
Backface Threshold:官方解释一般不要动,保持100。
        Unity 的遮挡使用数据大小优化功能,通过测试背面来减少不必要的细节。默认值 100 比较稳妥,绝不会从数据集删除背面。值 5 将基于具有可见背面的位置大幅减少数据。思路是,一般情况下,有效的摄像机位置通常不会看到太多背面;例如,地形底面的视图,或者您应该无法到达的实体对象内的视图。如果阈值低于 100,Unity 将完全从数据集删除这些区域,从而减少遮挡的数据大小。

如果想再次Bake,必须先进行Clear,再Bake 否则旧的数据会影响而出现Bug。

二、为什么遮挡剔除无效,仅有视椎体剔除生效?

这是正常的Bake生成的空间数据(八叉树空间)用于快速搜索出可视物体和不可视物体的。

可以看到粒度足够小,因为我将Smallest Occluder调整成0.5大小就能遮挡,所以它会创那么细。
如果你将这个值调到超出了最大遮挡物体的大小,比如10.

那么肯定就会导致有些不能看到的物体,被看到了,而无法实现遮挡剔除,因为蓝色立方体变大了,它就更不准确地表达出这个物体的实际可视情况。它就会出现问题,如下:

其次就是Unity的Clear和Bake,当你调整了Smallest Occluder值后去重新Clear和Bake可能会无法正确生成蓝色格子,你必须确保蓝色格子正常生成才能恢复正常的遮挡剔除,如果保证?多点几次Clear和Bake 并且不要频繁地点,它是要等待执行的。

为什么你蓝色区域正确生成了,摄像机依然无法正常遮挡剔除?
因为摄像机并没有在蓝色区域空间内,无法正常执行遮挡剔除...
解决办法:在摄像机背后远处创1个立方体,同样要设置为Occludee Static或Occluder Static,然后再次Clear和Bake,保证摄像机是处于蓝色区域空间内的。如下是我创了几个在后面,实际1个就可以。
(实际上可利用Occlusion Area组件去创建正常的蓝色区域,必定包含摄像机的,下面有说明)

三、关于Occlusion Area组件的影响

 创建一个空物体,挂载Occlusion Area组件,并且该物体不能是静态的,确保勾选Is View Volume

这个区域会影响蓝色区域的生成,具体如何影响不清楚,如果你创了一个这样的物体,并且这个区域没有包含任何静态物体,那么蓝色区域会变成如下,就会导致遮挡剔除无效了一样。

你必须包含住所有的物体才正常。

关于这个组件的应用目前还未了解到,猜测是方便快速剔除某一大块区域的,也就是不局限于物体的大小去做蓝色区域,可以自定义一个整体块再去做蓝色区域,加速剔除效率?

四、动态遮挡物体 Occlusion Portal

创建一个立方体,挂载Occlusion Portal组件,取消Open勾选项【不要设置为静态物体】

然后重新Clear和Bake,这个物体就成为了动态遮挡物体,利用Open勾选项,确定是否开启遮挡,如果Open是False代表开启遮挡(关门遮挡),Open是True则关闭遮挡(开门不遮挡)

演示效果:(中间很大那块就是动态遮挡物体)

如下左图是Open为False(开启遮挡),右图是Open为True(关闭遮挡)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词