unity学习——遮挡剔除

基本概念:

“遮挡剔除”过程可防止 Unity 为那些被其他游戏对象完全挡住(遮挡)的游戏对象执行渲染计算。

说白了就是如果摄像机看不见的物体,我就不用去管它了(渲染)。

遮挡剔除 我认为其实也是一个空间换时间的方法,做项目的时候可以结合遮挡区域、遮挡入口灵活运用。

遮挡剔除的效果展示:

未开启遮挡剔除

 开启遮挡剔除 

遮挡剔除的工作原理:

遮挡剔除会在 Unity Editor 中生成有关场景的数据,然后在运行时使用该数据来确定摄像机可以看到的内容。这种生成数据的过程称为烘焙。

在对遮挡剔除数据进行烘焙时,Unity 将场景划分为多个单元,并生成描述单元内几何体以及相邻单元之间可见性的数据。然后,Unity 尽可能合并单元,以减小生成的数据的大小。要配置烘焙过程,可以在 Occlusion Culling 窗口中更改参数,并在场景中使用遮挡区域。

在运行时,Unity 会将这些烘焙的数据加载到内存中,并且对于每个启用了 Occlusion Culling 属性的摄像机,将会对数据执行查询以确定该摄像机可以看到的内容。请注意,启用遮挡剔除后,摄像机将执行视锥体剔除和遮挡剔除。

如何使用静态遮挡剔除:

使用遮挡剔除一定要在相机的Inspector窗口勾选Occlusion Culling

  • 静态遮挡物限定:具有 Terrain 或 Mesh Renderer 组件、不透明、运行时不移动
  • 静态被遮挡物限定:具有任何类型的 Renderer 组件、运行时不移动

第一步设置被遮挡物和遮挡物:

静态遮挡物的所有游戏对象,设为Occluder Static,被静态遮挡物的所有游戏对象,设为Occludee Static。

第二步烘焙遮挡数据:

在顶部菜单中,选择 Window > Rendering > Occlusion Culling 以打开 Occlusion Culling 窗口。 2.选择 Bake 选项卡。 3.在 Inspector 窗口的右下角,按 Bake 按钮。Unity 会生成遮挡剔除数据,将数据另存为项目中的资源,并将该资源与当前场景关联。

第三部查看遮挡效果:

  1. 1.确保 Occlusion Culling 窗口和 Scene 视图均为可见状态。当 Occlusion Culling 窗口可见时,Unity 在 Scene 视图中显示遮挡剔除数据和 Occlusion Culling 弹出窗口。
  2. 在场景中选择一个摄像机。
  3. 移动摄像机,观察 Scene 视图。当由于视锥体剔除或遮挡剔除而导致摄像机无法看到游戏对象时,您应该会看到游戏对象从视图中消失。
  4. 使用 Scene 视图中的 Occlusion Culling 弹出窗口来配置可视化设置。
  5. 如果需要,请调整 Occlusion Culling 窗口的 Bake 选项卡中的烘焙设置,然后重复烘焙过程。

对动态游戏对象使用遮挡剔除 :

游戏对象可以是静态的,也可以是动态的(非静态)。静态游戏对象和动态游戏对象在 Unity 的遮挡剔除系统中的行为不同:

  • Unity 可以将静态游戏对象作为静态遮挡物和/或静态被遮挡物烘焙到遮挡剔除数据中。
  • Unity 无法将动态游戏对象烘焙到遮挡剔除数据中。动态游戏对象可以在运行时充当被遮挡物,而不能充当遮挡物。

如何启用动态遮挡剔除?

在对象的Inspector窗口勾选 Dynamic Occlusion,新建时默认已经勾选。

 Tip:如果确定 Unity 绝对不应该将遮挡剔除应用于特定的游戏对象,则可以禁用 Dynamic Occlusion 以减少运行时计算并降低 CPU 使用率。

遮挡区域

使用 Occlusion Area 组件可以定义遮挡剔除系统中的视图体积。视图体积是摄像机可能处于运行时的场景区域。在烘焙时,Unity 在视图体积内生成更高精度的数据。在运行时,当摄像机位于视图体积内的时候,Unity 进行更高精度的计算。

如果尚未在场景中定义任何视图体积,Unity 将在烘焙时创建一个视图体积,其中包含标记为 Occluder Static 或 Occludee Static 的所有场景几何体。在大型或复杂场景中,这可能导致不必要的大量数据、漫长的烘焙时间以及资源密集的运行时计算。为了避免发生这种情况,请将遮挡区域 (Occlusion Areas) 放置在场景中,从而定义摄像机可能处于的区域的视图体积。

可以给一个空物体挂载Occlusion Area组件,记得勾选 Is View Volume。

遮挡入口

遮挡入口 (Occlusion Portal) 可以是打开或关闭状态。遮挡入口关闭时,它将遮挡其他游戏对象。遮挡入口打开时,它不会遮挡其他游戏对象。列如: 门打开或者关闭

无需将 Occlusion Portal 组件置于其表示的游戏对象上。

在场景中设置遮挡入口:

  1. 选择场景中的合适游戏对象来充当遮挡入口。适合作为遮挡入口的游戏对象包括中型到大型的实体游戏对象(例如门)。
  2. 确保未将此游戏对象标记为 Occluder Static 或 Occludee Static。
  3. 将 Occlusion Portal 组件添加到游戏对象。
  4. 烘焙场景的遮挡数据。
  5. 确保 Occlusion Culling 窗口、Inspector 面板和 Scene 视图均为可见状态。
  6. 在 Scene 视图中,将摄像机移至遮挡入口正前方的位置。
  7. 选择具有 Occlusion Portal 组件的游戏对象。
  8. 在 Inspector 窗口中,开启和关闭 Occlusion Portal 组件的 Open 属性。在 Scene 视图中,观察遮挡剔除的差异。

