Summary
- 스텐실 마스크 & 마스크로 가려야 드러나는 타겟 쉐이더
- Ref 1번 사용
Preview
Source Code
StencilTarget01.shader
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Shader "Custom/StencilTarget01"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
Stencil
{
Ref 1
Comp Equal // 스텐실 버퍼가 1인 곳에만 렌더링
}
CGPROGRAM
#pragma surface surf Lambert
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
fixed4 _Color;
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
StencilMask01.shader
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Shader "Custom/StencilMask01"
{
Properties {}
SubShader
{
Tags
{
"RenderType"="Opaque"
"Queue"="Geometry-1" // 반드시 대상보다 먼저 그려져야 하므로
}
Stencil
{
Ref 1
Comp Never // 항상 렌더링 하지 않음
Fail Replace // 렌더링 실패한 부분의 스텐실 버퍼에 1을 채움
}
CGPROGRAM
#pragma surface surf nolight noforwardadd nolightmap noambient novertexlights noshadow
struct Input { float4 color:COLOR; };
void surf (Input IN, inout SurfaceOutput o){}
float4 Lightingnolight(SurfaceOutput s, float3 lightDir, float atten)
{
return float4(0, 0, 0, 0);
}
ENDCG
}
FallBack ""
}