인터폴레이터 개수 한계
버텍스에서 프래그먼트 셰이더로 정보를 넘기는 데 사용할 수 있는 전체 인터폴레이터 변수 개수에는 제한이 있습니다. 이 제한은 플랫폼 및 GPU에 따라 달라지며 일반적인 가이드라인은 다음과 같습니다.
- 인터폴레이터 최대 8개: OpenGL ES 2.0 (iOS/Android), Direct3D 11 9.x 레벨 (Windows 휴대폰), Direct3 9 셰이더 모델 2.0 (구형 PC)입니다. 인터폴레이터 개수에 제한이 있지만 각 인터폴레이터는 4-컴포넌트 벡터가 될 수 있으며 일부 셰이더는 제한을 충족하기 위하여 여러가지를 합칩니다. 예를 들어, 텍스처 좌표 2개를 float4 변수 하나로 패스할 수 있습니다. (첫 번째 좌표는 .xy로, 두 번째 좌표는 .zw로).
- 인터폴레이터 최대 10개: Direct3D 9 셰이더 모델 3.0(#pragma target 3.0)입니다.
- 인터폴레이터 최대 16개: OpenGL ES 3.0(iOS/Android), Metal(iOS)입니다.
- 인터폴레이터 최대 32개: Direct3D 10 셰이더 모델 4.0(#pragma target 4.0)입니다.
특정 타겟 하드웨어에 상관 없이 성능을 위해서는 인터폴레이터를 최소한으로 사용하는 게 좋습니다
https://docs.unity3d.com/kr/current/Manual/SL-ShaderSemantics.html
지원되는 ’#pragma target’ 이름
아래 리스트는 지원되는 셰이더 모델을 성능의 오름차순으로 나열합니다(일부 경우 더 높은 플랫폼/GPU 요구 사항 순서).
#pragma target 2.0
- Unity가 지원하는 모든 플랫폼에서 작동합니다. DX9 셰이더 모델 2.0.
- 연산 및 텍스처 명령어 수가 제한됩니다. 인터폴레이터 8개, 버텍스 텍스처 샘플링 없음, 프래그먼트 셰이더에 도함수 없음, 명시적 LOD 텍스처 샘플링 없음.
#pragma target 2.5(디폴트)
- 아래의 3.0 타겟과 거의 같으나 인터폴레이터는 8개이고 명시적 LOD 텍스처 샘플링이 없습니다.
- 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, 지오메트리 셰이더는 제외).
- 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.
- 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, 테셀레이션 셰이더 제외).
- 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 레벨입니다.
- 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, Vulkan, Metal(지오메트리 없음), PS4/XB1 콘솔에서 지원합니다.
#pragma target 5.0
- DX11 셰이더 모델 5.0.
- 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, Metal(지오메트리 없음), PS4/XB1 콘솔에서 지원합니다.
모든 OpenGL 유사 플랫폼(모바일 포함)은 “셰이더 모델 3.0 지원 가능”으로 간주됩니다. WP8/WinRT 플랫폼(DX11 기능 레벨 9.x)은 셰이더 모델 2.5만 가능한 것으로 간주됩니다.
https://docs.unity3d.com/kr/2019.4/Manual/SL-ShaderCompileTargets.html
반응형
'Shader ' 카테고리의 다른 글
Unity Vertex Shader / Fragment Shader 의 설정 함수 (0) | 2021.08.10 |
---|---|
URP shader 에서 Texture 16장 초과하여 사용하기 (3) | 2021.08.04 |
서피스 셰이더에서 버텍스 셰이더 인풋값 초기화 (0) | 2021.07.07 |
커스텀 셰이더 GUI 만들기 : 잠깐 정리 (0) | 2021.05.14 |
커스텀 셰이더 GUI 만들기 - 프로퍼티 생성 (2) | 2021.05.02 |
댓글