unity3D学习之遮挡剔除
-
遮挡剔除
(Occlusion
Culling)
功能可在对象因被其他物体遮挡,当前在相机中无法
看到时,禁用对象渲染。该功能不会在三维计算机图形中自动开启,因为在大部分情况下,
离相机最远的对象最先渲染,离相机近的对象覆盖先前的物体(该步骤称之为“重复渲染
(overdraw)
”)。遮挡剔除
(Occlusion Culling)
与视锥体剔除
(Frustum
Culling)
不同。
视锥体剔除
(Frustum Culling)
只禁用相机视野外的对
象渲染,不禁用视野中被遮挡的任
何物体的渲染。
注意,
使用遮挡剔除
(Occlusion
Culling)
功能时,
仍将受益于视锥体剔除
(Frustum Culling)
。文章来自【
狗刨学习网
】
未开启遮挡剔除
(Occlusion Culling)
时渲染的场景
开启遮挡剔除
(Occlusion
Culling)
时渲染的相同场景
遮挡剔
除过程将使用虚拟相机构建潜在可见对象集的层级视图,
应用于整个场景。
运行
时各相机使用这些数据来确定可见和不可见物体。
有了该信息,
Unity
将确保仅发送可见对
象进行渲染,从而减少绘制调用的次数,提高游戏性能。
p>
遮挡剔除的数据由单元格组成。
每个单元格是场景中整个包围区域的
细分部分。
更具体
来说,
单元格组成一
个二叉树。
遮挡剔除
(Occlusion Culling)
使用两棵树,
p>
一个用于视图
单元格
(View
Cells)
(
静态对象
(Static Objects)
)
,
另一个用于目标单元格
(Target
Cells)
(移动对象
(Moving
Objects)
)。视图单元格
(View Cells)
映射到定义可见静态对象的
索引列表,使静态对象的剔除结果更精确。
创建对
象时要切记这一点,因为对象大小需要与单元格大小达到良好平衡。理论上说,
单元格不
应比对象小太多,
同时对象也不应占用太多单元格。
有时可以将
大对象分成几个小
块,改善剔除效果。也可以合并一些小对象,减少绘制调用。只要都在
同一个单元格内,遮
挡剔除就不会受影响。
单元格集合和确定哪
些单元格可以在任何其他单元格中可见的可见性
信息被称为
PVS
(潜在可见集合
(Potentially Visible
Set)
)。
设置遮挡剔除
(Occlusion
Culling)
如需使用遮挡剔除
(Occlusion Culling)
功能,
须手动设置一些项。
首先,
关卡中的几
何体必须分成几个大小适中的部分。
这也有助于布置关卡中被墙壁、
建筑物等大对象相互遮
挡的明确定义的小区域。
所用原理为单个网格根据遮挡数据开启或关闭。
如果有一个对象包
含室内所有家具,
那么整套家具要么全被剔除,
要么全不被
剔除。
这与为每件家具制作网格
一样没有多大意义,以便每件家
具都能根据相机视点被单个剔除。
须在检视器
(Inspector)
中将想要成为遮挡的一部分的所有场景对象标记成静态遮挡
物<
/p>
(Occluder Static)
。最快的操作方法为选择多个想要加入遮挡计算的对象,将其标记为
静态遮挡物
(Occluder Static)
和静态被遮挡物
(Occludee
Static)
。