Skip to content

Latest commit

 

History

History
82 lines (72 loc) · 2.39 KB

Shader-UnityShader的SubShader块介绍.md

File metadata and controls

82 lines (72 loc) · 2.39 KB

Shader-UnityShader的SubShader块介绍

SubShader
{
    // 标签项 可选 key = value
    Tags 
    {
        "Queue" = "Transparent" // 渲染顺序
        "RenderType" = "Opaque" // 着色器替换功能
        "DisableBatching" = "True" // 是否进行合批
        "ForceNoShadowCasting" = "True" // 是否投射阴影
        "IgnoreProjector" = "True" // 受不受Projector的影响,通常用于透明物体
        "CanUseSpriteAltas" = "False" // 是否用于图片的Shader,通常用于UI
        "PreviewType" = "Plane" // 用于Shader面板预览的类型
    }

    // Render设置 可选
    //Cull off/back/front  // 选择渲染那个面
    //ZTest Always/Less Greater/LEqual/GEqual/Equal/NotEqual  // 深度测试
    //Zwrite off/on   // 深度写入
    //Blend SrcFactor DstFactor   // 混合
    //LOD 100  // 不同情况下使用不同的LOD,达到性能提升

    // 必须
    Pass
    {
        //Name "Default" // Pass通道名称
        // Tags还可以在每个Pass通道里面进行定义,属性重复以外层的为准
        Tags 
        {
            "LightMode" = "ForwardBase" // 定义该Pass通道在Unity渲染流水中的角色
            //"RequireOptions" = "SoftVegetation" // 满足某些条件时才渲染该Pass通道
        } 
        // Render设置 可以在每个Pass通道里面进行定义

        // 真正的CG语言所写的代码,主要是顶点/片元着色器
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        // make fog work
        #pragma multi_compile_fog

        #include "UnityCG.cginc"

        struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            UNITY_FOG_COORDS(1)
            float4 vertex : SV_POSITION;
        };

        sampler2D _MainTex;
        float4 _MainTex_ST;

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = TRANSFORM_TEX(v.uv, _MainTex);
            UNITY_TRANSFER_FOG(o,o.vertex);
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        {
            // sample the texture
            fixed4 col = tex2D(_MainTex, i.uv);
            // apply fog
            UNITY_APPLY_FOG(i.fogCoord, col);
            return col;
        }
        ENDCG
    }
}