구문
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
'게임엔진(GameEngine) > Unity3D' 카테고리의 다른 글
효과적인 C# 메모리 관리 기법 (0) | 2022.12.04 |
---|---|
모바일 게임 성능 최적화: Unity 엔지니어가 전하는 프로파일링, 메모리, 코드 아키텍처 관련 팁 (0) | 2022.12.04 |
C#은 stackless 코루틴 (0) | 2022.12.04 |
Unity vertex / fragment Shader01 -빨강 쉐이더 (0) | 2022.12.02 |
Keyword Boolean (0) | 2022.11.27 |