2016년 12월 19일 월요일

High Level Shading Language

High Level Shading Language

High Level Shading Language(하이레벨 쉐이딩 언어, 약칭: HLSL)는 마이크로소프트에 의해서 개발된, Direct3D (DirectX)로 사용되는 프로그라마브르시다를 위한 프로프라이에타리인 쉐이딩 언어이다. 이전에는 High Level Shader Language라고 하는 부르는 법도 되고 있던[1].다만 MSDN의 일본어판으로는, Direct3D 11이 릴리스 된 나중에도 상위 레베르시다 언어(지우이레베루시다 언어)라고 하는 역어를 사용하고 있는[2] [3].

HLSL는 OpenGL로 사용되는 쉐이딩 언어인 GLSL와(기능적으로는) 유사한 물건이다.또, NVIDIA와 협력해 개발된 것으로부터, 언어 문법이 Cg(C for Graphics) 언어에 매우 잘 비슷하다.

목차

개발 경위

Direct3D 7까지는 그래픽 카드에 실장된 고정 파이프라인 및 하드웨어 기능을 구사해 3 D그래픽스 씬을 구축하고 있었지만, 그래픽스 표현의 유연성을 향상시킬 수 있도록, Direct3D 8으로는 프로그라마브르시다가 탑재된[4].이것에 의해서, 그래픽스 어플리케이션 개발자가 그래픽스 묘화 알고리즘을 소프트웨어에 의해서 커스터마이즈 하는 것이 가능해졌다.그러나, Direct3D 8으로 사용할 수 있는 시다 언어는 어셈블러(저급 언어)에서 만났기 때문에, 개발 효율이나 프로그램 코드의 재이용성에 한계가 있었다.그것을 해소할 수 있도록, C언어풍의 선언문이나 제어문등의 기법을 가능하게 한 고급언어 HLSL가 개발되게 되었다.HLSL는 Direct3D 9로 처음으로 도입되어 그 후도 Direct3D와 함께 기능확장이 계속되고 있다.

GDC 2016으로는 DirectX 12의 향후의 발전, 그리고 새로운 차기 DirectX와 시다모델 6의 개발에 관해서 언급이 있어, HLSL 언어 사양에도 큰 기능 추가가 예정되어 있는 것이 발표된[5].시다모델 6.0으로는 Wave로 불리는 SIMT(영문판) 스렛드그르프의 개념과 각 그룹내로의 데이터 교환을 위한 짜넣어 명령이 도입되어 NVIDIA GPU의 Warp 및 AMD GPU의 Wavefront를 표준화 하는 것이 예정되어 있는[6].

프로그래머블 파이프라인 스테이지

HLSL에 의해서 프로그램 가능한 그래픽스 파이프라인 스테이지는, 대응하는 Direct3D의 버전 및 시다모델(후술)에 따라서 다르다.

정점 시다는 어플리케이션에 의해서 제공(입력)되는 정점 각각 붙어 실행되어 주로 오브젝트 공간으로부터 시 공간에의 정점 좌표변화나 texture 좌표의 생성, 또 정점의 접선이나 종법선이나 법선 벡터와 같은 광선의 계수의 계산등의 처리를 담당한다.정점 시다를 통해 정점의 그룹(삼각형이면 통상은 3개)이 입력되었을 때, 출력 좌표는 그 영역내에서 화면상의 픽셀을 결정하기 위해서 보간 된다.이 처리는 라스타라이제이션으로서 알려져 있다.이러한 픽셀 각각이 피크세르시다를 통과하는 것으로, 결과적으로 스크린상의 각 점의 색이 계산된다.

또, Direct3D 10/11/12대응 하드웨어에 대해 Direct3D 10/11/12인터페이스를 사용하는 어플리케이션은, 정점 시다스테이지의 뒤에 지오메트리시다를 지정할 수도 있다.지오메트리시다는 rasterize의 전에 원시적의 증감이나 종류의 변경을 행할 수 있다.

