ShaderLab: GrabPass
ShaderLab: 폴백(Fallback)

ShaderLab: 서브셰이더 태그(SubShader Tags)

서브셰이더는 태그를 사용하여 렌더링 엔진을 렌더링할 방법과 시기를 지정합니다.

구문

Tags { "TagName1" = "Value1" "TagName2" = "Value2" }

TagName1Value1을, TagName2Value2를 지정합니다. 태그를 원하는 수만큼 지정할 수 있습니다.

세부 정보

태그는 기본적으로 키-값 페어입니다. 서브셰이더 내에서 태그는 서브셰이더의 다른 파라미터 및 렌더링 순서를 결정하기 위해 사용합니다. Unity 가 인식하는 다음 태그는 반드시 패스가 아닌 서브셰이더 섹션 내에 위치해야 합니다.

Unity 가 인식하는 빌트인 태그 외에도 Material.GetTag 함수를 사용하여 자신의 태그를 사용하고 쿼리할 수 있습니다.

렌더링 순서 - Queue 태그

Queue 태그를 사용하여 오브젝트를 드로우 처리할 순서를 결정할 수 있습니다. 셰이더는 자신의 오브젝트가 어떤 렌더 대기열에 속하는지를 결정하며 이 방식으로 모든 불투명 오브젝트가 그려진 후에 모든 투명 셰이더가 그려지도록 할 수 있습니다.

사전 정의된 렌더 대기열은 4 개가 있으며 사전 정의된 대기열 사이에 추가로 대기열을 넣을 수 있습니다. 사전 정의된 대기열은 다음과 같습니다.

  • Background- 이 렌더 대기열은 다른 대기열보다 먼저 렌더링됩니다. 보통 배경에 배치해야 할 항목에 사용합니다.
  • Geometry (디폴트) - 대부분 오브젝트에 사용합니다. 불투명 지오메트리가 이 대기열을 사용합니다.
  • AlphaTest - 알파 테스트된 지오메트리가 이 대기열을 사용합니다. 알파 테스트된 오브젝트는 모든 솔리드 오브젝트를 드로우한 후에 렌더링하는 것이 훨씬 효율적이므로 이 대기열은 Geometry 대기열과는 별도로 존재합니다.
  • Transparent - 이 렌더 대기열은 GeometryAlphaTest 후에 뒤에서 앞의 순서로 렌더링됩니다. 알파 블렌드된 모든 항목(즉, 뎁스 버퍼에 기록하지 않는 셰이더)은 여기 속해야 합니다(유리, 파티클 효과 등).
  • Overlay - 이 렌더 대기열은 오버레이 효과용입니다. 마지막에 렌더링되는 모든 항목이 속해야 합니다(예: 렌즈 플레어 등).
Shader "Transparent Queue Example"
{
     SubShader
     {
        Tags { "Queue" = "Transparent" }
        Pass
        {
            // rest of the shader body...
        }
    }
}

투명 대기열에서 렌더링하는 방법을 보여주는 예제

특수 용도를 위해 대기열 사이에 대기열을 둘 수 있습니다. 내부적으로 각 대기열은 정수 인덱스로 대표됩니다. 예를 들어, Background는 1000, Geometry는 2000, AlphaTest는 2450, Transparent는 3000, Overlay는 4000 입니다. 셰이더가 대기열을 다음과 같이 사용한다면

Tags { "Queue" = "Geometry+1" }

렌더 대기열 인덱스가 2001 이 되므로(Geometry+1), 이 오브젝트는 모든 불투명 오브젝트가 렌더링된 후에 렌더링되고 투명 오브젝트보다는 먼저 렌더링됩니다. 이 방법은 일부 오브젝트가 항상 다른 오브젝트 세트 사이에 그려지도록 하고 싶을 때 유용합니다. 예를 들어, 투명한 물은 불투명한 오브젝트보다는 나중에 그려야 하지만 투명한 오브젝트보다 먼저 그려야 합니다.

2500 이하의 대기열(“Geometry+500”)은 “불투명”으로 간주되며 최상의 성능을 위해 오브젝트의 드로우 순서를 최적화합니다. 더 높은 인덱스의 렌더링 대기열은 “투명 오브젝트”로 간주되며 거리에 따라 오브젝트를 정렬합니다. 즉, 가장 먼 오브젝트부터 렌더링하여 가장 가까운 오브젝트를 맨 마지막에 렌더링합니다. 스카이박스는 모든 불투명 오브젝트와 투명 오브젝트 사이에 그려집니다.

RenderType 태그

RenderType 태그는 셰이더를 몇 가지 사전 정의 그룹(예를 들어 불투명 셰이더 또는 알파 테스트된 셰이더 등)으로 카테고리화합니다. 이는 셰이더 대체가 사용하며 일부 경우에는 카메라의 뎁스 텍스처를 생성하기 위해 사용됩니다.

DisableBatching 태그

일부 셰이더(대부분 오브젝트 공간 버텍스를 변형하는 셰이더)는 드로우 콜 배칭이 사용될 때는 동작하지 않습니다. 배칭은 모든 지오메트리를 월드 공간으로 변환하기 때문에 “오브젝트 공간”이 손실되기 때문입니다.

DisableBatching 태그를 사용하여 이를 표현할 수 있습니다. 이 태그의 값은 다음 세 가지 중 하나입니다. “True”(이 셰이더에 항상 배칭을 사용하지 않음), “False”(배칭을 비활성화하지 않음. 이 값이 디폴트입니다), “LODFading”(LOD 페이딩이 활성화되어 있으면 배칭을 사용하지 않음. 대부분 트리에 사용합니다).

ForceNoShadowCasting 태그

만약 ForceNoShadowCasting태그가 있고 값이 “True”라면 서브셰이더를 사용하여 렌더링되는 오브젝트는 그림자를 투영하지 않습니다. 투명 오브젝트에 셰이더 대체를 사용하는 경우나 다른 서브셰이더에서 그림자 패스를 이어받지 않고자 할 경우에 가장 유용합니다.

IgnoreProjector 태그

만약 IgnoreProjector태그가 있고 값이 “True”라면 셰이더를 사용하는 오브젝트는 프로젝터의 영향을 받지 않습니다. 이는 반투명 오브젝트에 유용한데, 프로젝터가 이러한 오브젝트에 영향을 줄 수 있는 다른 방법이 없기 때문입니다.

CanUseSpriteAtlas 태그

만약 셰이더가 스프라이트용이고 이 스프라이트가 아틀라스로 패킹될 때(스프라이트 패커 참조) 셰이더가 동작하지 않을 것이라면 CanUseSpriteAtlas 태그를 “False”로 설정해야 합니다.

PreviewType 태그

PreviewType은 머티리얼 인스펙터 프리뷰가 머티리얼을 표시하는 방법을 나타냅니다. 머티리얼은 디폴트로 구체 형태로 표시되지만 PreviewType 을 “플레인”(2D 로 표시함) 또는 “스카이박스”(스카이박스로 표시함)로 설정할 수도 있습니다.

참고 항목

패스에도 태그를 부여할 수 있습니다. 패스 태그를 참조하십시오.

ShaderLab: GrabPass
ShaderLab: 폴백(Fallback)