Unity/Rendering&Shader

[SHADER LAB] Shader Model Features

김성인 2023. 11. 21. 13:43

[SHADER LAB] Shader Model Features

 

찾기 쉽도록 발췌

 

참조 - https://www.lifewire.com/determine-directx-version-and-shader-model-812997

참조 - MS HLSL Documentation : https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-models

참조 - Unity Documentation : https://docs.unity3d.com/kr/2023.2/Manual/SL-ShaderCompileTargets.html

참조 - Unity Documentation : https://docs.unity3d.com/540/Documentation/Manual/SL-ShaderCompileTargets.html

참조 - DX 기능 레벨 :  https://learn.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-devices-downlevel-intro

 

참조 - OpenGL ES : https://developer.android.com/guide/topics/graphics/opengl?hl=ko


DirectX and Shader Model Versions

DirectX 버전 Shader Model
DirectX 8.0 Shader Model 1.0 & 1.1
DirectX 8.0a Shader Model 1.3
DirectX 8.1 Shader Model 1.4
DirectX 9.0 Shader Model 2.0
DirectX 9.0a Shader Model 2.0a
DirectX 9.0b Shader Model 2.0b
DirectX 9.0c Shader Model 3.0
DirectX 10.0 Shader Model 4.0
DirectX 10.1 Shader Model 4.1
DirectX 11.0 Shader Model 5.0
DirectX 11.1 Shader Model 5.0
DirectX 11.2 Shader Model 5.0
DirectX 12 Shader Model 5.1

 


Shader model이란?

컴퓨터 그래픽스에서 셰이더의 기능과 특징을 정의하는 사양의 집합을 말한다.

 


Unity Shader lab의 #pragma target 값 리스트


#pragma target  2.0

DirectX 셰이더 모델 2.0과 동등
연산 및 텍스처 명령어 수가 제한 된다.
보간기(interpolator) 8개
버텍스 텍스처 샘플링 없음.
프래그먼트 셰이더에 도함수 없음.
명시적 LOD 텍스처 샘플링 없음.


#pragma target 2.5

3.0과 거의 동일하지만...

보간기 8개

명시적인 LOD 텍스처 샘플링 없음.

DX9에서 셰이더 모델 3.0

윈도우폰에서 DX11 기능레벨 9.3으로 컴파일 됨 // 기능레벨 관련 맨 위 링크 참조


#pragma target 3.0

DX9에서 셰이더 모델 3.0 : 파생 명령, 텍스처 LOD 샘플링, 보간기 10개, 더욱 많은 수학/텍스처 명령이 허용.

DX11 기능 수준 9.x GPU(예 : 대부분의 윈도우 폰 장치)에서 지원되지 않음.

현재 드라이버 확장 및 사용되는 기능에 따라 일부 OpenGL ES 2.0 장치에서는 완전히 지원되지 않을 수 있음.


#pragma target 3.5(or es3.0)

OpenGL ES 3.0 기능(지오메트리 셰이더가 없는 D3D 플랫폼의 DX10 셰이더 모델 4.0)

DX9, DX11 9.x(윈도우 폰), OpenGL ES 2.0에서는 지원되지 않음.

DX11+, OpenGL 3.2+, OpenGL ES 3+, Metal, PS/XB1 콘솔에서 지원

셰이더, 텍스처 배열 등의 기본 정수 연산 가능


#pragma target 4.0

DX11 셰이더 모델 4.0

DX9, DX11 9.x(윈도우 폰), OpenGL ES 2.0/3.0/3.1, Metal에서 지원되지 않음.

DX11+, OpenGL 3.2+, OpenGL ES 3.1 + AEP, PS4/XB1 콘솔에서 지원.

지오메트리 셰이더와 OpenGL ES 3.0의 모든 기능 지원


AEP : Android Extension Pack

          OpenGL ES 3.1 확장 세트, GLES 3.1 개정판에 있었던 테셀레이션과 같은 추가 기능을 제공하기 위해  Android Lollipop에 공식적으로 추가 됨.

 관련 링크 : https://www.phoronix.com/review/sig-gles32-glu/3


#pragma target 4.5(or es3.1)

OpenGL ES 3.1 기능(테셀레이션 셰이더가 없는 D3D 플랫폼의 DX11 셰이더 모델 5.0)

셰이더 모델 5.0  이전의 DX9, DX11, 4.3 이전의 OpenGL(예 : Mac), OpenGL ES 2.0/3.0, Metal에서 지원되지 않음.

DX11+ 셰이더 모델 5.0, OpenGL ES 3.1, PS4/XB1 콘솔에서 지원

컴퓨팅 셰이더, 랜덤 액세스 텍스처 쓰기, 오토믹 등이 있음.

지오메트리 또는 테셀레이션 셰이더 없음.


#pragma target 4.6(or gl4.1)

OpenGL 4.1 기능(컴퓨팅 셰이더가 없는 D3D 플랫폼의 DX11 셰이더 모델 5.0) 이것은 기본적으로 Mac에서 지원하는 가장 높은 OpenGL 레벨

셰이더 모델 5.0 이전의 DX9, DX11, 4.1 이전의 OpenGL, OpenGL ES 2.0/3.0/3.1, Metal에서는 지원되지 않음.

DX11+ 셰이더 모델 5.0, OpenGL 4.1+, OpenGL ES 3.1+AEP, PS4/XB1 콘솔에서 지원


#pragma target 5.0

DX11 셰이더 모델 5.0

셰이더 모델 5.0 이전의 DX9, DX11, 4.3 이전의 OpenGL(예 : Mac), OpenGL ES 2.0/3.0/3.1, Metal에서 지원되지 않음.

DX11+ 셰이더 모델 5.0, OpenGL 4.3+, OpenGL ES 3.1+AEP, PS4/XB1 콘솔에서 지원


모든 OpenGL 유사 플랫폼(모바일 포함)은 "셰이더 모델 3.0 가능"으로 취급. 

WP8/WinRT 플랫폼(DX11 기능 수준 9.x)은 셰이더 모델 2.5만 지원하는 것으로 간주됨.

 


특정 API 티어를 위한 지시문

 

기본적으로 Unity는 현재 빌드 타겟을 위한 리스트에 있는 각 그래픽스 API를 위한 모든 셰이더 프로그램을 컴파일한다.

 

이것만 : #pragma only_renderers metal vulkan

제외 : #pragma exclude_renderer metal vulkan

특정 API용 그래픽스 티어를 위한 셰이더 강제베리언트 생성 : #pragma hardware_tier_variants metal

 

키워드 설명
d3d11 DirectX 11 기능 레벨 10 이상, DirectX 12
gles3 OpenGL ES 3.x, WebGL 2.0
ps4 PlayStation 4
xboxone Xbox One 및 GameCore, DirecX 11, DirectX 12
metal iOS/Mac Metal
glcore OpenGL 3.x, OpenGL 4.x
vulkan Vulkan
switch Nintendo Switch
ps5 PlayStation 5