덧붙여 HLSL로 사용 가능한 파린노이즈 생성 함수인 noise()는, 테크스체시다로 불리는 특수한 시다스테이지에서만 이용이 가능해지고 있다.

언어 기능

HLSL의 기본적인 문법은 C/C++에 준하지만, 그래픽스 프로그램을 기술하는데 적합한 전용의 벡터・행렬형이나 함수를 갖추고 있다.수학 함수안에는 C/C++표준 라이브러리와 같은 것도 포함된다.또, Direct3D 10으로는 API의 대폭적인 설계 변경이 행해진 적도 있어, Direct3D 9용의 HLSL와 비교하고, Direct3D 10이후 용무의 HLSL로는 객체 지향에 근거한 언어 사양의 재설계가 이루어져 다수의 사양 변경이 더해지고 있는[7].

Direct3D 10이후로는 HLSL에서 클래스를 정의해, C++와 같이 데이터(멤버 변수)와 행동(멤버 함수)을 관련짓는 것이 가능하지만, 액세스 지정자에 의한 캡슐화계승 및 가상 함수라고 하는 기능은 갖추지 않았다.

Direct3D 11으로는 시다 의 편성 폭발 문제를 해소할 수 있도록, HLSL에서 인터페이스의 정의와 실장에 의한 포리모피즘을 유사적으로 실현되는 「동적 시다린크(Dynamic Shader Linkage)」라고 불리는 기능이 추가된[8].

코드예

이하에 Direct3D 10/11향해라 HLSL를 이용한, 단순한 Half Lambert 조명 모델Phong 조명 모델(Blinn-Phong)의 정점 시다 및 피크세르시다의 프로그램을 나타낸다.또한 분기에 의해서 조명 모델을 바꾸고 있지만, 이것은 이른바 워바시다(uber-shader)이므로, 실행 속도 효율 등은 고려하고 있지 않는 것에 주의받고 싶다.

 // Shader Constants. matrix TrWorldViewProj; matrix TrWorld; float4 LightPosition; float3 EyePosition; float4 DiffuseColor; float4 SpecularColor; float SpecularPower; bool IsPhongModel;  struct BasicVSOutput { 	float4 Pos : SV_POSITION; 	float3 WPos : TEXCOORD1; 	float3 WNormal : NORMAL0; }; typedef BasicVSOutput BasicPSInput;  // Vertex Shader Program. BasicVSOutput BasicVS(float3 pos : POSITION0, float3 normal : NORMAL0) { 	BasicVSOutput output = (BasicVSOutput)0; 	output.Pos = mul(float4(pos, 1), TrWorldViewProj); 	output.WPos = mul(float4(pos, 1), TrWorld).xyz; 	output.WNormal = mul(normal, (float3x3)TrWorld); 	return output; }  float4 CalcLambert(float3 light, float3 wnormal) { 	// Half Lambert.  	float lambert = dot(light, wnormal); 	lambert = lambert * 0.5f + 0.5f; 	lambert *= lambert; 	return lambert * DiffuseColor; }  float4 BasicLambert(BasicPSInput input) { 	const float3 light = normalize(LightPosition.xyz - input.WPos); 	const float3 normal = normalize(input.WNormal); 	return CalcLambert(light, normal); }  float4 BasicPhong(BasicPSInput input) { 	// Phong lighting with specular.  	const float3 eye = normalize(EyePosition - input.WPos); 	const float3 light = normalize(LightPosition.xyz - input.WPos); 	const float3 halfway = normalize(light + eye); 	const float3 normal = normalize(input.WNormal); 	const float specular = pow(max(dot(normal, halfway), 0.0), SpecularPower); 	return CalcLambert(light, normal) + specular * SpecularColor; }  // Pixel Shader Program. float4 BasicPS(BasicPSInput input) : SV_TARGET0 { 	if (IsPhongModel) 	{ 		return BasicPhong(input); 	} 	else 	{ 		return BasicLambert(input); 	} } 

