Unity는 표준 HLSL의 일부인 모든 #pragma 지시문을 지원합니다(지시문이 일반 include 파일에 있는 한). 이러한 지시문에 대한 자세한 내용은 HLSL 기술 자료 pragma 지시문을 참조하십시오.
표면 셰이더를 작성하는 경우, 이 지시문을 사용하여 컴파일러에 표면 함수로 사용할 함수를 알리고 해당 함수로 데이터를 전달하십시오.
| 상태 | 기능 |
|---|---|
#pragma surface <surface function> <lighting model> <optional parameters> |
특정 조명 모델과 함께 작동하도록 특정한 이름의 함수를 표면 셰이더로 컴파일합니다. 자세한 내용은 표면 셰이더를 참조하십시오. |
일반 그래픽스 셰이더를 작성하는 경우 다음 지시문을 사용하여 다양한 셰이더 단계에 사용할 함수를 컴파일러에 알립니다. #pragma vertex 및 #pragma fragment 지시문은 필수이지만 다른 단계는 선택 사항입니다.
| 상태 | 기능 |
|---|---|
#pragma vertex <name> |
특정한 이름의 함수를 버텍스 셰이더로 컴파일합니다. <name>을 함수 이름으로 바꿉니다. 이 지시문은 일반 그래픽스 셰이더에서 필요합니다. |
#pragma fragment <name> |
특정한 이름의 함수를 프래그먼트 셰이더로 컴파일합니다. <name>을 함수 이름으로 바꿉니다. 이 지시문은 일반 그래픽스 셰이더에서 필요합니다. |
#pragma geometry <name> |
특정한 이름의 함수를 지오메트리 셰이더로 컴파일합니다. <name>을 함수 이름으로 바꿉니다. 이 옵션은 #pragma require geometry를 자동으로 활성화합니다. 자세한 내용은 HLSL의 셰이더 모델 및 GPU 기능 타게팅을 참조하십시오.참고: Metal은 지오메트리 셰이더를 지원하지 않습니다. |
#pragma hull <name> |
특정한 이름의 함수를 DirectX 11 헐 셰이더로 컴파일합니다. <name>을 함수 이름으로 바꿉니다. 이 옵션은 #pragma require tessellation을 자동으로 추가합니다. 자세한 내용은 HLSL의 셰이더 모델 및 GPU 기능 타게팅을 참조하십시오. |
#pragma domain <name> |
특정한 이름의 함수를 DirectX 11 도메인 셰이더로 컴파일합니다. <name>을 함수 이름으로 바꿉니다. 이 옵션은 #pragma require tessellation를 자동으로 활성화합니다. 자세한 내용은 HLSL의 셰이더 모델 및 GPU 기능 타게팅을 참조하십시오. |
이러한 지시문을 사용하여 셰이더 배리언트 및 키워드를 처리하는 방식을 셰이더 컴파일러에 알립니다. 자세한 내용은 HLSL에서 셰이더 키워드 선언 및 사용을 참조하십시오.
| 지시문 | 설명 |
|---|---|
#pragma multi_compile <keywords> |
키워드 컬렉션을 선언합니다. 컴파일러는 빌드에 있는 모든 키워드를 포함합니다._local과 같은 접미사를 사용하여 추가 옵션을 설정할 수 있습니다.자세한 내용과 지원되는 접미사 목록은 HLSL에서 셰이더 키워드 선언 및 사용을 참조하십시오. |
#pragma shader_feature <keywords> |
키워드 컬렉션을 선언합니다. 컴파일러는 빌드에서 사용되지 않는 키워드를 제외합니다._local과 같은 접미사를 사용하여 추가 옵션을 설정할 수 있습니다.자세한 내용과 지원되는 접미사 목록은 HLSL에서 셰이더 키워드 선언 및 사용을 참조하십시오. |
#pragma hardware_tier_variants <values> |
빌트인 렌더 파이프라인 전용: 특정 그래픽스 API에 대해 컴파일할 때 그래픽스 티어에 대한 키워드를 추가합니다. 자세한 내용은 그래픽스 티어를 참조하십시오. |
#pragma skip_variants <list of keywords> |
지정된 키워드를 스트리핑합니다. |
이러한 지시문을 사용하여 셰이더가 특정한 GPU 기능을 필요로 한다는 사실을 컴파일러에 전달하십시오.
| 상태 | 기능 |
|---|---|
#pragma target <value> |
이 셰이더 프로그램이 호환되는 최소 셰이더 모델입니다. <value>를 유효한 값으로 바꿉니다. 유효한 값 목록은 셰이더 컴파일: HLSL의 셰이더 모델 및 GPU 기능 타게팅을 참조하십시오. |
#pragma require <value> |
이 셰이더와 호환되는 최소 GPU 기능입니다. <value>를 유효한 값으로, 또는 공백으로 구분된 여러 유효한 값으로 바꿉니다. 유효한 값 목록은 셰이더 컴파일: HLSL의 셰이더 모델 및 GPU 기능 타게팅을 참조하십시오. |
이러한 지시문을 사용하여 Unity에 특정한 그래픽스 API에 대해 코드를 포함하거나 제외할 것을 전달하십시오.
| 상태 | 기능 |
|---|---|
#pragma only_renderers <value> |
특정 그래픽스 API에 대해서만 이 셰이더 프로그램을 컴파일합니다. <values>를 공백으로 구분된 유효한 값 목록으로 바꿉니다. 자세한 내용과 유효한 값 목록은 HLSL의 그래픽스 API 및 플랫폼 타게팅을 참조하십시오. 예를 들어 #pragma only_renderers glcore는 데스크톱 OpenGL에 대해서만 컴파일합니다. ES 3 타겟처럼 기본 셰이더가 OpenGL 2.x를 지원하는 한편 셰이더 모델 5.0 기능을 요구하는 셰이더가 OpenGL 4.2+를 요구하는 모든 데스크톱 OpenGL 버전을 포함하도록 스케일을 확대합니다. |
#pragma exclude_renderers <value> |
특정 그래픽스 API에 대해 이 셰이더 프로그램을 컴파일하지 마십시오. <value>를 공백으로 구분된 유효한 값 목록으로 바꿉니다. 자세한 내용과 유효한 값 목록은 HLSL의 그래픽스 API 및 플랫폼 타게팅을 참조하십시오. |
| 상태 | 기능 |
|---|---|
#pragma instancing_options <options> |
특정한 옵션으로 이 셰이더에서 GPU 인스턴싱을 활성화합니다. 자세한 내용은 GPU 인스턴싱을 참조하십시오. |
#pragma once |
이 지시문을 파일에 넣으면 컴파일러가 셰이더 프로그램에 파일을 한 번만 포함합니다. 참고: Unity는 캐시 셰이더 프리 프로세서가 활성화된 경우에만 이 지시문을 지원합니다. |
#pragma enable_d3d11_debug_symbols |
지원되는 그래픽스 API에 대한 셰이더 디버그 심볼을 생성하고 모든 그래픽스 API에 대한 최적화를 비활성화합니다. 외부 툴에서 셰이더 코드를 디버깅하는 데 사용합니다. Unity는 Vulkan, DirectX 11 및 12와 지원되는 콘솔 플랫폼용 디버그 심볼을 생성합니다. 경고: 이를 사용하면 파일 크기가 증가하고 셰이더 성능이 저하됩니다. 셰이더 디버깅을 마치고 애플리케이션의 최종 빌드를 만들 준비가 되면 셰이더 소스 코드에서 이 줄을 제거하고 셰이더를 다시 컴파일합니다. |
#pragma skip_optimizations <value> |
특정 그래픽스 API에 대한 최적화를 해제합니다. <values>를 공백으로 구분된 유효한 값 목록으로 바꿉니다. 유효한 값 목록은 HLSL의 그래픽스 API 및 플랫폼 타게팅을 참조하십시오. |
#pragma hlslcc_bytecode_disassembly |
디스어셈블된 HLSLcc 바이트코드를 변환된 셰이더에 포함합니다. |
#pragma disable_fastmath |
NaN 처리를 포함하는 정확한 IEEE 754 규칙을 활성화합니다. 이는 현재 Metal 플랫폼에만 영향을 줍니다. |
#pragma editor_sync_compilation |
동기 컴파일을 강제로 수행합니다. 이는 Unity 에디터에 영향을 줍니다. 자세한 내용은 비동기 셰이더 컴파일을 참조하십시오. |
#pragma enable_cbuffer |
HLSLSupport의 CBUFFER_START(name) 및 CBUFFER_END 매크로를 사용할 때 cbuffer(name)을 방출합니다. 이는 현재 플랫폼이 상수 버퍼를 지원하지 않더라도 마찬가지입니다. |