Unity笔记--渲染顺序

1. 相机(depth)

  相机的排序一定是最高级,按照相机depth升序渲染,depth越小越先渲染;

2. RendererQueue 0~2500(不关深度写入就是按z值显示)

shader往往开启深度写入,所以sortlayer、sort order及render queue造成的渲染顺序改变对于显示顺序并无影响;

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

  在同一个相机之下,优先渲染不透明物体,并按照RendererQueue升序排序,RendererQueue越小越先渲染。(需在SubShader中显示声明ZWrite Off,通知Unity我们会重写物体的渲染深度排序。)

  注意: 因为有深度缓冲(ZBuffer)和深度写入/深度检测存在,所以即便是后渲染的物体,如果Z值在先渲染的物体之后,图元依然会被舍弃。因此不透明物体的渲染顺序并不影响其显示顺序, Unity会自行调整其调用DrawCall的顺序。

3. SortLayer

  在同一个相机之下,当渲染透明物体时,优先按照SortLayer进行排序,SortLayer靠前的会被优先渲染。

4. SortOrder(z轴?)

  当相机、SortLayer都相同时,按照SortOrder进行排序,SortOrder低的优先被渲染。

5. RendererQueue 2501~5000

  当相机、SortLayer、SortOrder都相同时, 按照RendererQueue进行排序, RendererQueue较低的优先渲染。

  注意: 由于透明物体往往关闭了深度写入, 因此此时渲染顺序将严格按照RendererQueue进行排序。Unity在渲染透明物体时,如果RendererQueue相同,则会严格按照由远及近的顺序调用DrawCall。

6. Hierarchy顺序

  在UI中,以上条件皆相同的情况下,会按照UI在Hierarchy面板中的顺序进行排序。

  SortLayer、SortOrder这些属性都是canvas的,那么同一canvas下的控件如何不通过Hierarchy面板中的顺序进行渲染呢:

  改变控件之间的层级关系

原文链接:https://blog.csdn.net/kingsea168/article/details/50252733

同一canvas下:
  改变控件transform的SiblingIndex,
  transform.GetSiblingIndex();
  transform.SetSiblingIndex(int index); //index值越大,越后渲染,层级越大,越显示在前面

你可能感兴趣的:(笔记,unity)