예의 같게, 피크세르시다에 의해서 픽셀 단위의 정규화 법선 벡터를 요구하는 것으로, Direct3D 7 이전의 고정 기능 시다로는 실현이 어려웠던 Per-Pixel 라이팅이 용이하게 실장 가능해지고 있다. 물론, 사용하는 시다모델 및 대응하는 하드웨어에 따라서는, 보다 복잡하고 장대한 알고리즘을 실장할 수도 있다.리얼타임 그래픽스이기 때문에 하드웨어 성능에 응한 트레이드 오프로는 되지만, 단순한 국소 조명(로컬 일루미네이션) 뿐만이 아니라, 보다 엄밀한 물리 베이스의 렌더링 방정식(영문판)에 근거한, 광역 조명(글로벌 일루미네이션) 모델을 HLSL에 의한 프로그라마브르시다로 실장하는 것으로, 보다 현실에 가까운 리얼타임 3 D컴퓨터 그래픽스를 실현하는 일도 가능해진다.게다가 Direct3D 11 (DirectCompute)으로는 콘퓨트시다를 사용하고, GPU에 그래픽스 용도 이외의 범용 계산을 행하게 하는 GPGPU 프로그램을 HLSL로 기술하는 일도 가능해진다.

덧붙여 HLSL 원시 파일에는 통례. hlsl 확장자를 붙일 수 있어 헤더 파일에는. hlsli 확장자를 붙일 수 있는[9].

대응 환경

HLSL 프로그램은 주로 호스트가 되는 C++응용 프로그램 코드로부터 Direct3D API를 사용해 입력과 출력을 관리할 필요가 있으므로, 단체로 동작시킬 수 없다.덧붙여 단체의 컴파일러는 마이크로소프트로부터 무상 제공되고 있는 DirectX SDK(혹은 버전 8.0이후의 Windows SDK)에 부속된다.HLSL 컴파일러 fxc.exe에 의해서 출력되는 것은, 그래픽스 하드웨어의 벤더에 의존하지 않는 공통 바이트 코드이기 위해, 한 번 컴파일 해 두면 다른 하드웨어여도(컴파일시에 상정되고 있던 기능을 채우는 한) 동작시킬 수 있는[10].HLSL 프로그램을 서포트하는 것은 Direct3D 9이후를 서포트하는 시스템에 한정되기 위해, 2015년 1월 현재는 Windows OS, Xbox 360Xbox One이 주된 동작환경이다.

어플리케이션의 실행시에 HLSL 원시 코드를 컴파일 해 아르바이트 코드를 생성하는 기능을 짜넣기 위한 D3DCompiler 런타임도 제공되고 있는[11].

그 밖에, 게임 엔진의 Unity로는, Windows상에서 DirectCompute 베이스(DirectX 11 베이스)의 콘퓨트시다를 사용할 수 있지만, 콘퓨트시다의 기술에는 Cg는 아니고 HLSL를 이용하는[12].Unity는 Cg/HLSL로부터 GLSL에의 트랜슬레이션이 가능하기 때문에, OpenGL 4.3이나 OpenGL ES 3.1의 콘퓨트시다를 이용하는 경우에서도 GLSL는 아니고 HLSL를 사용하는 것이 추천 되고 있다.

효과

HLSL 자체는, 시다 함수 및 각 시다스테이지의 참가 신청 포인트(이른바 메인 함수)를 기술하기 위해서 사용되지만, 이 복수의 시다스테이지를 정리해 관리・적용하는 「효과」라고 불리는 구조도 존재한다.즉, 예를 들면 2개의 정점 시다엔트리포인트 VS1(), VS2()와 2개의 피크세르시다엔트리포인트 PS1(), PS2()를 단일의 HLSL 소스 프로그램 파일(통례. fx확장자를 붙일 수 있어 효과 파일로 불린다)에 기술해, 한층 더 VS1+PS1, VS2+PS2, VS1+PS2, VS2+PS1라고 하는 시다스테이지의 편성(패스)외, 각종 렌더링 스테이트의 설정을 효과 파일중에 기술해 관련지을 수 있다.효과를 취급하는 API는 Direct3D 10의 코아라이브라리 혹은 Direct3D 9/11의 extension 라이브러리(D3DX)에 준비되어 있어 렌더링 파이프라인의 관리를 C++코드로부터 분리할 수 있다.

