Unity中的物体遮挡关系(一)——基础认知

写在前面

之前只对UI内部的层级关系有运用,对于各类物体(3D物体、UI、粒子特效等)之间的层级关系没怎么了解过。最近为了解决UI与特效的层级关系,特意学习了一下,现在总结一下自己的认知。

测试版本:Unity5.6.6f2

我的结论

先上我的总结:
• 不透明物体之间的遮挡关系按照前后关系(相对摄像机)相互遮挡
• 不透明物体与透明物体之间的遮挡关系也是按照按照前后关系(相对摄像机)相互遮挡
• 透明的物体之间的相互遮挡关系与Sorting Layer、Order in Layer、Render Queue都有关系,且优先级 Sorting Layer > Order in Layer > Render Queue,三种相同时,根据物体实际前后关系(相对摄像机)相互遮挡

基础认知

1 不要混淆Sorting Layer和Layer

Unity中的物体遮挡关系(一)——基础认知

2 可以使用Sorting Group设置

UI和粒子可以使用其自身的设置对Sorting Layer和Order in Layer进行设置,而对于其他物体可以使用Sorting Group组件修改设置,或者自行通过代码获得Renderer后进行修改
Unity中的物体遮挡关系(一)——基础认知Unity中的物体遮挡关系(一)——基础认知
Unity中的物体遮挡关系(一)——基础认知

3 Render Queue

对于Render queue我们容易遗漏的一个就是2500的GeometryLast,这是不透明与透明物体的渲染队列的分界线,小于等于2500的队列用于不透明的物体,大于2500的队列用于透明物体。我们通过Frame Debugger查看可以发现渲染的时候有一个不透明渲染流程和一个透明渲染流程。不透明物体的状态变化少,区分开来渲染效率会更高,而透明物体的渲染较为复杂,仅仅通过一个Render Queue无法满足需求,因此又有Sorting Layer 和 Order In Layer两个参数来组合设置。
Unity中的物体遮挡关系(一)——基础认知
Unity中的物体遮挡关系(一)——基础认知
Last render queue that is considered “opaque”.

Render queues in [0, GeometryLast] range are treated as opaque objects (sorted to reduce render state changes), whereas queues in [GeometryLast+1, 5000] range are treated as semitransparent objects (sorted back-to-front).
Unity中的物体遮挡关系(一)——基础认知

测试流程

测试就不详述了,就是不断修改这些影响因素,根据得到的结果的不同进行总结。

参考资料

https://qxsoftware.github.io/Unity-Rendering-Order.html
https://www.jianshu.com/p/7a033810706f
https://docs.unity3d.com/560/Documentation/Manual/SL-SubShaderTags.html