알파 테스팅(컷아웃)은 나무나 풀 등을 그릴 때 사용한다.
_Cutoff 프로퍼티는 잘라내는 기준이 될 값이다.
단, 잘라내면 외곽이 거칠어지는 문제가 있다.
안티알리아싱으로 개선한다.
또는 해상도가 높은 텍스쳐를 사용해서 덜 거슬리게 한다.
코드
Shader "Custom/part16-5"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
// _Color가 없으면, 그림자가 나오지 않는다. 그림자를 그리는 Pass에서 그림자 색상을 위해 이 인자를 사용하기 때문이다.
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_CutOff ("Alpha cutoff", Range(0,1)) = 0.5 // *
}
SubShader
{
Tags { "RenderType"="TransparentCutout" "Queue" = "AlphaTest"}
// AlphaTest는 불투명과 반투명 사이를 의미한다. 따라서 불투명 - 알파 테스팅 - 알파 블렌딩 순서대로 그려진다.
LOD 200
CGPROGRAM
#pragma surface surf Lambert alphatest:_Cutoff
#pragma target 3.0
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
};
UNITY_INSTANCING_BUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Legacy Shaders/Transparent/Cutout/VertexLit"
// Cutout 계열의 쉐이더 이름을 써준다. 그래야 그림자가 제대로 나온다.
}
추가정보
알파 블렌딩에서도 그림자가 나타나게 할 수 있다.
'셰이더 (Shader) > 유니티 쉐이더 스타트업 - 정종필' 카테고리의 다른 글
[Unity/Shader] 파트17-2 : 블렌드 펙터 연산 (0) | 2023.08.30 |
---|---|
[Unity/Shader] 파트17-1 : 커스텀 제어 가능한 알파 블렌딩 (0) | 2023.08.30 |
[Unity/Shader] 파트16-4 : 알파 소팅 문제 (0) | 2023.08.28 |
[Unity/Shader] 파트16-3 : 알파 블렌딩 제작 (0) | 2023.08.25 |
[Unity/Shader] 파트16-2 : 반투명 (알파 블렌드 Alpha Blend) (0) | 2023.08.23 |
댓글