U3d Shader语法教程1:Properties、SubShader、Pass、Fallback

一、Shader结构语法

Shader "ShaderName" 
{
    Properties{   
            //属性
    }

      SubShader{
           Pass{
             //一次渲染流程
           }
          //Other Pass
    }

    //Other SubShader
     Fallback  "VertexLit"
}

["ShaderName"]: Shader的名字,一般用“/”控制在材质面板中出现的位置。例如 Custom/MyShader
[Properties]:: 外部数据绑定入口,通过材质"沟通"。
[SubShader]:每个Shader可以包含多个SubShader,至少一个。
[Pass]: 一次完整的渲染流程,允许多个,但是会影响效率。
[Fallback:]当所有SubShader都不支持的时候,会使用这里指定的Shader。






二、Properties语法

Properties{
  Name ("display name", PropertyType) = DefaultValue
  Name ("display name", PropertyType) = DefaultValue
  Name ("display name", PropertyType) = DefaultValue
 //... 其他属性
}

Name:变量名
diplay name:显示的名称,出现在材质面板,通常下划线"_"开头
DefaultValue:默认值
PropertyType:指定类型,如下表

属性类型 例子 类别
Int _level("Leve",Int) =2 数值
Float _alpha("Alpha",Float)= 0.8 数值
Range _range("Power",Range(0,0,5.0))=3.0 数值
Color _Color("Color",Color)=(1,1,1,1) 数值
Vector _Vector("VECTOR" ,Vector) = (1,4,7,8) 数值
2D _2D("Texture2D纹理",2D)=""{} 纹理
3D _3D("Texture3D纹理",3D)="black"{} 纹理
Cube _Cube("Cube",Cube)="White"{} 纹理






三、SubShader语法

SubShader{
       Tags{"TageName1"="Value1"    "TageName2"="Value2"}//[Tage] 标签(可选)

       Cull //[RenderSetup] 状态(可选)

       Pass{
            //一次完整的渲染流程
       }
     //Other Pass
}

[Tages]:是一个键值对,键和值都是字符串类型,如何、何时渲染这个对象。
[RenderSetup]: 设置显卡的渲染状态,例如混合、深度测试。
[Pass]:渲染流程,允许定义多个,每次渲染都会逐个流程执行。为了避免性能下降,尽量使用最少数目的Pass。

SubShader [Tage] 说明 例子
Queue 控制渲染顺序,保证所有透明物体在不透明物体后面渲染 Tags{"Queue" = "Transparent"}
RenderType 着色器分类 Tags{"RenderType"="Opaque"}
DisableBatching SubShader指明是否使用批处理 Tags{"DisableBatching "="True"}
ForceNoShadowCasting 是否投射阴影 Tags{"ForceNoShadowCasting"="True"}
IgnoreProjector 是否受到Projector影响,通常用于半透明物体 Tags{"IgnoreProjector "="True"}
CanUseSpriteAtlas 用于Sprite时,请设置为"False" Tags{"CanUseSpriteAtlas" = "False"}
PreviewType 指明材质如何预览,"Plane"或者"SkyBox" Tags{"PreviewType "="Plane"}


SubShader[RenderSetup] 设置指令 解释
Cull Cull Back| Front |Off 设置剔除模式:剔除背景|正面|关闭剔除
ZTest ZTest Less Greater|LEqual|GEqual|Equal|NotEqual|Always 设置深度测试时使用的函数
ZWrite ZWrite On|Off 开启/关闭深度写入
Blend Blend SrcFactor DstFactor 开启并设置混合模式






四、Pass语法

Pass{
  Name "MyPassName"//[Name] 可选
  LightMode//[Tags] 可选
  Cull//[RenderSetup] 可选
  //other code
}

[Name]: Pass的名称,被其他Shader调用时候会用到。
[Tags]:渲染物体的方式,下面有表格详细说明。
[RenderSetup]:渲染状态,和SubShader RenderSetup 完全一样。

Pass[Tags] 说明 例子
LightMode 定义该Pass在Unity的渲染流水线中的角色 Tags{"LightMode"="ForwardBase"}
RequireOptions 用于指定当满足条件才执行Pass Tags{”RequireOptions“=”SoftVegetation“}
  • UsePass: 复用其他Shader中的Pass。例如:UsePass "MyShader/MYPASSNAME"
  • GrabPass:抓取屏幕并将结果存储在一张纹理中。






五、Fallback

指定最后处理的Shader(以上的SubShader都不能运行的时候), Fallback还会印象阴影投射。
语法:
Fallback Off //没有阴影
Fallback "ShaderName"
Fallback "VertexLit"
Fallback "Diffuse"







最后推介辅助插件
打开 Visual Studio “工具”→“扩展和更新”→“联机 Visual Studio Marketplace”搜索
Shader Unity Support
Visual Studio 2017 Tools for Unity

鄙人才疏学浅,有出入的地方非常感谢能帮忙指正。:)

你可能感兴趣的:(U3d Shader语法教程1:Properties、SubShader、Pass、Fallback)