zoukankan      html  css  js  c++  java
  • Unity影响渲染顺序因素的总结

    https://blog.csdn.net/u011748727/article/details/68947207

    如果不了解Shader中如何使用模板缓冲区,可能看不懂例子。

    渲染顺序,我理解为进入显卡流水管线的顺序,会对Z、Stencil和Color Buffer带来影响。
    当然,能否最终被绘制到屏幕上,还要看深度检测和模板检测的结果。

    能够影响渲染顺序的因素有:
    1、Camera Depth
    相机组件上设置的相机深度,深度越大越靠后渲染。
    2、Sorting Layer
    在Tags & Layers设置中可见

    3、Order In Layer
    相对于Sorting Layer的子排序,用这个值做比较时只有都在同一层时才有效。
    4、RenderQueue
    Shader中对Tags设置的“Queue”。

    下面是结果:
    1、Camera Depth
    永远最高。Camera Depth小的一定先进渲染管线。

    2、当Sorting Layer和Order In Layer相同时
    RenderQueue小的先进渲染管线。

    3、当Sorting Layer和Order In Layer不相同时!
    3.1 当两个材质使用了不同的RenderQueue,且这两个RenderQueue都在[0~2500]或[2501~5000]时,SortingLayer和OrderInLayer的排序生效。
    3.2 当两个材质使用了不同的RenderQueue,且这两个RenderQueue分别在[0~2500]和[2501~5000]时,则一定会按照RenderQueue绘制,无视SortingLayer、OrderInLayer的排序。

    过程:

    吕布Shader会向StencilBuffer中写 1


    关羽Shader会根据StencilBuffer来进行显示判断

    当两个材质使用了不同的RenderQueue,且这两个RenderQueue都在[0~2500]或[2501~5000]时,顺序为:

    调高RenderQueue也是一样

    RenderQueue对渲染顺序没有影响。

    注意:
    当两个材质使用了不同的RenderQueue,且这两个RenderQueue分别在[0~2500]和[2501~5000]时,则一定会按照RenderQueue绘制,无视SortingLayer、OrderInLayer。


    推测是因为2500为Unity作为Opacity和Transparent的分界线,因此如果两个材质的Queue分别在分界线的两边,也就是一个不透明一个透明,则Unity一定会先把不透明的物体送进渲染管线,无论Sorting Layer和Order In Layer到底怎么排序。

    另外:
    MehRenderer的sortingLayer与Canvas的sortingLayer同级
    MehRenderer的sortingOrder与Canvas的OrderInLayer同级
    ————————————————
    版权声明:本文为CSDN博主「枸杞忧天」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u011748727/article/details/68947207

  • 相关阅读:
    PHPExcel读取excel03/07版到数组
    firefox 自定义快捷键
    phpstorm 自定义函数配置
    解决FPDF报错:FPDF error: Not a JPEG file / FPDF error: Not a PNG file
    mysql学习笔记
    定时备份服务器数据库(借助windows任务计划以及mysqldump)
    discuz 注册用户用到的几个表
    phpstorm配置取消掉63342
    discuz random函数
    discuz X3.2邮箱非必填
  • 原文地址:https://www.cnblogs.com/lancidie/p/12368321.html
Copyright © 2011-2022 走看看