Unity HLSL 지시문 가이드
이 문서는 Unity에서 HLSL(고급 셰이더 언어) 사용 시의 #pragma 지시문에 대한 설명과 예제를 제공합니다. 이 가이드는 개발자가 셰이더를 작성할 때 필요한 기본 정보를 제공합니다.
HLSL의 #pragma 지시문
소개
#pragma 지시문은 HLSL 코드의 특정 부분에 추가 정보를 제공하여 셰이더 컴파일러가 코드를 올바르게 처리하도록 돕습니다. 보통 파일의 시작 부분에 위치합니다.
기본 예시
#pragma target 3.0
#pragma exclude_renderers vulkan
#pragma vertex vert
#pragma fragment frag
// HLSL 코드의 나머지 부분
제한 사항
- 조건부 지시문 내에서만 사용 가능
- 특정 플랫폼 키워드에 의존할 수 있음
- Unity 전용
#pragma지시문은.shader파일 내에서만 사용할 수 있습니다.
지원되는 #pragma 지시문
표면 셰이더
셀 하이에르키 기능을 사용하여 셰이더 컴파일러에 특정한 표면 함수를 지정할 수 있습니다.
#pragma surface <surface function> <lighting model> <optional parameters>
일반 그래픽스 셰이더
버텍스 및 프래그먼트 셰이더를 지정하는 데 필요한 #pragma 지시문입니다.
#pragma vertex <name>
#pragma fragment <name>
셰이더 키워드
셰이더 배리언트 및 키워드를 관리하기 위한 지시문입니다.
#pragma multi_compile <keywords>
#pragma shader_feature <keywords>
GPU 요구 사항
이 지시문들을 통해 특정 GPU 기능 필요성을 나타낼 수 있습니다.
#pragma target <value>
#pragma require <value>
그래픽스 API
특정 그래픽스 API를 포함하거나 제외하도록 지시하는 지시문입니다.
#pragma only_renderers <value>
#pragma exclude_renderers <value>
기타 #pragma 지시문
- 인스턴싱 옵션 활성화:
#pragma instancing_options <options> - 셰이더 디버그 기호 생성:
#pragma enable_d3d11_debug_symbols
활용 및 응용 예제
기본 셰이더 설정 예제
다음은 기본적인 셰이더 설정 예제입니다.
Shader "Custom/BasicShader" {
SubShader {
Pass {
#pragma vertex vert
#pragma fragment frag
}
}
}
다중 컴파일 지시문 활용 예
여러 단계를 기반으로 다양한 상태를 정의하는 예제입니다.
#pragma multi_compile _ VERTEXLIGHT_ON
#pragma multi_compile _ LIGHTMAP_ON
이렇게 작성한 셰이더는 각 키워드에 따라 다르게 동작하게 됩니다.
결론
Unity에서 HLSL과 #pragma 지시문을 이해하고 활용하는 것은 효과적인 게임 개발에 매우 중요합니다. 이 가이드를 통해 기본적인 사용법과 응용 가능성을 익히고, 자신만의 셰이더를 작성해보세요.