WPF 효과

Windows 데스크탑 어플리케이션 체제의 하나인 WPF로는, 그래픽스의 렌더링에 Direct3D가 사용되고 있지만, GUI 위제트에 브라-(애매하게 해)나 드롭섀도우라고 하는 효과(필터)를 적용하는 것이 가능해지고 있다.한층 더 WPF로는 유저 프로그래머가 HLSL로 작성한 피크세르시다를 사용해 커스텀 효과를 적용할 수도 있는[13].

WPF 3.5까지는 시다모델 2.0의 피크세르시다만이 서포트되고 있었지만, WPF 4로는 시다모델 3.0의 피크세르시다도 사용할 수 있게 된[14] [15].

Direct2D 효과

DirectX 패밀리의 하나, 2 차원 컴퓨터 그래픽스 API인 Direct2D로는, 버전 1.1에서 효과 기능이 실장되었지만, HLSL에 의한 커스텀 효과를 작성・이용하는 일도 가능해지고 있는[16].

시다모델

Direct3D 프로그라마브르시다를 실행하려면 , Direct3D 8이후에 대응한 하드웨어가 필요하다.다만, Direct3D 9까지의 경우, 정점 시다 만일 수 있는은 소프트웨어 즉 CPU로 에뮤레이트 할 수도 있는(D3DCREATE_SOFTWARE_VERTEXPROCESSING) 모아 두어 고정 기능 피크세르시다와 조합하는 것으로 Direct3D 7 이전의 낡은 하드웨어로 프로그라마브르시다를 실행하는 것도 가능하다.또, Direct3D 10.1이후로는 비교적 고속의 소프트웨어 렌더링 엔진인 WARP 디바이스도 실장되고 있기 때문에, GPU가 대응하고 있지 않아도 CPU에 Direct3D 렌더링을 실행시킬 수도 있다.

Direct3D 대응 하드웨어(그래픽 카드)의 세대에 의해서, GPU상에서 하드웨어 레벨로 실행 가능한 시다프로그람의 사양(제약, 기능등)이 다르다.이 사양은 시다모델로 불려 새로운 세대의 시다모델을 서포트하는 하드웨어는 기본적으로 낡은 세대의 시다모델도 서포트하는[17]이, 벤더 마다 확장된 2.0 a/2. 0 b등의 예외도 존재한다. 또한 HLSL가 Direct3D에 탑재된 것은 버전 9이후이지만, 시다모델 2.0이후가 아니면 HLSL를 사용할 수 없는 것은 없고, HLSL를 사용해 시다모델 1. x레벨의 프로그램을 기술하는 것도 가능하다.또, Direct3D 10으로는, 어셈블리 언어에 의한 시다프로그람 개발이 폐지되어 시다의 기술에는 HLSL만을 사용할 수 있게 된[18].

시다모델 3.0에는 정점 texture 페치(Vertex Texture Fetch, VTF)로 불리는 기능이 존재하지만, DirectX 9.0 c세대에 대응한 것은 NVIDIA의 하드웨어만으로, ATI의 하드웨어로는 서포트되지 않았다.반대로, 부동 소수점 버퍼에 있어서의 에일리어징 제거 기능은, NVIDIA 하드웨어로는 서포트되지 않고, ATI 하드웨어만으로의 대응이 되고 있던[19] [20].그 밖에도, (DirectX 11으로 표준화 되기 전의) 텟세레이션 기능[21]이 ATI 하드웨어상만으로 서포트되는[22] [23] [24]등, 시다모델 3.0까지는(비록 DirectX 9.0 c대응을 구가하고 있어도) 기능면에 있어 각사의 보조가 모이지 않는 상태에 있어, 이러한 기능을 이용하는 어플리케이션 개발자는 사용하고 싶은 기능이 실제로 하드웨어로 서포트되고 있는지 어떤지를 미리 Direct3D의 Caps (Capabilities) 취득 API를 사용해 하나하나 조사하지 않으면 안 되었다.이와 같이 벤더 마다 각 기능의 대응 레벨이 뿔뿔이되고 있던 비참한 상황은, 다음 버전의 Direct3D 10이후에 요구 사양이 엄격화된 것으로, 어느 정도 해소되게 되는[25].

