Occlusion Culling(遮挡剔除)(转)

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

什么是Occlusion Culling(遮挡剔除)?

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

场景渲染无遮挡剔除
场景渲染带遮挡剔除

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

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

其实这就是unity遮挡剔除的算法,但是unity并没有开源出来,具体怎么实现不清楚。有知道的同学麻烦告知一声,谢谢。

更新:unity 使用的是Umbra作为中间件。Umbra是一个芬兰中间件公司,做出核心技术之后,于2007年成立,专注于解决3d可见性。

参考:
三维渲染中的裁剪总汇
大地图开发管理:《巫师3》Umbra遮挡剔除技术

非常重要的一点是在创建你的物体时要随时注意,因为你需要在物体的大小和单元格的大小间取得一个好的平衡. 理想情况下,不应该有相比于物体,太小的单元格,但同样,物体不应该覆盖许多单元格.有时你可以通过将大的物体拆成几个部分来改进遮挡剔除效果. 然而,你仍然能够将小的物体合并在一起,来降低绘制调用次数(draw calls), 在它们都属于同一个小单元格的时候, 遮挡剔除将不起作用。单元格的集合和可视信息确定哪些单元格是可见的,被认为是 PVS (潜在可视集合Potentially Visible Set)。
\color{red}{这里其实已经说得比较清楚了,我们在创建物体的时候尽量跟单元格大小差不多,因为可能}
\color{red}{是基于性能的考虑,算法只是对单元格进行粗略计算遮挡关系,对于那些占了许多个单元格}
\color{red}{的物体,有可能因为某一个单元格没有被认为是遮挡,而导致整个物体没有遮挡,所以建议}
\color{red}{大的进行拆分,而对于太小的物体,许多个小物体才导致填满一个单元格,此时单个物体其}
\color{red}{实已经对算法已经不起多大作用了,另一个重要的原因就是多个小物体可能需要更多的绘制}
\color{red}{次数(drawcall),所以建议合并。然而,然而,一个单元格到底有多大????并没有告}
\color{red}{诉我们,各位同学谁知道,也麻烦告知一声,谢谢啊}

更新:需要注意的是,对象若太大,对遮挡剔除来说,意义不大,太小构建时间太长,顶点数也多,造成过多的drawCall,总之,注意平衡!没有放之四海而皆准的方法。这说明并没有一个具体的参考指标,只有靠实践了。

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

在检视面板(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%甚至更多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335