본문 바로가기
셰이더 (Shader)/유니티 쉐이더 스타트업 - 정종필

[Unity/Shader] 파트16-5 : 알파 테스팅 (컷아웃)

by Minkyu Lee 2023. 8. 30.

알파 테스팅(컷아웃)은 나무나 풀 등을 그릴 때 사용한다.

 

_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 계열의 쉐이더 이름을 써준다. 그래야 그림자가 제대로 나온다.
}

 

추가정보

알파 블렌딩에서도 그림자가 나타나게 할 수 있다.

댓글