【Unity3d Shader】渲染顺序

1.Camera

camera.depth大的会遮挡camera.depth小的物体

2.Zwrite

在同一个Camera下。如果Zwrite开启,会按Z坐标进行排序。z值小的像素会遮挡z值大像素。

Z buffer 的原理非常简单。在绘制 3D 场景时,除了存放绘制结果的 frame buffer外,另外再使用一个额外的空间,也就是 Z buffer。Z buffer 记录在frame buffer 上,每个 pixel 和观察者的距离,也就是 Z 值。在开始绘制场景前,先把 Z buffer 中所有的值先设定成无限远。然后,在绘制三角面时,对三角面的每个 pixel 计算该 pixel 的 Z 值,并和 Z buffer 中存放的 Z 值相比较。如果 Z buffer 中的 Z 值较大,就表示目前要画的 pixel 是比较近的,所以应该要画上去,并同时更新 Z buffer 中的 Z 值。如果 Z buffer 中的 Z 值较小,那就表示目前要画的 pixel 是比较远的,会被目前 frame buffer 中的 pixel 遮住,所以就不需要画,也不用更新 Z 值。

3.RenderQueue

如果Zwrite关闭,则不会被写入深度缓存区。

RenderQueue>2500或RenderQueue<=2500排序,RenderQueue>2500的会遮挡RenderQueue<=2500的物体

在同一侧时如果SortingLayer和SortingOrder都相同,RenderQueue大的会遮挡RenderQueue小的物体

RenderQueue的一些常用值:

1、Background 1000 This render queue is rendered before any others. 这个队列通常被最先渲染(比如 天空盒)。
2、Geometry 2000 Opaque geometry uses this queue. 这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。
3、AlphaTest 2450 Alpha tested geometry uses this queue. 需要开启透明度测试的物体。Unity5以后从Geometry队列中拆出来,因为在所有不透明物体渲染完之后再渲染会比较高效。
4、GeometryLast – Last render queue that is considered “opaque”. 所有Geometry和AlphaTest队列的物体渲染完后
5、Transparent 3000 This render queue is rendered after Geometry and AlphaTest, in back-to-front order. 所有Geometry和AlphaTest队列的物体渲染完后,再按照从后往前的顺序进行渲染,任何使用了透明度混合的物体都应该使用该队列(例如玻璃和粒子效果)
6、Overlay 4000 This render queue is meant for overlay effects. 该队列用于实现一些叠加效果,适合最后渲染的物体(如镜头光晕)。

4.SortingLayer

如果RenderQueue在2500同一侧 SortingLayer排序,SortingLayer大的遮挡SortingLayer小的物体(无视renderqueue)

5.SortingOrder

如果SortingLayer相同,再按SortingOrder排序,SortingOrder的遮挡SortingOrder小的物体(无视renderqueue)

你可能感兴趣的:(shader)