一、Unity中的物体渲染顺序

一、渲染顺序决定因素
  • 1、摄像机渲染
    Unity中的渲染顺序首先是由摄像机(Camera)确定的,以摄像机为单元进行渲染,最后在根据设置将多个摄像机渲染的画面结合起来。不同物体首先按照摄像机深度进行渲染,深度高将会覆盖深度低的相机画面。
  • 2、渲染队列
    在同一个摄像机下,Unity以物体材质上的渲染队列(RenderQueue)数值进行了划分。
    • RenderQueue<2500,Opaque队列,通常是不透明物体
    • RenderQueue>2500,Transparent队列,通常是透明物体
      同一个摄像机下,Unity会先渲染Opaque队列中的不透明物体,然后渲染Transparent队列中的透明物体。其中的原理(https://zhuanlan.zhihu.com/p/416887453)如下:
      image.png
情况一:先渲染B再渲染A
1、渲染B时
2、深度测试和写入都开启 ,所以B的数据会写入颜色缓冲区和深度缓冲区
3、渲染A时
4、关闭深度写入,进行深度测试
深度测试的结果是A离相机的具体比B更近,所以我们会将A的透明度和颜色缓冲区中B的颜色值进行混合
得到的结果正确
情况二:先渲染A再渲染B
渲染A时
因为深度写入关闭,此时只将A写入了颜色缓冲区
渲染B时
因为深度缓冲区并没有数据,所以B就会直接覆盖颜色缓冲区中的A的颜色
很显然这个结果是错误的(结果的视觉上,B在A前边)

前提:通常情况,透明shader都是会关闭深度写入的。
结论:应该先渲染不透明物体再渲染半透明物体

  • 3、不透明物体的渲染
    Opaque队列中物体都是不透明物体,通常是开启了ZWrite的。
    由近到远渲染可以做遮挡剔除,减少了OverDraw,Opaque队列中的物体.只会由距离摄像机的深度决定,距离摄像机近的先进行渲染,开启深度写入后,相同位置深度靠后会被裁剪掉。
  • 4、透明物体的渲染
    透明物体的Shader通常关闭了ZWrite.
    • 1)SortingLayer的顺序
    • 2)SortingOrder的顺序
    • 3)RenderQueue的顺序
    • 4)都相同的情况下,根据包围盒中心距离摄像机的距离,由远到近进行渲染
  • 5、UGUI元素的渲染
    UGUI元素使用的UIDefault材质通常是RenderQueue为3000,走的是透明物体的渲染。
    • 1)SortingLayer的顺序
    • 2)SortingOrder的顺序
    • 3)RenderQueue的顺序
    • 4)都相同的情况下,根据元素在 Hierarchy 视图中的顺序
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容