UnityShader学习11 透明混合相关(被物体遮住显示不同颜色)

Shader "ShaderLearn/alpha_01" {
    Properties{
        _MainTex("MainTex", 2D) = ""{}
        _Color ("Color", color) = (1,1,1,1)
    }

    SubShader{

        pass{//遮挡部分
            blend srcalpha oneminussrcalpha///混合 1- 源

            ztest greater  //根据深度值(z)和帧缓存进行判断,满足条件才显示颜色

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            sampler2D _MainTex;
            fixed4 _Color;

            struct v2f{
                float4 pos : POSITION;
                float2 uv :TEXCOORD0;
                };



            v2f vert(appdata_full v){
                    v2f o;
                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.uv = v.texcoord.xy;

                    return o;
            }

            fixed4 frag(v2f IN) : COLOR{
            
            return fixed4(1,1,0,1);
            }
            ENDCG
        }

        pass//未遮挡部分
        {
            blend srcalpha oneminussrcalpha///混合 1- 源

            ztest less

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            sampler2D _MainTex;
            fixed4 _Color;

            struct v2f
            {            
                float4 pos : POSITION;
                float2 uv :TEXCOORD0;
            };



            v2f vert(appdata_full v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv = v.texcoord.xy;

                return o;
            }

            fixed4 frag(v2f IN) : COLOR{
                fixed4 color = tex2D(_MainTex, IN.uv);
                color = (color + _Color) / 2;
                return color;
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
}

 

posted on 2019-06-17 23:11  炼金师  阅读(690)  评论(0)    收藏  举报

导航