ShaderLab syntax: Blending

Blending은 투명한 물체를 만들기 위해 사용됩니다.

그래픽들이 표현될 때 모든 쉐이더가 실행되고 모든 텍스쳐가 적용되어진 후에 픽셀은 스크린에 쓰여집니다. 그들이 이미 있는 것과 어떻게 결합되는지는Blend 명령에 의해 조절됩니다.

Syntax

:Blend Off: 블렌딩 기능 취소 :Blend SrcFactor DstFactor: 블렌딩을 구성 & 활성화. 생성된 색상은 _SrcFactor_를 곱합니다. 스크린에 이미 있던 색상은 _DstFactor_ 에 의해 곱해지고 두 개는 함께 더해집니다.

Properties

모든 다음의 속성들은SrcFactor와DstFactor 둘 다를 위해서 유효합니다. _Source_ 는 계산되어지는 색상을 의미하고 _Destination_ 는 이미 스크린에 있는 색상을 의미합니다.

_One_ 1의 값 – 소스 또는 데스티네이션 색상이 온전히 오게 합니다.
_Zero_ 0의 값 – 소스 또는데스티네이션 값을 삭제하게 합니다.
_SrcColor_ 이 스테이지의 값은 소스 색상 값에 의해 곱해집니다.
_SrcAlpha_ 이 스테이지의 값은 소스 알파 값에 의해 곱해집니다.
_DstColor_ 이 스테이지의 값은 프레임 버퍼 소스 색상 값에 의해 곱해집니다.
_DstAlpha_ 이 스테이지의 값은 프레임 버퍼 소스 알파 값에 의해 곱해집니다.
_OneMinusSrcColor_ 이 스테이지의 값은 (1 – 소스 색상)에 의해 곱해집니다.
_OneMinusSrcAlpha_ 이 스테이지의 값은 (1 – 소스 알파)에 의해 곱해집니다.
_OneMinusDstColor_ 이 스테이지의 값은 (1 – 데스티네이션 색상)에 의해 곱해집니다.
_OneMinusDstAlpha_ 이 스테이지의 값은 (1 – 데스티네이션 알파)에 의해 곱해집니다.

Details

아래는 가장 흔한 블렌드 타입입니다:

Blend SrcAlpha OneMinusSrcAlpha     // Alpha blending
Blend One One                       // Additive
Blend One OneMinusDstColor          // Soft Additive
Blend DstColor Zero                 // Multiplicative
Blend DstColor SrcColor             // 2x Multiplicative

Example

이것은 스크린에 이미 무엇이 있던 하나의 텍스쳐를 추가하는 쉐이더의 작은 예입니다:

Shader "Simple Additive" {
    Properties {
        _MainTex ("Texture to blend", 2D) = "black" {}
    }
    SubShader {
        Tags { "Queue" = "Transparent" }
        Pass {
            Blend One One
            SetTexture [_MainTex] { combine texture }
        }
    }
}

조금 더 복잡한 것, Glass. 이것은 두 번의 패스를 하는 쉐이더 입니다:

  1. 첫 번째 패스는 조명과 알파 블렌드가 된 텍스쳐를 스크린에 표현합니다. 알파 채널은 투명도를 결정합니다.
  2. 두 번째 패스는 첨가하는 투명도를 사용해서 알파 블레드가 된 윈도우위에 반사cubemap을 표현합니다.
Shader "Glass" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGB) Transparency (A)", 2D) = "white" {}
        _Reflections ("Base (RGB) Gloss (A)", Cube) = "skybox" { TexGen CubeReflect }
    }
    SubShader {
        Tags { "Queue" = "Transparent" }
        Pass {
            Blend SrcAlpha OneMinusSrcAlpha
            Material {
                Diffuse [_Color]
            }
            Lighting On
            SetTexture [_MainTex] {
                combine texture * primary double, texture * primary
            }
        }
        Pass {
            Blend One One
            Material {
                Diffuse [_Color]
            }
            Lighting On
            SetTexture [_Reflections] {
                combine texture
                Matrix [_Reflection]
            }
        }
    }
} 

역링크