덧붙여 Direct3D 10.1 API로는 4. x프로파일의 시다프로그람에 가세해 다운 레벨의 2.0 프로파일이 사용 가능하고, Direct3D 11/12 API로는 5. x 및 4. x프로파일에 가세해 다운 레벨의 2.0 프로파일이 사용 가능하지만, 모두 3.0 프로파일에 관해서는 사용할 수 없는[26] [27] [28] [29].

DirectX 버전과 각 시다스테이지

이하의 겉(표)는 하드웨어가 대응하고 있는 DirectX 버전과 그 하드웨어가 서포트하는 각 시다스테이지의 최상위버전(프로파일) 간의 관계를 나타내고 있다. 후술 하도록(듯이), 실행 가능한 시다프로그람의 최대 명령수나 레지스터수, 자원 슬롯수 등은 새로운 버전 쪽이 커져, 보다 유연하고 장대한 프로그램을 기술할 수 있게 된다.

DirectX Version Pixel Shader Vertex Shader Geometry Shader Hull Shader Domain Shader Compute Shader
8.0 1.0, 1.1 1.0 - - - -
8.1 1.2, 1.3, 1.4 1.1 - - - -
9.0 2.0 2.0 - - - -
9.0a 2.0a 2.0a - - - -
9.0b 2.0b 2.0 - - - -
9.0c 3.0 3.0 - - - -
10.0 4.0 4.0 4.0 - - 4.0
10.1 4.1 4.1 4.1 - - 4.1
11.0-11.2 5.0 5.0 5.0 5.0 5.0 5.0
11.3, 12 5.1 5.1 5.1 5.1 5.1 5.1
12 6.0 6.0 6.0 6.0 6.0 6.0

또한 콘퓨트시다(DirectCompute)는 DirectX 11에서 도입된 스테이지이며, DirectX 10 API를 경유해 이용할 수 없지만, 드라이버가 대응하고 있으면 DirectX 10. x세대의 하드웨어상에서도 DirectX 11 API를 경유해 다운 레벨(기능 제한부)의 콘퓨트시다를 실행하는 것이 가능해진다.

시다모델 5.1[30]은 DirectX 12 API를 드라이버 레벨로 서포트하는 모든 하드웨어(기능 레벨11_0이상이 필수)로 사용 가능하지만, Root Signature에 관한 기능은 DirectX 11.3으로는 사용하지 못하고, DirectX 12 전용의 기능이 되는[31].또, ROV (Rasterizer Order View)에 관한 오브젝트는, ROV 대응 하드웨어로 밖에 사용할 수 없는[32].

시다모델 6.0[33]의 편입 함수는 기능 레벨12_0의 요건으로서 추가되고 있다.

피크세르시다의 비교

  PS 1.0-1.3 PS 1.4 PS 2.0 PS 2.0a PS 2.0b PS 3.0[34] PS 4.0[35], 4.1, 5.0
