Unity ShaderLab: 서브셰이더 태그 활용
개요
ShaderLab에서 서브셰이더에 태그를 할당하는 방법과 그 활용에 대해 설명합니다. 서브셰이더의 태그는 Unity에서 다양한 렌더링 동작을 결정할 수 있는 키-값 쌍입니다. 이 문서에서는 서브셰이더 태그의 사용법과 예제 코드를 통해 활용 방법을 알아보겠습니다.
태그의 기본 개념
태그는 Unity에서 특정 서브셰이더의 사용 방식과 시점을 결정하는 데 도움을 줍니다. 서브셰이더는 Tags 블록 내에서 정의되며, 다양한 렌더링 파이프라인에 호환성 정보를 제공합니다.
지원되는 렌더 파이프라인
| 기능 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인 (URP) | 고해상도 렌더 파이프라인 (HDRP) | 커스텀 SRP |
|---|---|---|---|---|
| ShaderLab: 서브셰이더 태그 블록 | 지원 | 지원 | 지원 | 지원 |
| ShaderLab: RenderPipeline 태그 | 지원하지 않음 | 지원 | 지원 | 지원하지 않음 |
| ShaderLab: Queue 태그 | 지원하지 않음 | 지원 | 지원 | 지원 |
| ShaderLab: RenderType 태그 | 지원 | 지원 | 지원 | 지원 |
| ShaderLab: DisableBatching 태그 | 지원 | 지원 | 지원 | 지원 |
| ShaderLab: ForceNoShadowCasting 태그 | 지원 | 지원 | 지원 | 지원 |
서브셰이더 태그 사용법
서브셰이더 태그 정의
서브셰이더 태그는 다음과 같이 정의합니다:
Tags { "태그이름" = "값" }
서브셰이더 및 패스에 태그 할당
서브셰이더에 태그를 할당하려면 Tags 블록을 서브셰이더 내부에 위치시키고, 패스에는 패스 내부에 Tags 블록을 위치시킵니다.
C# 코드에서 서브셰이더 태그 사용 예제
C# 스크립트에서 태그를 읽는 방법은 다음과 같습니다:
using UnityEngine;
public class Example : MonoBehaviour
{
string tagName = "ExampleTagName";
void Start()
{
Renderer myRenderer = GetComponent<Renderer>();
string tagValue = myRenderer.material.GetTag(tagName, true, "Tag not found");
Debug.Log(tagValue);
}
}
구체적인 태그 활용 예제
RenderPipeline 태그
URP와 HDRP와의 호환성을 정의합니다.
Shader "ExampleShader" {
SubShader {
Tags { "RenderPipeline" = "UniversalRenderPipeline" }
Pass {
…
}
}
}
Queue 태그
렌더링 순서를 정의합니다.
Shader "ExampleShader" {
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
…
}
}
}
RenderType 태그
셰이더 오브젝트의 동작을 오버라이드합니다.
Shader "ExampleShader" {
SubShader {
Tags { "RenderType" = "TransparentCutout" }
Pass {
…
}
}
}
ForceNoShadowCasting 태그
그림자 드리우기를 방지합니다.
Shader "ExampleShader" {
SubShader {
Tags { "ForceNoShadowCasting" = "True" }
Pass {
…
}
}
}
DisableBatching 태그
동적 배칭을 방지합니다.
Shader "ExampleShader" {
SubShader {
Tags { "DisableBatching" = "True" }
Pass {
…
}
}
}
결론
이 문서에서는 Unity ShaderLab에서 서브셰이더 태그를 활용하는 방법에 대해 설명했습니다. 태그를 사용하여 렌더링 파이프라인의 호환성, 렌더링 순서, 그림자 관리 및 배칭 설정을 조정할 수 있습니다. 예제 코드를 통해 각 태그의 사용법을 이해하고, 더 나아가 자신만의 셰이더를 만들 수 있는 기반을 마련하시기 바랍니다.