baobao
5/28/2017 - 4:05 AM

半透明シェーダにおけるステンシルテスト

半透明シェーダにおけるステンシルテスト

// 半透明シェーダ
// マスクする側
Shader "TransparentStencilMask"
{
    Properties
    {
        _MainTex("-", 2D) = "white"{}
    }

    SubShader
    {
        Tags {"Queue"="Transparent"}
        Pass
        {
            Stencil {
                Ref 2
                Comp always
                Pass replace
            }
            Blend SrcAlpha OneMinusSrcAlpha
            CGPROGRAM
            sampler2D _MainTex;
            #pragma vertex vert_img
            #pragma fragment frag
            #include "UnityCG.cginc"
            
            fixed4 frag (v2f_img i) : SV_Target
            {
                fixed4 c = tex2D(_MainTex, i.uv);
                return c;
            }
            ENDCG
        }
    }
}
// 半透明シェーダ
// マスクされる側
Shader "TransparentStencilMasked"
{
    Properties
    {
        _MainTex("-",2D)="white"{}
    }

    SubShader
    {
        Tags {"Queue"="Transparent+1"}

        Pass
        {
            Stencil {
                Ref 2
                Comp equal
            }
            ZTest Always
            Blend SrcAlpha OneMinusSrcAlpha
            CGPROGRAM
            sampler2D _MainTex;
            #pragma vertex vert_img
            #pragma fragment frag

            #include "UnityCG.cginc"
            
            fixed4 frag (v2f_img i) : SV_Target
            {
                return tex2D(_MainTex, i.uv);
            }
            ENDCG
        }

    }
}