Shader "Custom/HideStencil" { Properties{ _MainTex ("Texture",2D) = "white" {} } SubShader{ Tags { "RenderType"="Opaque" "Queue"="Transparent+1"} Pass{ Stencil{ Ref 1 Comp Equal } Cull Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata{ fixed4 vertex: POSITION; fixed2 uv: TEXCOORD; }; struct v2f{ fixed4 vertex: SV_POSITION; fixed2 uv: TEXCOORD; }; v2f vert(appdata v){ v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag(v2f i ) : SV_Target{ fixed4 color = tex2D(_MainTex,i.uv); return color; } ENDCG }//pass }//SubShader FallBack "Diffuse" }
Shader "Custom/SetStencil" { SubShader { Tags { "RenderType"="Transparent"} Stencil { Ref 1 Comp always Pass replace } Cull Back CGPROGRAM #pragma surface surf Lambert alpha struct Input { fixed3 Albedo; }; void surf (Input IN, inout SurfaceOutput o) { o.Albedo = fixed3(1, 1, 1); o.Alpha = 0; } ENDCG } FallBack "Diffuse" }
SetStencilをマスクに、HideStencilをターゲットのオブジェクトにセットする。
RenderQueueをマスクを3000に、ターゲットを3001にセットする
(先にステンシルバッファへの書き込みが必要なため)