Unity渲染顺序¶
Unity中的渲染顺序有三层: + 第一层:Camera的depth,值越大渲染越在前面 + 第二层:Sorting Layer,配置SortingLayer面板(越在下面的layer渲染越在前面),然后在Canvas上设置或者在Renderer组件上设置 + 第三层:SortingOrder,值越大越在前面渲染,然后在Canvas上设置或者在Renderer组件上设置 决定渲染顺序:第一层>第二层和第三层
相机渲染顺序¶
相机的渲染顺序,由Camera的Depth参数控制
RenderQueue¶
Queue分为五个队列:
Background,天空盒,天生用来被覆盖的(1000)
Geometry,不透明物渲染队列(2000)
AlphaTest,通道测试的几何体使用这个队列,这些物体的渲染有点介于Opaue与Transparent之间(2450)
Geometrylast,特殊的点,定义了透明与不透明的分界点(2500),属于不透明队列
Transparent,不写深度的物体,一般是透明物或粒子效果(3000)
Overlay,最后渲染的内容,天生覆盖别人的,如UI(4000)
RenderQueue与SortingLayer与Order之间的关系¶
Queue > 2500的物体绝对会在Queue <= 2500之后渲染,这时Layer、Order将完全不起作用-
Queue位于1中的同一侧时,Layer低的先渲染,无视Queue与Order值 -
Queue位于1中的同一侧时,Layer相同,Order低的先渲染,无视Queue -
Layer与Order都一样时,Queue低的先渲染
Opaque调整SortingLayer,SortingOrder为什么没作用?¶
因为不透明物体是打开ZWrite的,即使改了SortingLayer与Order,让一个本来在后边(Z值大)的物体先渲染了,但是另一个物体渲染时
由于Z值小,写深度以后,立马把前边的物体覆盖了,结果总是一样的;透明物渲染时,关闭了ZWrite,渲染的结果不是替换的,是
混合的,所以先渲染后渲染,结果就可能会不同(与混合的方式有关)
总结¶
Geometry不透明队列是RenderQueue<=2500的
Transparent透明队列是RenderQueue>2500的
1. 如果两个物体分别属于Geometry不透明队列 和Transparent透明队列,则Sorting Layer和Order in Layer怎么设置都是不起作用的 (Z值是最后决定前后关系的) 2. 如果两个物体都在Geometry不透明队列 或者都属于Transparent透明队列,则 在Sorting Layer高的绝对会在Sorting Layer前面,无视RenderQueue跟Order in Layer,只有在Sorting Layer相同的前提下,Order in Layer高的会在Order in Layer低的前面,无视RenderQueue。当Sorting Layer跟Order in Layer相同时,才看RenderQueue的高低,高的在前面。(假设ZWrite和ZTest关闭)
简要概括:物体属于同一队列则Layer比Queue优先如果要测试,则使用
Transparent透明队列测试,且把shader的深度写入和深度测试关闭 参考:
https://www.cnblogs.com/hiker-online/p/12489252.html
