표면 셰이더 또는 일반 셰이더 프로그램으로 작성할 때 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
를 통해 함수 엔트리 포인트를 명시적으로 설정하지 않는 셰이더는 내부 셰이더 성능 요구 사항을 다운그레이드합니다. 이렇게 하면 런타임과 기능에서 큰 차이가 있는 비DX11 타겟이 기존 셰이더 콘텐츠와 호환될 수 있습니다.
예를 들어 Unity는 Metal 그래픽스에 대해 테셀레이션 셰이더를 지원하지만, Metal은 지오메트리 셰이더를 지원하지 않습니다. 지오메트리 셰이더를 사용하지 않는 한 #pragma target 5.0
은 계속 사용할 수 있습니다.
아래 리스트는 지원되는 셰이더 모델을 성능의 오름차순으로 나열합니다(일부 경우 더 높은 플랫폼/GPU 요구 사항 순서).
es3.0
타겟의 모든 것이 포함됩니다.모든 OpenGL 유사 플랫폼(모바일 포함)은 “셰이더 모델 3.0 지원 가능”으로 간주됩니다. WP8/WinRT 플랫폼(DX11 기능 레벨 9.x)은 셰이더 모델 2.5만 가능한 것으로 간주됩니다.