Version: 2022.1
언어: 한국어
ShaderLab 커맨드: AlphaToMask
ShaderLab 커맨드: BlendOp

ShaderLab 커맨드: Blend

GPU가 프래그먼트 셰이더의 출력을 렌더 타겟과 조합하는 방식을 결정합니다.

이 커맨드의 기능은 블렌딩 작업에 따라 달라집니다. 블렌딩 작업은 BlendOp 커맨드를 사용하여 설정할 수 있습니다. 블렌딩 자체는 모든 그래픽스 API와 하드웨어에서 지원되지만, 일부 블렌딩 작업은 보다 제한적으로 지원됩니다.

블렌딩을 활성화하면 GPU의 일부 최적화(주로 숨겨진 표면 제거/Early-Z)가 비활성화되어 GPU 프레임 시간이 늘어날 수 있습니다.

렌더 파이프라인 호환성

기능 이름 빌트인 렌더 파이프라인 유니버설 렌더 파이프라인(URP) 고해상도 렌더 파이프라인(HDRP) 커스텀 SRP
Blend 지원 지원 지원 지원

사용법

이 커맨드는 렌더 상태를 변경합니다. Pass 블록에서 사용하여 해당 패스의 렌더 상태를 설정하거나, SubShader 블록에서 사용하여 해당 서브셰이더에 있는 모든 패스의 렌더 상태를 설정할 수 있습니다.

블렌딩이 활성화되면 다음과 같은 일이 발생합니다.

  • BlendOp 커맨드가 사용되면 블렌딩 작업이 해당 값으로 설정됩니다. 이외에는 블렌딩 작업이 기본적으로 Add로 설정됩니다.
  • 블렌딩 작업이 Add, Sub, RevSub, Min 또는 Max이면 GPU가 프래그먼트 셰이더의 출력값과 소스 인자를 곱합니다.
  • 블렌딩 작업이 Add, Sub, RevSub, Min 또는 Max이면 GPU가 이미 렌더 타겟에 있는 값과 대상 인자를 곱합니다.
  • GPU는 결과값에 대해 블렌딩 작업을 수행합니다.

블렌딩 등식은 다음과 같습니다.

finalValue = sourceFactor * sourceValue operation destinationFactor * destinationValue

이 등식에서:

  • finalValue는 GPU가 대상 버퍼에 작성하는 값입니다.
  • sourceFactor는 Blend 커맨드에 정의되어 있습니다.
  • sourceValue는 프래그먼트 셰이더에 의한 값 출력입니다.
  • operation은 블렌딩 작업입니다.
  • destinationFactor는 Blend 커맨드에 정의되어 있습니다.
  • destinationValue는 이미 대상 버퍼에 있는 값입니다.
서명 예제 구문 기능
Blend <state> Blend Off 기본 렌더 타겟의 블렌딩을 비활성화합니다(기본값).
Blend <render target> <state> Blend 1 Off 특정 렌더 타겟에 한하여 위와 동일합니다. (1)
Blend <source factor> <destination factor> Blend One Zero 기본 렌더 타겟의 블렌딩을 활성화합니다. RGBA 값의 블렌드 인자를 설정합니다.
Blend <render target> <source factor> <destination factor> Blend 1 One Zero 특정 렌더 타겟에 한하여 위와 동일합니다. (1)
Blend <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> Blend One Zero, Zero One 기본 렌더 타겟의 블렌딩을 활성화합니다. RGB 값과 알파값의 블렌드 인자를 별도로 설정합니다. (2)
Blend <render target> <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> Blend 1 One Zero, Zero One 특정 렌더 타겟에 한하여 위와 동일합니다. (1) (2)

참고:

  1. 렌더 타겟을 지정하는 모든 서명은 OpenGL 4.0+, GL_ARB_draw_buffers_blend 또는 OpenGL ES 3.2가 필수입니다.
  2. 별도의 RGB 및 alpha 블렌딩은 고급 OpenGL 블렌딩 작업과 호환되지 않습니다.

유효한 파라미터 값

파라미터 기능
render target 07 범위의 정수 렌더 타겟 인덱스입니다.
state Off 블렌딩을 비활성화합니다.
factor One 이 입력의 값은 1입니다. 소스 또는 대상 컬러의 값을 사용하려면 이 값을 사용합니다.
Zero 이 입력의 값은 0입니다. 소스 또는 대상 값을 제거하려면 이 값을 사용합니다.
SrcColor GPU는 이 입력의 값과 소스 컬러값을 곱합니다.
SrcAlpha GPU는 이 입력의 값과 소스 알파값을 곱합니다.
SrcAlphaSaturate GPU는 이 입력값에 source alpha(1 - destination alpha)의 최소값을 곱합니다.
DstColor GPU는 이 입력의 값과 프레임 버퍼 소스 컬러값을 곱합니다.
DstAlpha GPU는 이 입력의 값과 프레임 버퍼 소스 알파값을 곱합니다.
OneMinusSrcColor GPU는 이 입력의 값과 (1 - 소스 컬러)를 곱합니다.
OneMinusSrcAlpha GPU는 이 입력의 값과 (1 - 소스 알파)를 곱합니다.
OneMinusDstColor GPU는 이 입력의 값과 (1 - 대상 컬러)를 곱합니다.
OneMinusDstAlpha GPU는 이 입력의 값과 (1 - 대상 알파)를 곱합니다.

일반적인 블렌드 타입

다음은 대다수의 일반적인 블렌드 타입을 위한 구문입니다.

Blend SrcAlpha OneMinusSrcAlpha // Traditional transparency
Blend One OneMinusSrcAlpha // Premultiplied transparency
Blend One One // Additive
Blend OneMinusDstColor One // Soft additive
Blend DstColor Zero // Multiplicative
Blend DstColor SrcColor // 2x multiplicative

예제

Shader "Examples/CommandExample"
{
    SubShader
    {
         // The rest of the code that defines the SubShader goes here.

        Pass
        {    
              // Enable regular alpha blending for this Pass
      Blend SrcAlpha OneMinusSrcAlpha
            
              // The rest of the code that defines the Pass goes here.
        }
    }
}

이 예제 코드는 SubShader 블록에서 이 커맨드를 사용하기 위한 구문을 나타냅니다.

Shader "Examples/CommandExample"
{
    SubShader
    {
         // Enable regular alpha blending for this SubShader
         Blend SrcAlpha OneMinusSrcAlpha

         // The rest of the code that defines the SubShader goes here.        

        Pass
        {    
              // The rest of the code that defines the Pass goes here.
        }
    }
}
ShaderLab 커맨드: AlphaToMask
ShaderLab 커맨드: BlendOp