Unity HLSL 셰이더 가이드
개요
HLSL(High-Level Shading Language)은 Unity에서 셰이더를 작성하는 데 사용되는 언어입니다. 이 문서에서는 HLSL의 프리 프로세서 지시문과 GPU 기능 타게팅을 설명합니다.
HLSL의 pragma 지시문
1. 셰이더 요구 사항 지정
셰이더의 요구 사항을 명시할 수 있는 두 가지 주요 지시문은 #pragma require와 #pragma target입니다.
#pragma require를 사용하여 특정 GPU 기능을 요구할 수 있습니다.#pragma target을 사용하여 셰이더 모델을 설정합니다.
이 두 지시문을 활용하여 셰이더의 호환성을 보장하는 것이 중요합니다.
2. 기본 동작
Unity는 기본적으로 #pragma require derivatives로 셰이더를 컴파일합니다. 이는 #pragma target 2.5와 동일합니다.
3. 자동 요구 사항 추가
특정 셰이더 단계(예: 지오메트리, 테셀레이션)를 정의하면 Unity가 자동으로 요구 사항 리스트에 해당 기능을 추가합니다.
4. GPU 기능 지정하기
GPU 기능 및 셰이더 모델을 지정할 때는 다음과 같은 예시를 사용할 수 있습니다.
#pragma require integers mrt8
#pragma require integers mrt8 : EXAMPLE_KEYWORD
셰이더 모델을 지정할 때는 다음과 같이 작성할 수 있습니다.
#pragma target 4.0
#pragma target 4.0 EXAMPLE_KEYWORD OTHER_EXAMPLE_KEYWORD
Unity의 셰이더 모델과 요구 사항
| 셰이더 모델 | 설명 | 지원 | 동등한 #pragma require 값 |
|---|---|---|---|
| 2.0 | DirectX 셰이더 모델 2.0과 동등. 제한된 연산 및 텍스처 명령어 수 | 모든 플랫폼 | 해당 없음 |
| 3.0 | DirectX 셰이더 모델 3.0과 동등 | DirectX 11 기능 레벨 10+ | derivatives |
| 4.0 | DirectX 셰이더 모델 4.0과 동등 | DirectX 11 기능 레벨 10+ | geometry |
| 5.0 | DirectX 셰이더 모델 5.0과 동등 | DirectX 11 기능 레벨 11+ | tessellation |
요구 사항 리스트
| 값 | 설명 |
|---|---|
| interpolators10 | 10가지 이상의 인터폴레이터 지원 |
| mrt8 | 최소 8개의 렌더 타겟 지원 |
| derivatives | 픽셀 셰이더 도함수 명령어 지원 |
| geometry | 지오메트리 셰이더 단계 지원 |
예제 코드
아래는 HLSL 프리 프로세서 지시문을 사용하는 샘플 코드입니다.
#pragma require integers mrt8
#pragma target 4.0
이 코드는 8개의 렌더 타겟과 DirectX 셰이더 모델 4.0을 필요로 하는 셰이더를 정의합니다.
요약
HLSL 셰이더를 작성할 때는 각 GPU의 기능에 맞춰 #pragma require 및 #pragma target 지시문을 적절히 사용해야 합니다. 이를 통해 다양한 플랫폼에서의 호환성을 높이고, 컴파일 시 발생할 수 있는 오류를 예방할 수 있습니다.