GLSL 셰이더 프로그램
셰이더 컴파일 타겟 레벨

Unity에서 사용하는 셰이딩 언어

Unity에서 셰이더 프로그램HLSL 언어(Cg라고도 불리는데 실제 사용에 있어서 두 가지는 동일함)의 배리언트로 작성됩니다.

현재 서로 다른 플랫폼간 최대의 이식성을 제공하기 위해 DX9 스타일 HLSL로 작성합니다(예: 텍스처 샘플링에 DX10 스타일 Texture2D, SamplerState, tex.Sample 대신 DX9 스타일 sampler2D, tex2D를 사용).

셰이더 컴파일러

내부적으로 셰이더 프로그램 컴파일에는 다른 셰이더 컴파일러를 사용합니다.

  • Windows & Microsoft 플랫폼(DX11, DX12, Xbox One)은 모두 Microsoft의 HLSL 컴파일러(현재 d3dcompiler_47)를 사용합니다.
  • OpenGL Core, OpenGL ES 3, OpenGL ES 2.0 및 Metal은 Microsoft의 HLSL을 사용한 후 HLSLcc를 사용하여 GLSL 또는 Metal로 바이트코드 이동을 합니다.
  • OpenGL ES 2.0은 hlsl2glslforkglsl optimizer를 통해 소스 레벨 이동을 사용할 수 있습니다. #pragma prefer_hlsl2glsl gles를 추가하면 이 옵션이 활성화됩니다.
  • 기타 콘솔 플랫폼은 해당되는 컴파일러를 사용합니다(예: PS4에서는 PSSL).
  • 표면 셰이더는 코드 생성 분석 단계에 Cg 2.2 및 MojoShader를 사용합니다.

어떤 컴파일러를 사용하고 있는지 꼭 알아야 하는 경우(한 컴파일러에서만 지원되는 HLSL 구문을 사용하거나 컴파일러 버그 관련 작업 시), 사전 정의 셰이더 매크로를 사용할 수 있습니다. 예를 들어 HLSL 컴파일러(D3D 또는 GLCore/GLES3/GLES 플랫폼용)로 컴파일할 때 UNITY_COMPILER_HLSL이 설정되며, hlsl2glsl을 통해 컴파일할 때는 UNITY_COMPILER_HLSL2GLSL이 설정됩니다.

관련 항목

GLSL 셰이더 프로그램
셰이더 컴파일 타겟 레벨