Unity ShaderLab: 패스 정의하기
이 문서는 Unity의 ShaderLab에서 패스를 정의하는 방법에 대한 안내입니다. ShaderLab은 Unity에서 셰이더를 작성할 때 사용하는 언어로, 패스(Pass)는 셰이더의 기본 구성 요소입니다. 아래에서는 패스의 개념과 정의 방법, 코드 예제를 설명합니다.
패스의 개요
패스는 GPU 상태 및 GPU에서 실행되는 셰이더 프로그램을 설정하기 위한 명령을 포함합니다. 단순한 셰이더는 한 개의 패스를 사용할 수 있지만, 복잡한 셰이더는 여러 패스를 포함할 수 있습니다. 각각의 패스는 셰이더의 서로 다른 동작을 정의하는 데 사용됩니다. 예를 들어, 렌더 상태의 변경이 필요한 부분이나 서로 다른 셰이더 프로그램을 사용할 수 있습니다.
참고: 스크립터블 렌더 파이프라인(SRP) 기반의 렌더 파이프라인에서는 RenderStateBlock을 사용하여 패스를 따로 정의하지 않고도 GPU에서 렌더 상태를 변경할 수 있습니다.
렌더 파이프라인 호환성
| 기능 이름 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인 (URP) | 고해상도 렌더 파이프라인 (HDRP) | 커스텀 SRP |
|---|---|---|---|---|
| ShaderLab: Pass 블록 지원 | 지원 | 지원 | 지원 | 지원 |
패스 블록 사용하기
ShaderLab에서 일반 패스를 정의하기 위해서는 SubShader 블록 안에 Pass 블록을 포함시켜야 합니다. Pass 블록 내에서는 다음 작업을 수행할 수 있습니다.
- 이름 할당:
Name블록을 사용하여 패스에 이름을 할당합니다. - 태그 할당:
Tags블록을 사용하여 패스에 데이터의 키-값 쌍을 할당합니다. - 작업 수행:
ShaderLab명령을 사용하여 필요한 작업을 수행합니다. - 셰이더 코드 추가:
Shader code block을 사용하여 패스에 셰이더 코드를 추가합니다. - 패키지 요구 사항 지정:
PackageRequirements블록을 사용하여 패키지 요구 사항을 지정할 수 있습니다.
특별한 패스 타입인 UsePass 또는 GrabPass를 정의하려면 해당 커맨드를 사용할 수 있으며, 자세한 내용은 관련 자료를 참조하면 됩니다.
패스 정의 서명
패스를 정의하는 기본 구문은 다음과 같습니다.
Pass {
<optional: name>
<optional: tags>
<optional: commands>
<optional: shader code>
}
예제 코드
아래의 예제 코드는 싱글 패스를 포함한 단일 서브셰이더를 정의하는 ShaderLab 구문을 나타냅니다.
Shader "Examples/SinglePass" { SubShader { Pass {
Name "ExamplePassName" Tags { "ExampleTagKey" = "ExampleTagValue" }
// ShaderLab commands go here.
// HLSL code goes here.
}
}
}
결론
ShaderLab에서 패스를 정의하는 방법에 대한 개요를 살펴보았습니다. 패스는 셰이더의 동작을 정의하고, 다양한 렌더링 조건을 설정하는 데 필수적입니다. 더 깊이 있는 내용은 Unity의 공식 문서를 참조하시기 바랍니다.
참고 자료
- Unity 사용자 매뉴얼
- ShaderLab 공식 문서
저작권 © 2022 Unity Technologies.