Occlusion Culling(遮挡剔除)

本文转载自:https://www.jianshu.com/p/d15eeae757a3

什么是Occlusion Culling(遮挡剔除)?
遮挡剔除, 当一个物体被其他物体遮挡住而不在摄像机的可视范围内时不对其进行渲染。.遮挡剔除在3D图形计算中并不是自动进行的。因为在绝大多数情况下离 camera 最远的物体首先被渲染,靠近摄像机的物体后渲染并覆盖先前渲染的物体(这被称为重复渲染"overdraw"). 遮挡剔除不同于视锥体剔除. 视锥体剔除只是不渲染摄像机视角范围外的物体而对于被其他物体遮挡但依然在视角范围内的物体,则不会被剔除. 注意当你使用遮挡剔除时你依然受益于视锥体剔除(Frustum Culling)

场景渲染无遮挡剔除

场景渲染带遮挡剔除

遮挡剔除是如何工作的?
遮挡剔除的运行将通过在场景中使用一个虚拟的摄像机来创建一个物体潜在可视性状态(set)的层级。 这些数据可以实时让每个摄像机来确定什么能看见什么看不见。通过这些数据,Unity 将确定只把可以看见的物体送去渲染。这将降低 绘制调用(draw calls) 的数量并增加 游戏的运行效率。

遮挡剔除的数据由单元格(cells)组成, 每个单元格是在整个场景的包围体积的一部分,单元格来自一个二叉树( binary tree),遮挡剔除使用两棵树, 一个给 View Cells (静态物体) ,另一个给 Target Cells (移动物体)。 View Cells 映射到一个定义静态可视物体的索引列表 (精确剔除后的静态物体)。

非常重要的一点是在创建你的物体时要随时注意,因为你需要在物体的大小和单元格的大小间取得一个好的平衡. 理想情况下,不应该有相比于物体,太小的单元格,但同样,物体不应该覆盖许多单元格.有时你可以通过将大的物体拆成几个部分来改进遮挡剔除效果. 然而,你仍然能够将小的物体合并在一起,来降低绘制调用次数(draw calls), 在它们都属于同一个小单元格的时候, 遮挡剔除将不起作用。单元格的集合和可视信息确定哪些单元格是可见的,被认为是 PVS (潜在可视集合Potentially Visible Set)。

如何设置设置遮挡剔除?
为了使用遮挡剔除 需要进行相关的手动设置。首先,你关卡中的几何体必须被分割成合理大小的块。这也有助于布置关卡中小块的,明确界定的区域 被其他大物体遮挡(例如墙,建筑物)。这意味着每个单独的网格根据遮挡数据确定是否渲染。所以如果你有一个物体包含了房间里的所有家具,那么所有的家具要么全渲染,要么全不渲染。 使每个家具都有自己的网格,这会有不一样的感觉,那么可以根据摄像机的视点,各个物体可以单独地被剔除。

在检视面板(Inspector) 你需要标识(tag) 所有需要应用遮挡剔除的场景物体。最快的方法是选择多个想要遮挡计算的物体,然后标记它们为Occlusion Static 和 Occludee Static。

为遮挡标记物体
我应该在什么时候使用Occludee Static?透明物体不能遮挡,以及小物件,都不可能阻挡其他的东西,应标记为Occludees,但不遮挡。这意味着它们将被视为能被其他物体遮挡,但不会被视为作为遮挡物自身,这将有助于减少计算量。

遮挡剔除窗口中如何设置?
首先打开遮挡剔除窗口(Window->Occlusion Culling)。在遮挡剔除窗口,可以使用遮挡物网格和遮挡区域。
—>Object选项卡
Screne Filter 可以选择编辑的对象类型,选中对象后可以调整其静态标识。

注意:
1.如果你没有创建遮挡区域,遮挡剔除将默认应用到整个场景。
2.每当相机在遮挡区域之外,遮挡剔除将不被应用。重要的是这种遮挡区域覆盖的地方要有相机,但如果遮挡区域太大,会导致更多烘焙开销。
3.Occlusion Areas应用于要实现遮挡的运动物体。(转另一篇)
—>Bake选项卡

这里可以设置物体遮挡的属性:
->Smallest Occluder: 最小遮挡物的尺寸(能遮挡其他物体的最小尺寸,任何小于这个尺寸的背后物体将被遮挡)
->Smallest Hole: 该值表示相机应该看到的几何图形之间的最小间隙。
->Backface Threshold:Unity的遮挡使用数据大小优化,通过测试背面减少不必要的细节。默认值为100是强大的,不会从数据集中删除背面。值为5将根据具有可见背面的位置积极减少数据。这个想法通常,有效的摄像机位置通常不会看到许多背景 - 例如,地形下面的视图,或者您不应该能够到达的固体对象中的视图。在阈值低于100的情况下,Unity将完全从数据集中删除这些区域,从而减少遮挡的数据大小。

