Unity Shader 多个Pass间共享方法

Unity Shader 多个Pass间共享方法

CGINCLUDE
//your code
ENDCG

效果图

在这里插入图片描述

实例

Shader "Practice/ShaderSyntax/ShareFunctionBetweenPasses"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Split("Split",float)=0.5
    }
    CGINCLUDE
    #include "UnityCG.cginc"

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

    struct v2f
    {
        float2 uv : TEXCOORD0;
        float4 vertex : SV_POSITION;
    };

    sampler2D _MainTex;
    float4 _MainTex_ST;

    float _Split;

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

    fixed4 frag (v2f i) : SV_Target
    {
        if(i.uv.x < _Split){
            discard;
        }
        fixed4 col = tex2D(_MainTex, i.uv);
        return col;
    }

    fixed4 frag2 (v2f i) : SV_Target
    {
        if(i.uv.x > _Split){
            discard;
        }
        fixed4 col = tex2D(_MainTex, i.uv);
        col.rgb = (1 - col.rgb) * 0.8f;
        return col;
    }
    ENDCG

    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            ENDCG
        }

        Pass{
            Blend SrcAlpha Zero
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag2
            ENDCG
        }
    }
}


版权声明:本文为ak47007tiger原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。