Unity에서 사용하는 셰이딩 언어(Shading Language used in Unity)
셰이더 데이터 타입 및 정밀도(Shader data types and precision)

셰이더 컴파일 타겟 레벨(Shader Compilation Target Levels)

표면 셰이더 또는 일반 셰이더 프로그램으로 작성할 때 HLSL 소스를 다른 “셰이더 모델”로 컴파일할 수 있습니다. 셰이더 컴파일 타겟 레벨이 높으면 더 최신 GPU 기능을 사용할 수 있지만 셰이더가 구형 GPU 또는 플랫폼에서 작동하지 않을 수도 있습니다.

컴파일 타겟은 #pragma target name 지시자로 표시하며, 예제는 다음과 같습니다.

#pragma target 3.5

기본 컴파일 타겟

Unity는 기본적으로 지원하는 타겟 중 DirectX 셰이더 모델 2.0과 3.0 사이의 가장 낮은 타겟(“2.5”)으로 셰이더를 컴파일합니다. 일부 다른 컴파일 지시자는 셰이더가 자동으로 더 높은 타겟에서 컴파일되도록 만들수 있습니다.

  • 지오메트리 셰이더를 사용하면(#pragma geometry) 컴파일 타겟을 4.0으로 설정합니다.
  • 테셀레이션 셰이더를 사용하면(#pragma hull 또는 #pragma domain) 컴파일 타겟을 4.6으로 설정합니다.

지원되는 #pragma target 이름

아래 리스트는 지원되는 셰이더 모델을 성능의 오름차순으로 나열합니다(일부 경우 더 높은 플랫폼/GPU 요구 사항 순서).

#pragma target 2.0

  • Unity가 지원하는 모든 플랫폼에서 작동합니다. DX9 셰이더 모델 2.0.
  • 연산 및 텍스처 명령어 수가 제한됩니다. 인터폴레이터 8개, 버텍스 텍스처 샘플링 없음, 프래그먼트 셰이더에 도함수 없음, 명시적 LOD 텍스처 샘플링 없음.

#pragma target 2.5(디폴트)

  • 아래의 3.0 타겟과 거의 같으나 인터폴레이터는 8개이고 명시적 LOD 텍스처 샘플링이 없습니다.
  • DX9에서 SM3.0으로, Windows 휴대폰에서는 DX11 기능 레벨 9.3으로 컴파일됩니다.

#pragma target 3.0

  • DX9 셰이더 모델 3.0: 도함수 명령어, 텍스처 LOD 샘플링, 인터폴레이터 10개, 더 많은 수학/텍스처 명령어 허용.
  • DX11 기능 레벨 9.x GPU에서는 지원하지 않습니다(예: 대부분의 Windows 휴대폰 기기).
  • 제공되는 드라이버 확장 및 사용 기능에 따라 일부 OpenGL ES 2.0 기기에서 완전히 지원하지 않을 수 있습니다.

#pragma target 3.5(또는 es3.0)

  • OpenGL ES 3.0 성능입니다(D3D 플랫폼에서 DX10 SM4.0, 지오메트리 셰이더는 제외).
  • DX9, DX11 9.x(WinPhone), OpenGL ES 2.0에서 지원하지 않습니다.
  • DX11+, OpenGL 3.2+, OpenGL ES 3+, Metal, PS4/XB1 콘솔에서 지원합니다.
  • 셰이더, 텍스처 배열 등에서 네이티브 정수 연산이 가능합니다.

#pragma target 4.0

  • DX11 셰이더 모델 4.0.
  • DX9, DX11 9.x(WinPhone), OpenGL ES 2.0/3.0/3.1, Metal에서 지원하지 않습니다.
  • DX11+, OpenGL 3.2+, OpenGL ES 3.1+AEP, Vulkan, PS4/XB1 콘솔에서 지원합니다.
  • 지오메트리 셰이더 등 es3.0 타겟의 모든 것이 포함됩니다.

#pragma target 4.5(또는 es3.1)

  • OpenGL ES 3.1 성능입니다(D3D 플랫폼에서 DX11 SM5.0, 테셀레이션 셰이더 제외).
  • DX9, SM5.0 이전 DX11, OpenGL 4.3 이전 버전(Mac), OpenGL ES 2.0/3.0에서 지원하지 않습니다.
  • DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1, Metal, Vulkan, PS4/XB1 콘솔에서 지원합니다.
  • 컴퓨트 셰이더, 랜덤 액세스 텍스처 쓰기, 단위 동작 등이 있습니다. 지오메트리 또는 테셀레이션 셰이더는 없습니다.

#pragma target 4.6(또는 gl4.1)

  • OpenGL 4.1 성능입니다(D3D 플랫폼에서 DX11 SM5.0, 컴퓨트 셰이더 제외). Mac이 지원하는 가장 높은 OpenGL 레벨입니다.
  • DX9, SM5.0 이전 DX11, OpenGL 4.1 이전 버전, OpenGL ES 2.0/3.0/3.1, Metal에서 지원하지 않습니다.
  • DX11+ SM5.0, OpenGL 4.1+, OpenGL ES 3.1+AEP, PS4/XB1 콘솔에서 지원합니다.

#pragma target 5.0

  • DX11 셰이더 모델 5.0.
  • DX9, SM5.0 이전 DX11, OpenGL 4.3 이전 버전(Mac), OpenGL ES 2.0/3.0/3.1, Metal에서 지원하지 않습니다.
  • DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1+AEP, Vulkan, PS4/XB1 콘솔에서 지원합니다.

모든 OpenGL 유사 플랫폼(모바일 포함)은 “셰이더 모델 3.0 지원 가능”으로 간주됩니다. WP8/WinRT 플랫폼(DX11 기능 레벨 9.x)은 셰이더 모델 2.5만 가능한 것으로 간주됩니다.

참고 항목

Unity에서 사용하는 셰이딩 언어(Shading Language used in Unity)
셰이더 데이터 타입 및 정밀도(Shader data types and precision)