의존 texture 제한 4 6 8 무제한 4 무제한 무제한
texture 명령 제한 4 6*2 32 무제한 무제한 무제한 무제한
Position register No No No No No Yes Yes
명령 슬롯수 8 + 4 8 + 4 32 + 64 512 512 ≥ 512 ≥ 65536
실행 명령수 8+4 6*2+8*2 32 + 64 512 512 65536 무제한
texture의 간접 참조 4 4 4 무제한 4 무제한 무제한
Interpolated registers 2 + 8 2 + 8 2 + 8 2 + 8 2 + 8 10 32
명령 예측 No No No Yes No Yes No
Index input registers No No No No No Yes Yes
일시 레지스터(Temp registers) 2 6   12에서 32 22 32 32 4096
정수 레지스터(Constant registers) 8 8 32 32 32 224 16x4096
Arbitrary swizzling(영문판) No No No Yes No Yes Yes
Gradient instructions No No No Yes No Yes Yes
Loop count register No No No No No Yes Yes
Face register (2-sided lighting) No No No No No Yes Yes
동적 flow control No No No No No 24 Yes
비트 연산 No No No No No No Yes
정수 연산 No No No No No No Yes
  • PS 2.0 = DirectX 9.0 오리지날의 시다모델 2.0 사양.
  • PS 2.0 a = NVIDIA GeForce FX에 최적화된 모델.
  • PS 2.0 b = ATI Radeon X700, X800, X850의 시다모델(DirectX 9.0 b).
  • PS 3.0 =시다모델 3.0에 포함된다.
  • PS 4.0 =시다모델 4.0에 포함된다.
  • PS 4.1 =시다모델 4.1에 포함된다.
  • PS 5.0 =시다모델 5.0에 포함된다.

실행 명령수에 대해"32 + 64"라고 하는 것은"32의 texture 명령과 64의 산술 명령"을 의미한다.

정점 시다의 비교

  VS 1.1 VS 2.0 VS 2.0a VS 3.0[34] VS 4.0[35], 4.1, 5.0
명령 슬롯수 128 256 256 ≥ 512 4096
최대 명령 실행수 불명 65536 65536 65536 65536
명령 예측 No No Yes Yes Yes
일시 레지스터(Temp registers) 12 12 13 32 4096
정수 레지스터(Constant registers) ≥ 96 ≥ 256 ≥ 256 ≥ 256 16x4096
정적 flow control 불명 Yes Yes Yes Yes
동적 flow control No No Yes Yes Yes
동적 flow control의 심도 No No 24 24 Yes
Vertex Texture Fetch No No No Yes Yes
테크스체산프라의 수 N/A N/A N/A 4 128
Geometry instancing support No No No Yes Yes
비트 연산 No No No No Yes
정수 연산 No No No No Yes
  • VS 2.0 = DirectX 9.0 오리지날의 시다모델 2.0 사양.
  • VS 2.0 a = NVIDIA GeForce FX에 최적화된 모델.
  • VS 3.0 =시다모델 3.0에 포함된다.
  • VS 4.0 =시다모델 4.0에 포함된다.
  • VS 4.1 =시다모델 4.1에 포함된다.
  • VS 5.0 =시다모델 5.0에 포함된다.

또한 VS 2.0 b는 존재하지 않는[36].

대응 하드웨어의 개략

이하의 겉(표)는 Direct3D 프로그라마브르시다에 대응하고 있는 각사 그래픽 카드의 개략이며, 대응하는 피크세르시다바젼과 DirectX의 버전을 나타내고 있다.그래픽 칩은 전술대로, 일반적으로는 상위 호환성이 있다.예를 들면 PS 3.0 대응의 팁은 PS 2.0이나 PS 1.1에도 대응하고 있다.

또한 개발에 전용 API나 OpenGL/GLSL를 사용하는 게임 전용기나 모바일 기기는, 비록 프로그라마브르시다 대응이어도 Direct3D/HLSL에 대응하고 있다고는 할 수 없지만, 그래픽 칩의 세대를 나타낼 때는 편의상 시다모델을 사용하는 일이 있다.