在烘烤标签的底部是清除和烘培按钮。点击烘培按钮开始生成遮挡剔除数据。生成数据后,您可以使用“可视化”选项卡来预览和测试遮挡剔除。如果您对结果不满意,请点击清除按钮删除先前计算的数据,调整设置,然后再烘培。
—>Visualization选项卡

可以通过选择查看所有物体或者只看摄像机看到的物体,来检查剔除效果。

遮挡剔除消除drawcall的效率是非常高的,在一些大场景中往往能降低未优化时drawcall数量的50%甚至更多。

Occlusion Culling(遮挡剔除)相关推荐

  1. Occlusion Culling 遮挡剔除 相机系列5

    Occlusion Culling 遮挡剔除 本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>) 仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处. 文章中涉 ...

  2. Unity Occlusion Culling 遮挡剔除研究

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

  3. Occlusion(遮挡剔除)

    Occlusion 1.视锥体剔除(Frustum Culling) 根据摄像机的视见体的范围对场景模型进行剔除操作,在视见体以外的物体不被渲染,但是在视见体中的物体会以离摄像机最远的物体开始渲染,逐 ...

  4. Culling 渲染剔除

    文章目录 剔除 视锥体frustum裁剪 遮挡剔除 摄像机距离剔除 遮挡剔除 Occlusion Culling 建立遮挡剔除 遮挡剔除窗口 遮挡剔除烘焙 - bake Occlusion Area ...

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

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

  6. Occlusion culling

    遮挡剔除(仅专业版) Occlusion Culling (Pro only) Date:2013-04-25 11:50 Occlusion Culling is a feature that di ...

  7. [HSR算法-Occlusion Culling]

    作者:Siney 现在的HSR算法基本上可以分为四种:backface culling.frustum culling.portal culling.occlusion culling.它们的作用分别 ...

  8. Unity_7 如何使用遮挡剔除Occlusion Culling

    什么是Occlusion Culling(遮挡剔除) 当一个物体被其他物体遮挡住而不在摄像机的可视范围内时不对其进行渲染. 在绝大多数情况下离 camera 最远的物体首先被渲染,靠近摄像机的物体后渲 ...

  9. (转) Occlusion Culling(遮挡剔除)

    转自 作者:JervieQin 链接:https://www.jianshu.com/p/d15eeae757a3 什么是Occlusion Culling(遮挡剔除)? 遮挡剔除, 当一个物体被其他 ...

最新文章

  1. 简单的按键控制LED
  2. python遇到一个问题_新手学习python遇到的问题
  3. 在Leaflet地图上集成Echarts
  4. 【译】深入理解LSTM网络
  5. 我的世界服务器被无限循环怎么办,我的世界怎么制作无限循环装置_我的世界无限循环装置制作方法_游戏堡...
  6. 使用yml多环境配置
  7. Redis LRU 淘汰原理
  8. 解决Eclipse一直loading workbench无法启动的问题
  9. created写法_vue.js中created方法作用
  10. Kafka从上手到实践 - 庖丁解牛:Topic Broker | 凌云时刻
  11. 关于高德地图转换经纬度为屏幕点,方便自定义需链接网络的marker且添加属性动画
  12. Invisible character on env file, cause programe abort abnormally
  13. 2019牛客暑期多校训练营(第八场)B.Beauty Values
  14. 为什么一个简单腹泻,服用了附子理中丸后,会绵延十年不愈?(转)
  15. import cv2时出现ImportError: DLL load fail:找不到指定模块
  16. 网页JS自动化脚本(一)安装油猴或暴力猴等脚本管理器并新建脚本
  17. J2EE基础之自定义标签2
  18. 变现 起航篇! 手把手交你用chatgpt快速生成视频!
  19. 简单方法求next值
  20. JDK11Api文档下载操作

热门文章

  1. 一个很好用的深度学习云平台--Floyd
  2. 计算机视觉-OpenCV(七)
  3. 做实验好比开车,危险一直都在,为啥出事的就是你?
  4. 域用户绑定计算机,域批量绑定用户帐户与计算机帐户
  5. Vue3 京东到家项目实战第二篇(商家详情页面及购物车完整逻辑开发) 进阶式掌握vue3完整知识体系
  6. 基于springboot vue elementui酒店预订系统源码(毕设)
  7. 左耳朵耗子、池建强、江南白衣、余晟、朱赟限时赠书,3000本好书速领!
  8. python可以自动拆分表格吗_Python 拆分表格并发送邮件
  9. 轻言壁纸微信小程序源码
  10. 分享几个DJ网站音乐下载站