Unity HLSL 셰이더의 프리 프로세서 지시문 사용하기
개요
Unity의 HLSL(Higher Level Shading Language)을 사용하여 셰이더를 작성할 때, 다양한 그래픽스 API와 플랫폼을 타겟팅하기 위해 프리 프로세서 지시문을 사용하는 방법을 설명합니다. 이 가이드는 그래픽스 API를 포함하거나 제외할 수 있는 방법과 특정 그래픽스 티어에 대한 셰이더 배리언트를 생성하는 방법을 소개합니다.
특정 그래픽스 API 포함 또는 제외하기
기본적으로 Unity는 현재 빌드 타겟에 맞춰 모든 그래픽스 API를 위한 셰이더를 컴파일합니다. 하지만 특정 그래픽스 API에만 셰이더를 컴파일하는 것이 필요할 수 있습니다. 이를 위해 다음과 같은 지시문을 사용할 수 있습니다.
특정 API만을 위한 셰이더 컴파일
#pragma only_renderers
여러 개의 API를 공백으로 구분하여 지정할 수 있습니다.
# pragma only_renderers metal vulkan
특정 컴파일러에서 셰이더 코드 제외하기
#pragma exclude_renderers
마찬가지로 공백으로 여러 API를 명시할 수 있습니다.
# pragma exclude_renderers metal vulkan
그래픽스 티어를 위한 셰이더 배리언트 생성
Unity는 빌트인 렌더 파이프라인에서 그래픽스 티어에 상응하는 셰이더 배리언트를 자동으로 생성합니다. 필요시 강제로 생성하도록 지시할 수 있습니다.
셰이더 배리언트 강제 생성
#pragma hardware_tier_variants
예를 들어, Metal을 위한 티어 셰이더 배리언트를 강제 생성하려면 다음과 같이 작성합니다.
# pragma hardware_tier_variants metal
유효한 파라미터 값 리스트
아래는 지원되는 값의 목록입니다.
| 값 | 설명 |
|---|---|
| d3d11 | DirectX 11 기능 레벨 10 이상, DirectX 12 |
| gles | OpenGL ES 2.0, WebGL 1.0 |
| gles3 | OpenGL ES 3.x, WebGL 2.0 |
| ps4 | PlayStation 4 |
| xboxone | Xbox One 및 GameCore, DirectX 11 및 DirectX 12 |
| metal | iOS/Mac Metal |
| glcore | OpenGL 3.x, OpenGL 4.x |
| vulkan | Vulkan |
| switch | Nintendo Switch |
| ps5 | PlayStation 5 |
결론
HLSL의 프리 프로세서 지시문을 활용하여 특정 그래픽스 API를 타겟팅하거나, 필요에 따라 셰이더 배리언트를 자동으로 생성하는 방법에 대해 알아보았습니다. 이러한 기술을 활용하면 각 플랫폼에 최적화된 성능을 갖춘 그래픽스를 제공할 수 있습니다.