Unity Shader 学习笔记(006)SubShader之Pass

| 发布     | 分类 Shader  | 标签 Shader 



Unity Shader学习笔记(3)Unity Shader模板、结构、形式

ShaderLab: SubShader

ShaderLab: Pass

ShaderLab: UsePass

ShaderLab: GrabPass


SubShader 有3种方式使用Pass

  • Pass : 创建一个新的“渲染通道”

  • UsePass : 引用已经存在的“渲染通道”, 直接使用别的Shader的Pass块。在使用时必须使用大写形式如:UsePass “MyShader/MYPASSNAME”

  • GrabPass : 抓取屏幕,并将结果存储到一张纹理中,用于后序的Pass处理。


Float 类型换成Range(min, max)就可以在材质球上显示滑块

SubShader 
{
        // UsePass : 引用已经存在的“渲染通道”, 直接使用别的Shader的Pass块。在使用时必须使用大写形式如:UsePass "MyShader/MYPASSNAME"
        UsePass "Reflective/Bumped Unlit/BASE"

        Pass 
        {
            Name "MyPassName"
            Blend One One
            SetTexture [_MainTex] { combine texture }
        }
}


Shader "GrabPassInvert"
{
    SubShader
    {
        // Draw ourselves after all opaque geometry
        // 画出所有不透明的几何图形
        Tags { "Queue" = "Transparent" }

        // Grab the screen behind the object into _BackgroundTexture
        // 抓住物体后面的屏幕 _BackgroundTexture
        GrabPass
        {
            "_BackgroundTexture"
        }

        // Render the object with the texture generated above, and invert the colors
        // 使用上面生成的纹理渲染对象,并反转颜色
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct v2f
            {
                float4 grabPos : TEXCOORD0;
                float4 pos : SV_POSITION;
            };

            v2f vert(appdata_base v) {
                v2f o;
                // use UnityObjectToClipPos from UnityCG.cginc to calculate 
                // the clip-space of the vertex
                o.pos = UnityObjectToClipPos(v.vertex);
                // use ComputeGrabScreenPos function from UnityCG.cginc
                // to get the correct texture coordinate
                o.grabPos = ComputeGrabScreenPos(o.pos);
                return o;
            }

            sampler2D _BackgroundTexture;

            half4 frag(v2f i) : SV_Target
            {
                half4 bgcolor = tex2Dproj(_BackgroundTexture, i.grabPos);
                return 1 - bgcolor;
            }
            ENDCG
        }

    }
}

上一篇: Unity Shader 学习笔记(005)Properties 属性
下一篇: Unity Shader 学习笔记(007)SubShader 之 Tags