PS version DirectX version 3Dlabs AMD ( 구ATI) 인텔 Matrox NVIDIA S3 Graphics SiS XGI
1.0/1.1 8.0 - - - - GeForce 3 series - Xabre-Series -
1.2 8.0a Wildcat VP - - - - - - -
1.3 8.0a - - - Parhelia-Series GeForce 4 Ti/Go series - Mirage 2(소프트웨어 에뮬레이션으로 대응) -
1.4 8.1 - Radeon R200 (8500-9250) - - - - Mirage 3 Volari V3 series (V3XT를 제외하다)
2.0 9.0 Wildcat Realizm Radeon R300 (9500-9800, X300-X600) Intel GMA 900 - GeForce FX Series DeltaChrome, GammaChrome, Chrome S2x series, Chrome9 HC Mirage 3+ Volari V3XT, Volari V5 series, Volari V8 series, Volari 8300, Volari XP10
2.0a 9.0a - - - - GeForce FX Series - - -
2.0b 9.0b - Radeon R420 (X700-X850) - - - - - -
3.0 9.0c - Radeon X1xxx Intel GMA 950(3.0은 소프트웨어 에뮬레이션), 3000, 3100 M Series GeForce 6 series, GeForce 7 series - - -
4.0 10 - Radeon HD 2xxx Intel GMA X3100 이후의 시리즈 - GeForce 8 series, GeForce 9 series - - -
4.1 10.1 - Radeon HD 3xxx, Radeon HD 4xxx HD Graphics 2000/3000 - GeForce GT 200 Series Chrome400/500 - -
5.0 11 - Radeon HD 5xxx HD Graphics 2500/4000 - GeForce GTX 400 Series - - -

Shader Model 1. x

  • DirectX 8. x세대.
  • NVIDIAATI가 끝 없게 기능확장을 행했을 무렵의 모델.1.1, 1.2, 1.3, 1.4의 마이너 버전이 존재한다.
  • 대응 GPU: AMD Radeon는 8 xxx, NVIDIA GeForce는 3-4 Ti시리즈.
  • 게임기인 Xbox용 GPU는 SM1.x, 또는 그 파생판이라고 볼 수 있다.

Shader Model 2.0

  • DirectX 9세대.
  • 마이크로소프트인텔이, 양자의 이점을 살려 만든 스탠다드 모델[요점 출전].
  • NVIDIA 확장인 2.0 a로 ATI 확장인 2.0 b가 존재한다.
  • 대응 GPU: Radeon는 9500-X850, GeForce는 FX 5 xxx 시리즈.

Shader Model 3.0

  • DirectX 9.0 c세대.
  • 이 버전보다, 시다프로그람장의 제한이 거의 않게 되었다.
  • 대응 GPU: Radeon는 X1000 시리즈, GeForce는 6, 7 시리즈.
  • 게임기인 Xbox 360, 플레이 스테이션 3용 GPU는, SM3. 0또는 그 파생판이라고 생각된다.

Shader Model 4. x

  • DirectX 10. x세대.
  • 통합형 시다아키테크체의 채용.덧붙여 GPGPU용 API의 CUDAOpenCL에 대응하는 것은 SM 4.0세대 이후이다.
  • 정수 레지스터(정수 버퍼) 용량의 대폭적인 확장.
  • 지오메트리시다의 추가.
  • 추가의 texture 명령등을 서포트하는 마이너 버전 4.1이 존재하는[37].
  • 대응 GPU: Radeon는 HD 2 xxx-HD 4 xxx 시리즈, GeForce는 8 xxx-GT 3 xx시리즈.
  • 게임기인 Wii U용 GPU는, SM4. 0또는 그 파생판이라고 생각되는[38].

Shader Model 5.0

  • DirectX 11. x세대.
  • 하르시다, 드메인시다, 고정 기능 텟세레이타가 포함되는 텟세레이션스테이지의 추가, 및 GPGPU 기능인 콘퓨트시다(DirectCompute)의 대응 등.
  • 대응 GPU: Radeon는 HD 5 xxx-HD 8 xxx, Rx 2 xx/3 xx시리즈, GeForce는 Fermi, Kepler, Maxwell 제 1세대.
  • 게임기인 Xbox One, PlayStation 4용 GPU는, SM5. 0또는 그 파생판이라고 생각되는[39].

Shader Model 6.0

  • DirectX 12세대.
  • 대응 GPU: Radeon는 GCN 제 2세대 이후, GeForce는 Maxwell 제 2세대 이후.

또한 OpenGL 대응 레벨에 관해서는, 넘버링이 DirectX의 버전이나 시다모델과 정확하게 대응하는 것은 아니고, 세세한 기능에 있어서의 차이가 다수 존재하지만, 세대로서는 대체로 아래와 같이 된다.

  • OpenGL 2.x - Direct3D 9
  • OpenGL 3.x - Direct3D 10
  • OpenGL 4.x - Direct3D 11

