Unity ShaderLab: 패스에 태그 할당하기
이 문서는 Unity의 ShaderLab에서 패스에 태그를 할당하는 방법에 대해 설명합니다. ShaderLab을 사용하여 렌더링할 다양한 목표를 설정할 수 있는 방법을 배워봅시다.
태그 개요
태그는 패스에 대한 설정 정보를 담고 있는 키-값 쌍입니다. Unity는 이 태그를 사용하여 특정 패스를 어떻게 렌더링할지와 시점을 결정합니다. 커스텀 태그를 만들고 C# 코드에서 이를 사용하여 사용자 정의 렌더링 동작을 할 수 있습니다.
가장 많이 사용되는 기본 태그는 LightMode입니다. 이 태그는 조명과 관련된 다양한 설정을 정의하는 데 사용됩니다.
렌더 파이프라인 호환성
다양한 렌더 파이프라인에서 태그 지원 여부는 다음과 같습니다.
| 기능 이름 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인 (URP) | 고해상도 렌더 파이프라인 (HDRP) |
|---|---|---|---|
| 커스텀 SRP | 지원 | 지원 | 지원 |
| ShaderLab: Pass Tags 블록 | 지원 | 지원 | 지원 |
| ShaderLab: LightMode 패스 태그 | 지원 | 지원 | 지원 |
| Tags 블록 사용 | 지원 | 지원 | 지원 |
태그 할당하기
ShaderLab에서 패스 태그를 할당하려면 Pass 블록 안에 Tags 블록을 넣습니다.
서브셰이더와 패스 모두 Tags 블록을 사용할 수 있지만, 두 가지는 서로 다른 방식으로 작동합니다. 서브셰이더 태그를 패스에 할당하는 것은 영향을 미치지 않으며, 반대의 경우도 마찬가지입니다. 따라서 태그의 변경은 반드시 Pass 블록 내에서 이루어져야 합니다.
태그 정의 구문
Tags { "<name1>" = "<value1>" "<name2>" = "<value2>" }
원하는 수만큼 태그를 정의할 수 있습니다.
C# 스크립트와 패스 태그 사용하기
C# 스크립트 내에서 Shader.FindPassTagValue API를 사용하여 패스 태그 인스턴스를 찾을 수 있습니다. 이 API는 Unity의 기본 태그와 사용자 정의 태그 모두에 적용될 수 있습니다.
// 예시: C# 코드에서 패스 태그 값 접근
string lightModeValue = Shader.FindPassTagValue("LightMode");
LightMode 태그
LightMode 태그는 특정 프레임 중에 어떤 패스가 실행되는지를 결정하는 데 사용됩니다. 기본적으로 모든 렌더 파이프라인에서 사용되지만, 각 파이프라인에 따라 다르게 해석될 수 있습니다.
사용법
// LightMode 태그 사용 예
Tags { "LightMode" = "Always" }
이렇게 하면 Unity는 항상 이 패스를 실행하도록 지시합니다.
예제
다음은 LightMode 태그를 사용하는 기본적인 ShaderLab 코드 예제입니다.
Shader "Examples/ExampleLightMode"
{
SubShader
{
Pass
{
Tags { "LightMode" = "Always" }
// 나머지 패스 코드 정의가 여기에 포함됩니다.
}
}
}
이 예제에서는 특정 패스가 항상 렌더링되도록 설정합니다.
결론
이 문서는 ShaderLab에서 패스에 태그를 어떻게 할당하고 사용하는지에 대해 설명하였습니다. 여러 렌더 파이프라인에서의 태그의 차이를 이해하고 적용하여, 보다 유연하고 강력한 렌더링 설정을 할 수 있습니다. Unity를 사용하여 그래픽을 구현할 때 이러한 기술들을 잘 활용하시길 바랍니다.