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

  • 相关阅读:
    javascript基础
    杂谈
    六大设计原则
    MVC的理解
    不错的资源哦
    平时你从哪里获取前端知识?
    网站背景平铺
    js 获取节点
    自适应后的页面用户点击后会放大
    innerHTML的运用
  • 原文地址:https://www.cnblogs.com/lancidie/p/12368321.html
Copyright © 2011-2022 走看看