Unity ShaderLab: 패스 이름 할당하기
이 문서는 Unity에서 ShaderLab을 사용하여 패스에 이름을 할당하는 방법에 대해 설명합니다. ShaderLab은 Unity의 셰이더 언어로, 그래픽스 프로그래밍을 위해 사용됩니다. 패스는 셰이더의 중요한 구성 요소로, 다양한 렌더링 작업에서 사용됩니다.
패스의 개요
각 패스는 이름을 가질 수 있으며, C# API를 통해 이름으로 참조 가능합니다. 패스의 이름은 Unity의 프레임 디버거 툴에서도 확인할 수 있습니다.
렌더 파이프라인 호환성
패스 이름 할당은 다양한 렌더 파이프라인에서 지원됩니다.
| 기능 이름 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인 (URP) | 고해상도 렌더 파이프라인 (HDRP) | 커스텀 SRP |
|---|---|---|---|---|
| ShaderLab: 이름 블록 | 지원 | 지원 | 지원 | 지원 |
ShaderLab에서 패스 이름 할당하기
패스에 이름을 할당하려면 Pass 블록 안에 Name 블록을 포함해야 합니다. 다음은 그 예시입니다.
패스 이름 할당 코드 예제
Shader "Examples/ContainsNamedPass"
{
SubShader
{
Pass
{
Name "ExampleNamedPass"
// 나머지 패스 정의 코드
}
}
}
위 코드는 ExampleNamedPass라는 이름의 패스를 포함하는 셰이더 오브젝트를 생성합니다.
C# 스크립트에서 패스 이름 사용하기
C# 스크립트에서 패스의 이름을 쿼리하려면 다음과 같은 코드를 사용할 수 있습니다.
using UnityEngine;
public class GetPassName : MonoBehaviour
{
// 이 스크립트는 MeshRenderer 컴포넌트를 가진 GameObject에 부착하세요.
void Start() {
// 머티리얼 가져오기
var material = GetComponent<MeshRenderer>().material;
// 머티리얼에 할당된 셰이더 오브젝트의 활성 SubShader에서 첫 번째 패스의 이름 가져오기
var passName = material.GetPassName(0);
// 이름을 콘솔에 출력
Debug.Log(passName);
}
}
설명
Material.GetPassName(0)메서드는 활성 SubShader의 첫 번째 패스 이름을 반환합니다.- 위 코드를 GameObject에 적용하면, 해당 패스의 이름이 콘솔에 출력됩니다.
주의사항
- 같은 서브셰이더 내에 동일한 이름의 패스가 여러 개 있을 경우, Unity는 코드에서 정의된 첫 번째 패스를 사용합니다.
Material.GetShaderPassEnabled및Material.SetShaderPassEnabled는 이름으로 패스를 참조하지 않으며, 대신LightMode태그의 값을 사용하여 패스를 참조합니다.
이 문서가 Unity 셰이더 프로그래밍에 도움이 되기를 바랍니다!