티스토리 뷰
Shader "Custom/CustomAlphaTestingCutOutShader" {
Properties{
//_Color 구문이 없다면 놀랍게도 그림자가 나오지 않는다고 한다.
//그러니까 지금 이 쉐이더에서 볼 수 없는 그림자를 그리는 Pass에서 이 인자 값을 사용하는 것으로 예상할 수 있다.
_Color("Color", Color) = (1,1,1,1)
_MainTex("Albedo (RGB)", 2D) = "white" {}
//이 인자 값을 사용하여 텍스쳐에서 0.5를 기준으로 더 밝은 알파는 그리지 않는다.
//즉, 알파 테스팅 쉐이더는 반투명 렌더링을 하지 않는다.
_Cutoff("Alpha cutoff",Range(0,1)) = 0.5
}
SubShader{
//RenderType은 TransparentCutout이다.
//Queue 태그가 AlphaTest이다.
//AlphaTest는 Queue 태그의 기본인 Geometry(2000)과 반투명 렌더링인 Transparent(3000)의 사이 순서이다.
//따라서 이 쉐이더는 불투명 쉐이더와 반투명 쉐이더 사이의 순서에서 렌더링 될 것이다.
Tags { "RenderType" = "TransparentCutout" "Queue" = "AlphaTest" }
//알파 테스팅 쉐이더이기 때문에 alphatest을 적어주는 거야?
//인자 값으로 _Cutoff를 받아온다.
CGPROGRAM
#pragma surface surf Lambert alphatest:_Cutoff
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 위치에서 Cutout 계열의 쉐이더를 사용해야한다.
FallBack "Legacy Shaders/Transparent/Cutout/Diffuse"
}
텍스쳐의 알파가 투명하게, 그리고 그림자도 완벽하게 그려지는 쉐이더이다.
하지만 반투명한 만큼 그림자도 투명했으면 좋겠는데 그건 또 다른 문제인 것이다.
'유니티 > Shader' 카테고리의 다른 글
유니티 URP Shader Training 01 (0) | 2021.06.23 |
---|---|
가려져도 보이는 쉐이더 (0) | 2021.02.01 |
알파블렌딩쉐이더작성 (0) | 2020.07.09 |
2Pass로만드는OutLineShader (0) | 2020.07.09 |
2Path를 이용한 Clean한 AlphaBlending (0) | 2020.07.09 |