在运行时打开和关闭遮挡入口:

  1. void OpenDoor() {
  2. // Toggle the Occlusion Portal's open state, so that Unity renders the GameObjects behind it
  3. myOcclusionPortal.open = true;
  4. // Call a function that plays a door opening animation, or otherwise hides the GameObject
  5. }

完结!

unity学习——遮挡剔除相关推荐

  1. Unity 3D 遮挡剔除(仅专业版) Occlusion Culling (Pro only)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Occl ...

  2. Unity - 遮挡剔除(Occlusion Culling)优化

    遮挡剔除对概念   很多童鞋的Unity作品完成后,发现场景卡的要死,尽管在模型阶段采用了很多优化建模方法,但还是卡顿.电脑端都这么卡,发布到移动端就更不用说了.遇到这种情况,很多童鞋急得团团转,不知 ...

  3. 遮挡剔除 2021-07-04

    遮挡剔除 遮挡剔除的运行将通过在场景中使用一个虚拟的摄像机来创建一个物体潜在可视性状态(set)的层级. 这些数据可以让每个运行时间内的摄像机来确定什么能看见什么看不见.通过这些数据, Unity 将 ...

  4. Unity3d遮挡剔除(Occlusion Culling)优化【2019】

    遮挡剔除的概念   很多童鞋的Unity作品完成后,发现场景卡的要死,尽管在模型阶段采用了很多优化建模方法,但还是卡顿.电脑端都这么卡,发布到移动端就更不用说了.遇到这种情况,很多童鞋急得团团转,不知 ...

  5. Unity Occlusion Culling 遮挡剔除研究

    本文章由cartzhang编写,转载请注明出处. 所有权利保留.  文章链接:http://blog.csdn.net/cartzhang/article/details/52684127  作者:c ...

  6. Unity(四十六):遮挡剔除

    原理 游戏中的元素非常多,但是摄像机能看到的内容是有限的,并且有些元素会被另外一些元素挡住,例如城墙一类的,城墙后面的元素就会被它挡住.如果不进行处理的话,这些元素也会带来一定的开销,此时可以使用遮挡 ...

  7. unity 性能优化之遮挡剔除(Occlusion Culling) 官方版

    遮挡剔除 (Occlusion Culling) 功能可在对象因被其他物体遮挡,当前在相机中无法看到时,禁用对象渲染.该功能不会在三维计算机图形中自动开启,因为在大部分情况下,离相机最远的对象最先渲染 ...

  8. Unity - 搬砖日志 - Occlusion Culling 关闭动态遮挡剔除 Renderer.allowOcclusionWhenDynamic = false

    文章目录 CullDynamicObjectsWithUmbra 消耗 如何禁止 动态对象的遮挡剔除的消耗 写工具来遍历 Renderer.allowOcclusionWhenDynamic = fa ...

  9. Unity优化之遮挡剔除Occlusion Culling

    遮挡剔除, 当一个物体被其他物体遮挡住而不在摄像机的可视范围内时不对其进行渲染..遮挡剔除在3D图形计算中并不是自动进行的.因为在绝大多数情况下离 camera 最远的物体首先被渲染,靠近摄像机的物体 ...

最新文章

  1. centos transmission 无法开启登录验证
  2. PHP 中华如何用命令连接数据库,选择MySQL数据库的命令以及PHP脚本下的操作方法...
  3. 哪些方法不能够实施Spring AOP事务
  4. JNI编程基础(二)——Android Studio NDK开发
  5. GDB多线程调试常用命令
  6. java二期_JAVA基础之多线程二期
  7. spring boot 视图层(JAVA之学习-2)
  8. [CF559C]Gerald and Giant Chess
  9. 五个金念什么_5个火读什么???还有5个水 5个木 5个土 5个金
  10. FLV格式视频转换成MP4格式教程
  11. 各种软件系统架构图解析
  12. 在 Pixel 3 手机上学习预测深度
  13. 【node进阶】深入浅出websocket即时通讯(二)-实现简易的群聊私聊
  14. LeetCode 0799. 香槟塔
  15. [SSL_CHX][2021-8-19]数根
  16. 粉丝测试题的软件,套路得粉丝的答题类H5推荐
  17. MySQL链接1142错误解决办法
  18. 新出免费字体——阿里巴巴普惠字体(附安装使用教程)
  19. 看过大佬们发的朋友圈之后,我相信:明天会更好,明年定会春暖花开
  20. 一夜狼人杀:千万不要沉默不语,参与游戏聊自己的角色

热门文章

  1. ubuntu box_将您的Ubuntu Box转换成卡拉OK机
  2. java 反射(二)之提高反射的方法 setAccessible(true)
  3. 打开PPT的密码忘记了,如何找回?
  4. 大学生应知道50件事
  5. 吴俊计算机音乐研究者,音乐创作中计算机音乐技术的应用研究
  6. ElasticSearch-常用搜索
  7. Python:批量读取目录下jpg文件,并输出jpg文件的绝对路径到指定txt文档中。
  8. Duplicate keys detected “***“.This may cause can up date error,解决方案。
  9. vue 将地址转换为二维码
  10. Python中语音播报的应用(简单版)