Version: Unity 6.0 (6000.0)
언어 : 한국어
ShaderLab: 레거시 조명
ShaderLab: 레거시 텍스처 조합

ShaderLab: 레거시 알파 테스트

참고: 이 페이지의__ ShaderLab__셰이더 오브젝트의 구조를 정의하기 위한 Unity 언어입니다. 자세한 정보
See in Glossary
기능은 레거시이며 이전 버전과의 호환성을 위해서만 문서화되었습니다. 셰이더 소스 파일에 HLSL 코드가 포함된 경우 Unity는 이러한 커맨드를 완전히 무시합니다. 셰이더 소스 파일에 HLSL 코드가 포함되어 있지 않으면 Unity는 임포트 시 이러한 커맨드를 일반 셰이더 프로그램에 컴파일합니다.

렌더 파이프라인 호환성

기능 이름 빌트인 렌더 파이프라인 URP(유니버설 렌더 파이프라인) HDRP(고해상도 렌더 파이프라인) 커스텀 SRP
레거시 알파 테스트 지원 지원 안 함 지원 안 함 지원 안 함

개요

최종 출력 컬러 계산 후 선택적으로 컬러의 알파 값을 고정 값과 비교할 수 있습니다. 테스트가 실패할 경우 디스플레이에 픽셀이 기록되지 않습니다.

구문

AlphaTest Off

모든 픽셀(디폴트) 렌더링 또는

AlphaTest comparison AlphaValue

알파 값이 특정 범위 이내인 픽셀만 렌더링하도록 알파 테스트를 설정합니다.

비교 비교에는 다음 용어 중 하나를 사용합니다.

| | | |:—|:—| |Greater |알파가 AlphaValue_보다 큰 픽셀만 렌더링합니다. | |GEqual |알파가 AlphaValue_보다 크거나 같은 픽셀만 렌더링합니다. | |Less |알파 값이 AlphaValue_보다 작은 픽셀만 렌더링합니다. | |LEqual |알파 값이 AlphaValue_보다 작거나 같은 픽셀만 렌더링합니다. | |Equal |알파 값이 AlphaValue_와 같은 픽셀만 렌더링합니다. | |NotEqual |알파 값이 AlphaValue_와 다른 픽셀만 렌더링합니다. | |Always |모든 픽셀을 렌더링합니다. 기능 측면에서 _AlphaTest Off_와 동일합니다. | |Never |픽셀을 렌더링하지 않습니다. |

AlphaValue 0과 1 사이의 부동 소수점 숫자입니다. 플로트 또는 범위 프로퍼티에 대한 변수 레퍼런스일 수도 있으며, 이 경우 표준 대괄호 표기법([VariableName])을 사용하여 작성해야 합니다.

세부 정보

알파 테스트는 투명한 부분이 있는 오브젝트를 렌더링할 때 중요합니다. 그래픽 카드는 화면에 작성된 모든 픽셀의 뎁스 기록을 유지합니다. 이미 렌더링된 픽셀보다 더 멀리 있는 새 픽셀은 디스플레이에 작성되지 않습니다. 즉, 블렌딩을 사용하더라도 오브젝트가 표시되지 않습니다.

이 그림에서 왼쪽의 나무는 AlphaTest를 사용하여 렌더링됩니다. 픽셀이 완전히 투명하거나 불투명한지 확인하십시오. 중앙의 나무는 알파 블렌딩만 사용하여 렌더링됩니다. 뎁스 버퍼로 인해 근처 가지의 투명 부분이 멀리 있는 잎을 가리고 있는 것을 볼 수 있습니다. 오른쪽의 나무는 마지막 샘플 셰이더를 사용하여 렌더링한 것으로, 블렌딩과 알파 테스트를 조합하여 결함을 숨깁니다.

예제

가장 간단한 예시는 알파 채널이 있는 텍스처를 할당하는 것입니다. 오브젝트는 알파가 0.5보다 큰 경우에만 표시됩니다.

Shader "Simple Alpha Test" {
    Properties {
        _MainTex ("Base (RGB) Transparency (A)", 2D) = "" {}
    }
    SubShader {
        Pass {
            // Only render pixels with an alpha larger than 50%
            AlphaTest Greater 0.5
            SetTexture [_MainTex] { combine texture }
        }
    }
}

이 자체로는 별로 좋은 설정이 아닙니다. 광원을 조금 추가하고 컷오프 값을 미세 조정할 수 있게 하겠습니다.

Shader "Cutoff Alpha" {
    Properties {
        _MainTex ("Base (RGB) Transparency (A)", 2D) = "" {}
        _Cutoff ("Alpha cutoff", Range (0,1)) = 0.5
    }
    SubShader {
        Pass {
            // Use the Cutoff parameter defined above to determine
            // what to render.
            AlphaTest Greater [_Cutoff]
            Material {
                Diffuse (1,1,1,1)
                Ambient (1,1,1,1)
            }
            Lighting On
            SetTexture [_MainTex] { combine texture * primary }
        }
    }
}

많은 게임에는 식물과 나무를 렌더링할 때 알파 테스트에서 흔히 볼 수 있는 하드 에지가 있습니다. 이를 방지하는 방법은 오브젝트를 두 번 렌더링하는 것입니다. 첫 번째 패스에서는 알파 테스트를 사용하여 불투명도가 50%를 넘는 픽셀만 렌더링합니다. 두 번째 패스에서는 픽셀의 뎁스를 기록하지 않고 잘린 부분의 그래픽을 알파 블렌딩합니다. 멀리 있는 가지가 가까이 있는 가지를 덮어쓰기 때문에 약간 혼란스러울 수 있지만, 실제로는 잎에 시각적 디테일이 많으므로 확인하기 어렵습니다.

Shader "Vegetation" {
    Properties {
        _Color ("Main Color", Color) = (.5, .5, .5, .5)
        _MainTex ("Base (RGB) Alpha (A)", 2D) = "white" {}
        _Cutoff ("Base Alpha cutoff", Range (0,.9)) = .5
    }
    SubShader {
        // Set up basic lighting
        Material {
            Diffuse [_Color]
            Ambient [_Color]
        }
        Lighting On

        // Render both front and back facing polygons.
        Cull Off

        // first pass:
        // render any pixels that are more than [_Cutoff] opaque
        Pass {
            AlphaTest Greater [_Cutoff]
            SetTexture [_MainTex] {
                combine texture * primary, texture
            }
        }

        // Second pass:
        // render in the semitransparent details.
        Pass {
            // Dont write to the depth buffer
            ZWrite off
            // Don't write pixels we have already written.
            ZTest Less
            // Only render pixels less or equal to the value
            AlphaTest LEqual [_Cutoff]

            // Set up alpha blending
            Blend SrcAlpha OneMinusSrcAlpha

            SetTexture [_MainTex] {
                combine texture * primary, texture
            }
        }
    }
}

개별 패스가 아닌 서브셰이더 내부에 몇 가지 설정이 있습니다. 서브셰이더에 설정된 모든 상태는 서브셰이더 내 패스의 기본값으로 상속됩니다.

ShaderLab: 레거시 조명
ShaderLab: 레거시 텍스처 조합