Version: 5.4
Unity에서 사용하는 셰이딩 언어
셰이더 데이터 타입 및 정밀도

셰이더 컴파일 타겟 레벨

When writing either Surface Shaders or regular Shader Programs, the Cg/HLSL source can be compiled into different “shader models”. Higher shader compilation targets allow using more modern GPU functionality, but might make the shader not work on older GPUs or platforms.

컴파일 타겟은 #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에서 지원하지 않습니다.
  • Supported on DX11+, OpenGL 3.2+, OpenGL ES 3+, Metal, PS4/XB1 consoles.
  • 셰이더, 텍스처 배열 등에서 네이티브 정수 연산이 가능합니다.

#pragma target 4.0

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

#pragma target 4.5(또는 es3.1)

  • OpenGL ES 3.1 성능입니다(D3D 플랫폼에서 DX11 SM5.0, 테셀레이션 셰이더 제외).
  • Not supported on DX9, DX11 before SM5.0, OpenGL before 4.3 (i.e. Mac), OpenGL ES 2.0/3.0. Not yet supported on Metal.
  • Supported on DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1, PS4/XB1 consoles.
  • 컴퓨트 셰이더, 랜덤 액세스 텍스처 쓰기, 단위 동작 등이 있습니다. 지오메트리 또는 테셀레이션 셰이더는 없습니다.

#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에서 지원하지 않습니다.
  • Supported on DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1+AEP, PS4/XB1 consoles.

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

참고 항목

Unity에서 사용하는 셰이딩 언어
셰이더 데이터 타입 및 정밀도