관련 항목

각주

[헬프]
  1. ^ Writing HLSL Shaders in Direct3D 9 (Windows)
  2. ^ 상위 레베르시다 언어- MSDN
  3. ^ HLSL - MSDN
  4. ^ Shader Models vs Shader Profiles - MSDN
  5. ^ [GDC 2016]시다모델 6.0이 온다! Microsoft가 말한 「다음 DirectX」- 4 Gamer.net
  6. ^ HLSL Shader Model 6.0 (Windows)
  7. ^ Direct3D 9로부터 Direct3D 10에의 이행시의 고려사항(Direct3D 10)
  8. ^동적 링크
  9. ^ .hlsli Extension - List of programs that can open .hlsli files
  10. ^ Direct3D 9로의 시다의 사용
  11. ^ HLSL, FXC, and D3DCompile - Games for Windows and the DirectX SDK - Site Home - MSDN Blogs
  12. ^ Unity - Unity Manual
  13. ^ ShaderEffect 클래스(System.Windows.Media.Effects)
  14. ^ ShaderEffect 클래스(System.Windows.Media.Effects)
  15. ^ WPF Version 4의 신기능
  16. ^ Effects (Windows)
  17. ^ 시다모델과 시다프로파일
  18. ^ Direct3D 10으로의 시다의 사용
  19. ^ 3 D그래픽스・마니악스(4) GPU와 시다 기술의 기초지식(4) | 마이 네비 뉴스
  20. ^【4 Gamer.net】[특집]ATI와 NVIDIA가 말하는 2005&2006년 ATI편
  21. ^ 텟세레이션(Direct3D 9)
  22. ^ 4 Gamer.net AMD, 코드네임 「R600」일 「ATI Radeon HD 2000」을 발표
  23. ^ [연재][니시카와 젠지의 3 D게임 엑스터시]「ATI Radeon HD 2000」시리즈의 GPU 아키텍쳐 철저 해설
  24. ^ Game Developers Conference(GDC) 2010 현지 리포트- GAME Watch
  25. ^ "PDC 2008:메인 스트림 어플리케이션을 위한 Direct3D10", Microsoft Corporation, 2008년 10월
  26. ^ D3D_FEATURE_LEVEL enumeration
  27. ^ Direct3D feature levels
  28. ^ 다운 레벨의 하드웨어상의 Direct3D 11
  29. ^ 10 Level9 레퍼런스
  30. ^ Shader Model 5.1
  31. ^ HLSL Shader Model 5.1 Features for Direct3D 12
  32. ^ Hardware Feature Levels
  33. ^ HLSL Shader Model 6.0 (Windows)
  34. ^ a b Shader Model 3.0, Ashu Rege, NVIDIA Developer Technology Group, 2004.
  35. ^ a b The Direct3D 10 System, David Blythe, Microsoft Corporation, 2006.
  36. ^ "Shader Model 3.0 Unleashed", Randima (Randy) Fernando, NVIDIA Developer Technology Group
  37. ^ 재질감 오브젝트(DirectX HLSL)
  38. ^ "니시카와 젠지의 3 D게임 팬을 위한 E3최신 하드웨어 강좌"(일본어). Impress Watch (2011년 6월 11일). 2011년 6월 11일 열람.
  39. ^"니시카와 젠지의 3 D게임 팬을 위한 「플레이 스테이션 4」그래픽스」강좌(후편)"(일본어). Impress Watch (2013년 3월 8일). 2014년 8월 29일 열람.

외부 링크

This article is taken from the Japanese Wikipedia High Level Shading Language

This article is distributed by cc-by-sa or GFDL license in accordance with the provisions of Wikipedia.

Wikipedia and Tranpedia does not guarantee the accuracy of this document. See our disclaimer for more information.

In addition, Tranpedia is simply not responsible for any show is only by translating the writings of foreign licenses that are compatible with CC-BY-SA license information.

0 개의 댓글:

댓글 쓰기