【Unity Shader 中SubShader相关介绍】

简介: 【Unity Shader 中SubShader相关介绍】

Unity Shader 中SubShader相关介绍


每个Shader都会包含至少一个SubShader。Unity显示物体时候,它会去检测这些SubShader,然后选择一个能够在当前显卡运行的SubShader。


通常,SubShader的大致结构如下:

Shader "Unlit/NewUnlitShader"
{
    Properties
        {***}
    SubShader
    {
        //Tages=标签:可以设置一个或多个Tages
        Tags { "RenderType" = "Opaque" }
        //标签语法:
        Tags { 
          "TagsName1" = "Value1"
          "TagsName2" = "Value2"
          "TagsName3" = "Value3"
          ...//没有数量的限制
         }
    //渲染状态和标签放在Subshader之下Pass之外的意思是对下面所有的Pass做影响,放在Pass内的意思是只对这一个Pass做影响。
    Cull Back
        {***//子着色器}
        
        Pass//Pass可以设置多个,但是会消耗性能,也就是尽可能的用在一个Pass里面进行效果实现。
        {***//第一个Pass}
        Pass
        {***//第二个Pass}
            ENDCG
        }
    }
}

SubShader的分支结构。

image.png

在SubShader中用Queue(队列)标签确认物体的渲染顺序,Unity定义了五种渲染队列,如下

渲染队列名称 描述 队列号
Background 最先执行谊染,一般用来谊染天空盒(Skybox)或者背景 1000
Geometry 非透明的几何体通常使用这个队列,当没有声明渲染队列的时候,Unity 会默认使用这个队列 2000
AlphaTest Alpha 测试的几何体会使用这个队列,之所以从 Geometry 队列单独拆分出来,是因为当所有实体都绘制完之后再绘制 Alpha 测试会更高效 2450
Transparent 在这个队列的几何体按由远及近的顺序进行绘制,所有进行 Alpha 混合的几何体都应该使用这个队列,例如玻璃材质、粒子特效等 3000
Overlay 用来叠加渲染的效果,例如镜头光晕等,放在最后渲染 4000

除了使用 Unity 预定义的渲染队列,也可以自己指定一个队列,例如:Tags { “Queue” = “Geometry + 1” }

这个队列的队列号其实是 2001,表示在所有的非透明几何体绘制完成之后再进行绘制。使用自定义的渲染队列在某些情况下非常有用,例如:透明的水应该在所有不透明几何体之后,透明几何体之前被绘制,所以透明水的渲染队列一般会使用{ “Queue” = “Transparent-1” }。

除了在SubShader中指定渲染队列,也可以在材质面板中进行设置,也可以选择一个Unity预设的队列。还可以自已在输入框输入一个队列号。


如图:


渲染类型


RenderType(渲染类型)标签可以将Shader划分为不同的类别,用于后期进行Shader替换或者产生相机的深度纹理,归纳整理后如下:

类型名称 描述
Opaque 用于普通Shader,例如:不透明、自发光、反射、地形Shader
Transparent 用于半透明 Shader 例如:透明、粒子
TransparentCutout 用于透明测试Shader,例如:植物叶子
Background 用于Skybox Shader
Overlay 用于UGI纹理、Halo、Flare Shader
TreeOpaque 用于地形系统中的树干
TreeTransparentCutout 用于地形系统中的树叶
TreeBillboard 用于地形系统中的Billboarded树
Grass 用于地形系统中的草
GrassBillboard 用于地形系统中的Billboarded草
相关文章
|
图形学 Android开发 iOS开发
|
1月前
|
图形学 异构计算
【Unity Shader 中Pass相关介绍_第四篇】
【Unity Shader 中Pass相关介绍_第四篇】
|
1月前
|
图形学
【Unity Shader#自定义材质面板_第一篇】
【Unity Shader#自定义材质面板_第一篇】
|
1月前
|
存储 图形学
【Unity Shader 中Pass相关介绍_第一篇】
【Unity Shader 中Pass相关介绍_第一篇】
|
9月前
|
存储 图形学
浅谈Unity之模型裁剪shader
Unity之模型裁剪shader
|
10月前
|
存储 编译器 图形学
使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
使用Unity在材质球上实现绘画:详细解释每一行Shader代码!
119 0
|
算法 Java 程序员
Unity Shader 概述
Unity Shader 概述
177 0
Unity Shader 概述
|
图形学
Unity Shader Graph 制作 Fade 淡入淡出效果
Unity Shader Graph 制作 Fade 淡入淡出效果
540 1
Unity Shader Graph 制作 Fade 淡入淡出效果
|
图形学
Unity Shader Graph 制作车流效果(UV滚动)
Unity Shader Graph 制作车流效果(UV滚动)
709 0
Unity Shader Graph 制作车流效果(UV滚动)
|
机器人 图形学
Unity Shader Graph 制作Emission发光效果
Unity Shader Graph 制作Emission发光效果
536 0
Unity Shader Graph 制作Emission发光效果