Version: 2020.1
언어: 한국어
고급 ShaderLab 항목
Asynchronous shader compilation in the Unity Editor

셰이더 컴파일

다음과 같이 플랫폼마다 서로 다른 셰이더 컴파일러를 셰이더 프로그램 컴파일에 사용합니다.

  • DirectX를 사용하는 플랫폼은 Microsoft의 FXC HLSL 컴파일러를 사용합니다.
  • OpenGL(Core 및 ES)을 사용하는 플랫폼은 Microsoft의 FXC HLSL 컴파일러를 사용하며, 이후 HLSLcc를 사용하여 GLSL로 바이트코드 변환을 수행합니다.
  • Metal을 사용하는 플랫폼은 Microsoft의 FXC HLSL 컴파일러를 사용하며, 이후 HLSLcc를 사용하여 Metal로 바이트코드 변환을 수행합니다.
  • Vulkan을 사용하는 플랫폼은 Microsoft의 FXC HLSL 컴파일러를 사용하며, 이후 HLSLcc를 사용하여 SPIR-V로 바이트코드 변환을 수행합니다.
  • 콘솔 플랫폼과 같은 여타 플랫폼은 각각 해당하는 컴파일러를 사용합니다.
  • 표면 셰이더는 코드 생성 분석 단계에 HLSL 및 MojoShader를 사용합니다.

사전 정의된 셰이더 매크로를 사용하여 Unity가 사용 중인 컴파일러를 식별할 수 있습니다. 하나의 컴파일러가 지원하는 HLSL 구문을 사용하는 경우 사전 정의된 셰이더 매크로를 사용하거나 컴파일러 버그를 해결할 수 있습니다.

You can configure various shader compiler settings using [SL-Programs](compilation directives).

캐싱 셰이더 프리 프로세서(실험 기능)

셰이더 컴파일에는 여러 단계가 포함되어 있습니다. 첫 번째 단계 중 하나는 셰이더 소스를 전처리하는 작업입니다. 기본적으로 Unity는 플랫폼 컴파일러의 프리 프로세서를 사용하여 이 단계를 수행합니다. 하지만 이를 오버라이드하고 Unity의 캐싱 셰이더 프리 프로세서를 사용하여 전처리를 수행하도록 선택할 수도 있습니다. 캐싱 셰이더 프리 프로세서는 플랫폼 컴파일러에서 사용하는 기본 프리 프로세서보다 최대 25% 더 빠릅니다.

캐싱 셰이더 프리 프로세서는 셰이더 임포트 및 컴파일 시간을 단축하기 위해 중간 전처리 데이터를 캐싱합니다. 에디터는 이 캐싱 데이터를 재사용하므로, 콘텐츠가 변경될 경우에만 포함 파일을 파싱하면 됩니다. 따라서 동일한 셰이더의 여러 배리언트를 더욱 효율적으로 컴파일할 수 있습니다. 캐싱 셰이더 프리 프로세서를 활성화하면 프로젝트 내 셰이더가 매우 많은 공통 포함 파일을 사용할 때 가장 큰 효과를 얻을 수 있습니다.

캐싱 셰이더 프리 프로세서는 아직 실험 기능이며, 현재 개발 중에 있습니다. Unity 포럼에서 이 실험 기능에 대한 피드백을 제공할 수 있습니다.

에디터 설정 창의 Shader Compilation 섹션에서 Caching Shader Preprocessor (Experimental) 체크박스를 사용하여 캐싱 셰이더 프리 프로세서를 활성화하거나 비활성화할 수 있습니다. 또한 C# 스크립트에서 EditorSettings.cachingShaderPreprocessor API를 사용하여 이 기능을 활성화하거나 비활성화할 수도 있습니다.

고급 ShaderLab 항목
Asynchronous shader compilation in the Unity Editor