구문

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

TagName1 Value1을, TagName2 Value2를 지정합니다. 태그를 원하는 수만큼 지정할 수 있습니다.

세부 정보

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

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

렌더링 순서 - Queue 태그

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

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

  • Background- 이 렌더 대기열은 다른 대기열보다 먼저 렌더링됩니다. 보통 배경에 배치해야 할 항목에 사용합니다.
  • Geometry (디폴트) - 대부분 오브젝트에 사용합니다. 불투명 지오메트리가 이 대기열을 사용합니다.
  • AlphaTest - 알파 테스트된 지오메트리가 이 대기열을 사용합니다. 알파 테스트된 오브젝트는 모든 솔리드 오브젝트를 드로우한 후에 렌더링하는 것이 훨씬 효율적이므로 이 대기열은 Geometry 대기열과는 별도로 존재합니다.
  • Transparent - 이 렌더 대기열은 Geometry  AlphaTest 후에 뒤에서 앞의 순서로 렌더링됩니다. 알파 블렌드된 모든 항목(즉, 뎁스 버퍼에 기록하지 않는 셰이더)은 여기 속해야 합니다(유리, 파티클 효과 등).
  • 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”)은 “불투명”으로 간주되며 최상의 성능을 위해 오브젝트의 드로우 순서를 최적화합니다. 더 높은 인덱스의 렌더링 대기열은 “투명 오브젝트”로 간주되며 거리에 따라 오브젝트를 정렬합니다. 즉, 가장 먼 오브젝트부터 렌더링하여 가장 가까운 오브젝트를 맨 마지막에 렌더링합니다. 스카이박스는 모든 불투명 오브젝트와 투명 오브젝트 사이에 그려집니다.

 

 

 

ref : https://docs.unity3d.com/kr/530/Manual/SL-SubShaderTags.html

반응형

+ Recent posts