Version: Unity 6.0 (6000.0)
언어 : 한국어
셰이더에서 16비트 정밀도 사용
Unity의 GLSL

HLSL에서 셰이더 컴파일러에 정보 전달

HLSL에서 다음 유형의 프리 프로세서 지시문을 사용하여 셰이더 컴파일러에 정보를 제공할 수 있습니다.

  • #pragma
  • #define_for_platform_compiler

pragma 지시문

#pragma 지시문은 다른 유형의 프리 프로세서 지시문에서 다루지 않는 추가 정보를 셰이더 컴파일러에 제공합니다.

#pragma 지시문은 HLSL 코드의 원하는 부분에 삽입할 수 있으나, 일반적으로는 다음과 같이 시작 부분에 삽입합니다.

#pragma target 3.0
#pragma exclude_renderers vulkan
#pragma vertex vert
#pragma fragment frag

// The rest of your HLSL code goes here

제한

#pragma 지시문을 사용하는 데는 다음과 같은 몇 가지 제약이 있습니다.

  • 표현식이 다음에만 의존하는 경우, 조건부(#if) 지시문 내에서 #pragma 지시문을 사용할 수 있습니다.
    • 직접 작성한 코드의 커스텀 #define 지시문
    • 다음 플랫폼 키워드: SHADER_API_MOBILE, SHADER_API_DESKTOP, UNITY_NO_RGBM, UNITY_USE_NATIVE_HDR, UNITY_FRAMEBUFFER_FETCH_AVAILABLE, UNITY_NO_CUBEMAP_ARRAY
    • UNITY_VERSION 매크로
  • .shader 파일과 #include_with_pragmas 지시문에 포함된 파일에는 Unity 전용 #pragma 지시문만 사용할 수 있습니다. Unity는 #include 지시문에 포함된 파일에서 이를 지원하지 않으며, 컴파일러는 이를 무시합니다.
  • #include 지시문에 포함된 파일에는 표준 HLSL #pragma 지시문만 사용할 수 있습니다. Unity는 .shader 파일이나 #include_with_pragmas 지시문에 포함된 파일에서 이를 지원하지 않으며, 컴파일러는 이를 무시합니다.

참고: 셰이더 파일이 #include를 사용하여 #include_with_pragmas 지시문이 포함된 파일을 임포트하는 경우, Unity는 #include_with_pragmas 지시문이 참조하는 파일의 #pragma 지시문을 무시합니다.

define_for_platform_compiler 지시문 사용

셰이더 코드에서 #define_for_platform_compiler 지시문을 사용하여 #define 지시문을 셰이더 컴파일러로 전송합니다.

예를 들어, #define_for_platform_compiler EXAMPLE_SYMBOLEXAMPLE_SYMBOL이라는 심볼을 정의하는 #define EXAMPLE_SYMBOL 지시문을 셰이더 컴파일러로 전송합니다. 셰이더 컴파일러가 사용하는 심볼에 대한 자세한 내용은 외부 셰이더 컴파일러 기술 자료(예: FXC 컴파일러에 대한 Microsoft 기술 자료)를 참조하십시오.

Unity 프리 프로세서는 #define_for_platform_compiler로 정의한 심볼을 사용하지 않으므로 자체 셰이더 코드에서 심볼을 사용할 수 없습니다. 예를 들어 위 예시에서 #if (EXAMPLE_SYMBOL) 문 안에 셰이더 코드를 추가하면 코드가 실행되지 않습니다.

추가 리소스

셰이더에서 16비트 정밀도 사용
Unity의 GLSL
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961