(转) Occlusion Culling(遮挡剔除)

转自
作者:JervieQin
链接:https://www.jianshu.com/p/d15eeae757a3

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIKSN2Gl-1615274976447)(//upload-images.jianshu.io/upload_images/3806085-63c0bf3905570bea.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/689/format/webp)]

场景渲染无遮挡剔除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HHBtB7gy-1615274976452)(//upload-images.jianshu.io/upload_images/3806085-99426b0343375208.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/689/format/webp)]

场景渲染带遮挡剔除

遮挡剔除是如何工作的?
遮挡剔除的运行将通过在场景中使用一个虚拟的摄像机来创建一个物体潜在可视性状态(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。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C3gQJ1dK-1615274976454)(//upload-images.jianshu.io/upload_images/3806085-21d7676701bf1415.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/259/format/webp)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Apd9C7eV-1615274976455)(//upload-images.jianshu.io/upload_images/3806085-bfd172ddff07541b.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/298/format/webp)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KNLxPmrc-1615274976456)(//upload-images.jianshu.io/upload_images/3806085-501421ba7c447c4c.png?imageMogr2/auto-orient/strip|imageView2/2/w/313/format/webp)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SrtFSxax-1615274976457)(//upload-images.jianshu.io/upload_images/3806085-d6e4d2c6c9ff381a.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/297/format/webp)]

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 完美剔除遮挡剔除都是计算机图形学中的优化技术,目的是在场景中只渲染可见的物体,从而提高渲染效率。 完美剔除是指通过检测物体是否在视野内来剔除不需要渲染的物体。这种剔除方式需要使用一系列算法来检测物体是否可见,包括视锥剔除、反向相交剔除等等。完美剔除的优点是可以剔除不必要的渲染,从而提高帧率和性能,但同时也需要较大的计算开销。 遮挡剔除则是在完美剔除的基础上,通过对物体的相互遮挡关系的检测来进一步提高渲染效率。在遮挡剔除中,通常会使用空间划分树等数据结构来优化遮挡关系的计算。遮挡剔除的优点是可以剔除视线被阻挡的物体,从而降低渲染负载,但是需要在每一帧进行遮挡检测,计算复杂度较高。 总的来说,完美剔除遮挡剔除都是提高渲染效率的有效方法,但具体应用取决于具体的场景和计算需求。 ### 回答2: Perfect culling - occlusion culling,也叫视野遮挡剔除,是计算机图形学中的一项技术,利用算法判断物体是否在视野或视线范围内,决定哪些物体需要渲染,哪些可以被剔除或隐藏,从而加速计算机图形的处理速度和优化渲染。 完美剔除是指完全的剔除,即仅在无需绘制的情况下进行剔除,从而节省系统资源。通过分析场景中的物体和环境,可以减少未被看到的物体的绘制,从而提高帧率和性能。此外,完美剔除还可以消除隐藏物体对深度测试产生的影响,提高渲染质量。 视野遮挡剔除Occlusion Culling)是一种先进的完美剔除技术,它基于场景的几何形状,通过计算相机的视线路径对场景中的物体进行剔除。通常,OC会对游戏场景进行预处理,并将相机的视锥体与场景的几何体进行比较,从而确定哪些物体可以被遮挡,从而进行动态的渲染。 综上所述,完美剔除-视野遮挡剔除是一种计算机图形学中高效的技术,可以显着提高渲染效率和性能,并使绘制的图形更加真实和准确。它在游戏开发、虚拟现实等领域有着广泛的应用前景。 ### 回答3: 完美的剔除技术——遮挡剔除 完美的剔除技术通常包括两种类型,一种是静态剔除,另一种是动态剔除遮挡剔除是一种静态剔除技术,它的基本原理是在场景渲染前,对场景进行逐像素的遮挡分析,找出被遮挡物体,将其剔除掉,只渲染视图内可见的物体,从而达到提高渲染性能的效果。这种技术可以应用于虚拟现实、游戏开发等领域,尤其是对于大规模场景和复杂场景的渲染遮挡剔除可以显著降低渲染的开销,提高场景的渲染效率。 具体来讲,遮挡剔除通过采用空间分区、视景体裁剪等技术,将场景以及被渲染物体分为多个区域,然后逐个区域对相邻的物体进行深度比较和遮挡分析,找出被遮挡物体,将其剔除掉。如果采用了合适的剔除策略和算法,遮挡剔除可以大幅减少被渲染对象的数量,从而降低了渲染的开销,提高了渲染效率和帧率。 总的来说,遮挡剔除技术在现代计算机图形学中是非常重要的技术之一,它可以有效地提高场景渲染效率,增加场景的视觉真实感和交互性,是图形学领域中不可或缺的技术之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值