当前位置: 首页 > article >正文

【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(关闭遮挡)


http://www.kler.cn/a/468223.html

相关文章:

  • LInux单机安装Redis
  • 全面解读技术栈的作用及其积累路径:从开发到管理
  • Cyber Security 101-Web Hacking-Burp Suite: The Basics(Burp Suite:基础知识)
  • html中下拉选框的基本实现方式及JavaScript动态修改选项内容情况总结
  • Ubuntu22.04配置静态ip
  • 一文详解YOLOv8多模态目标检测(可见光+红外图像,基于Ultralytics官方代码实现),轻松入门多模态检测领域!
  • linux安装redis及Python操作redis
  • 嵌入式linux系统中CMake的基本用法
  • C# OpenCV机器视觉:霍夫变换
  • 社群团购平台的运营模式革新:以开源AI智能名片链动2+1模式商城小程序为例
  • HTML——74. 表单实战
  • 算法练习——分治_快排
  • 在k8s中部署Elasticsearch高可用集群详细教程
  • 《塑战核心》V1.0.0.9952官方中文版
  • Linux -前端需要了解的Linux 常见命令
  • ROS2 中的工作空间和功能包
  • Spring Cloud Gateway-自定义异常处理
  • 配置QoS
  • 发现API安全风险,F5随时随地保障应用和API安全
  • 【电机控制】低通滤波器及系数配置
  • 【微服务】1、引入;注册中心;OpenFeign
  • 数据中台与数据治理服务方案[50页PPT]
  • 【数据结构-堆】力扣2530. 执行 K 次操作后的最大分数
  • Ungoogled Chromium127 编译指南 MacOS 篇(二)- 项目要求
  • 查找项目的classes目录路径要使用“classpath:“类路径前缀
  • [最新] SIM卡取出后还能找到我的iPhone吗?