음영 언어
Shading language음영 언어는 셰이더 효과(표면, 볼륨 및 객체 특성 지정) 프로그래밍에 적합한 그래픽 프로그래밍 언어입니다.이러한 언어 형식은 보통 "벡터", "매트릭스", "색상", "정상"과 같은 특수 데이터 유형으로 구성됩니다.3D 컴퓨터 그래픽의 다양한 타깃 시장 때문에 다양한 음영 언어가 개발되었습니다.
오프라인 렌더링
오프라인 렌더링에 사용되는 음영 언어는 최대 이미지 품질을 생성합니다.재료 특성이 완전히 추상화되어 프로그래밍 기술이 거의 없으며 하드웨어 지식이 필요하지 않습니다.이러한 종류의 셰이더는 텍스처 맵핑, 조명 및 작품의 다른 측면과 마찬가지로 예술가들이 적절한 "모양"을 얻기 위해 개발되는 경우가 많습니다.
이러한 셰이더를 처리하려면 시간이 걸립니다.사실적인 결과를 낼 수 있기 때문에 필요한 계산 능력이 비쌀 수 있습니다.대부분의 경우 프로덕션 렌더링은 대규모 컴퓨터 클러스터에서 실행됩니다.
RenderMan 음영 언어
RenderMan 인터페이스 사양에[1] 정의된 RenderMan Shading Language(RSL 또는 SL이라고도 함)는 프로덕션 품질의 [citation needed]렌더링을 위한 가장 일반적인 음영 언어입니다.이것은 또한 최초로 구현된 음영 언어 중 하나입니다.
이 언어에는 6가지 주요 셰이더 유형이 정의되어 있습니다.
- 광원 셰이더는 광원상의 한 지점에서 대상 표면의 한 지점을 향해 방출되는 빛의 색상을 계산합니다.
- 표면 셰이더는 조명 대상물의 광학 특성을 모델링합니다.그들은 들어오는 빛과 물체의 물리적 특성을 고려하여 점의 최종 색상과 위치를 출력합니다.
- 변위 셰이더는 색상과 관계없이 지표면 형상을 조작합니다.
- 변형 셰이더는 지오메트리의 전체 공간을 변환합니다.이 셰이더 타입은 SiTex Graphics의 AIR 렌더러라는1개의 RenderMan 실장만이 실장되어 공간에 적용되는1개의 선형 변환만을 서포트하고 있습니다(이는 트랜스포메이션 셰이더에 가까운 타입이었습니다).
- 볼륨 셰이더는 볼륨을 통과할 때 빛의 색상을 조정합니다.그것들은 안개와 같은 효과를 만들어냅니다.
- 이미저 셰이더는 최종 픽셀 값으로의 색상 변환을 설명합니다.이는 이미지 필터와 비슷하지만 이미저 셰이더는 양자화 전 데이터에 대해 작동합니다.이러한 데이터는 일반적인 출력 장치에 표시할 수 있는 것보다 더 큰 동적 범위와 색 해상도를 가집니다.
후디니 VEX 셰이딩 언어
Houdini VEX(벡터 표현) 음영 언어(흔히 "VEX"로 줄임말)는 RenderMan을 본떠서 만든 것입니다.그러나 완전한 3D 패키지로 통합되기 때문에 셰이더 라이터는 일반적으로 렌더링 컨텍스트에서 사용할 수 없는 기능인 셰이더 내부의 정보에 액세스할 수 있습니다.RSL과 VEX의 언어 차이는 주로 통사적이며, 여러 셰도우프 [2]이름의 차이도 있습니다.
젤라토 셰이딩 언어
Houdini의 VEX처럼 Gelato의[3] 음영 언어는 RenderMan을 본떠서 만든 것입니다.Gelato Shading Language와 RSL의 차이는 주로 구문론입니다.Gelato는 콤마 대신 세미콜론을 사용하여 함수 정의의 인수를 구분합니다.또한 일부 shading op에는 다른 이름과 파라미터가 있습니다.
열린 음영 언어
Open Shading Language(OSL)는 Sony Pictures Imageworks가 Arnold Renderer에 사용하기 위해 개발한 것입니다.또한 Blender의 Cycles 렌더링 엔진에서도 사용됩니다.OSL의 서페이스 셰이더와 볼륨 셰이더는 중요도 샘플링을 가능하게 하는 방법으로 표면 또는 볼륨이 빛을 산란하는 방법을 정의합니다.따라서 레이 트레이스 및 글로벌 조명을 지원하는 물리 기반 렌더러에 매우 적합합니다.
실시간 렌더링
실시간 렌더링을 위한 음영 언어가 널리 보급되어 있습니다.변환 및 음영 방정식을 하드 코드화한 이전의 패러다임보다 더 높은 하드웨어 추상화와 더 유연한 프로그래밍 모델을 제공합니다.이를 통해 프로그래머는 렌더링 프로세스를 보다 효과적으로 제어할 수 있으며 보다 적은 오버헤드로 보다 풍부한 콘텐츠를 제공할 수 있습니다.
GPU에서 직접 실행되도록 설계된 셰이더는 스트림 프로그래밍 모델 때문에 높은 스루풋의 일반 처리에 유용하게 쓰이게 되었습니다.그 결과, 유사한 하드웨어에서 실행되는 컴퓨팅 셰이더가 개발되었습니다(GPGPU도 참조).
역사적으로, 그러한 언어들은 그들 자신을 확립하고 강력한 시장 지위를 유지하는 데 성공했을 뿐이며, 그 언어들에 대한 간략한 설명은 다음과 같다.
ARB 어셈블리 언어
OpenGL Architecture Review Board는 프로그래밍 가능한 그래픽 프로세서의 표준 로우 레벨 명령 세트로 2002년에 ARB 어셈블리 언어를 확립했습니다.
고급 OpenGL 음영 언어는 로드 및 실행을 위해 종종 ARB 어셈블리로 컴파일됩니다.고급 음영 언어와 달리 ARB 어셈블리는 제어 흐름 또는 분기를 지원하지 않습니다.그러나 GPU 간 이동성이 필요한 경우에는 계속 사용됩니다.
OpenGL 셰이딩 언어
GLSL 또는 glslang이라고도 하는 이 표준화된[4] 음영 언어는 OpenGL과 함께 사용됩니다.
이 언어는 정점과 프래그먼트 처리를 단일 명령 집합으로 통합하여 조건부 루프와 (더 일반적으로) 분기를 허용합니다.지금까지 GLSL에는 ARB 어셈블리 언어가 선행되어 왔습니다.
CG 프로그래밍 언어
NVIDIA가 [5]개발한 프로그래밍 언어 Cg는 생산 파이프라인 통합을 쉽고 효율적으로 수행할 수 있도록 설계되었습니다.이 언어에는 API에 의존하지 않고 자산 관리를 개선하기 위한 다양한[1] 무료 툴이 포함되어 있습니다.Cg의 개발은 2012년에 중단되어 현재는 폐지되었습니다.
DirectX 셰이더 어셈블리 언어
Direct3D 8 및 9의 셰이더 어셈블리 언어는 셰이더 모델 1.0/1.1, 2.0 및 3.0의 정점 및 픽셀 셰이더의 주요 프로그래밍 언어입니다.셰이더 어셈블리 언어는 실행을 위해 그래픽 드라이버로 전달되는 중간 셰이더 바이트 코드를 직접 나타냅니다.
셰이더 어셈블리 언어를 직접 사용하여 Unified Shader Model 4.0, 4.1, 5.0 및 5.1을 프로그래밍할 수 없습니다.다만,[6] 디버깅을 위해서 중간 바이트 코드의 표시로서의 기능은 유지됩니다.
DirectX 고급 셰이더 언어
하이 레벨 쉐이딩 언어(일명 HLSL)는 DirectX 9 이상 및 Xbox 게임 콘솔용 C 스타일 셰이더 언어입니다.Nvidia의 Cg와 관련이 있지만 DirectX와 Xbox에서만 지원됩니다.HLSL 프로그램은 DirectX 셰이더 어셈블리 언어와 동등한 바이트 코드로 컴파일됩니다.
HLSL은 Direct3D 9에서 셰이더 어셈블리 언어 대신 옵션으로 도입되었지만 Direct3d 10 이후에는 셰이더 어셈블리 언어가 사용되지 않습니다.
Adobe Pixel Bender 및 Adobe 그래픽스 어셈블리 언어
Adobe Systems는 Adobe Flash 10 API의 일부로 Pixel Bender를 추가했습니다.픽셀 벤더는 픽셀만 처리할 수 있고 3D 버텍스 데이터는 처리할 수 없습니다.Flash 11은 완전한 [7][8]3D 가속 지원을 제공하는 Adobe Graphics Assembly Language(AGAL)라는 자체 음영 언어를 사용하는 Stage3D라는 완전히 새로운 3D API를 도입했습니다.픽셀 벤더용 GPU 액셀러레이션은 Flash 11.[9][10]8에서 삭제되었습니다.
AGAL은 낮은 레벨이지만 플랫폼에 의존하지 않는 음영 언어이며, 예를 들어 ARB 어셈블리[citation needed] 언어 또는 GLSL로 컴파일할 수 있습니다.
PlayStation 셰이더 언어
소니는 PlayStation 4의 Cg/HLSL과 유사한 플랫폼 고유의 음영 언어로 PSSL(PlayStation Shader Language)을 발표했습니다.PC의 HLSL 셰이더와 대체로 호환성이 있다고 알려져 있습니다만, PS4 [11]플랫폼에는 기능이 추가되어 있습니다.
금속 셰이딩 언어
애플은 2012년 이후 만들어진 대부분의 맥, 5S 이후 아이폰, 아이패드 에어 이후 아이패드에서 실행되는 메탈이라는 낮은 수준의 그래픽 API를 만들었다.Metal은 C++14에 기반하고 Clang과 LLVM을 사용하여 구현되는 자체 음영 언어인 Metal Shading Language(MSL)를 도입했습니다.MSL은 정점, 프래그먼트 및 계산 [12]처리를 통합합니다.
WebGPU 셰이딩 언어
WGSL(WebGPU Shading Language)은 WebGPU의 셰이더 언어입니다.즉, WebGPU API를 사용하는 응용 프로그램은 WGSL을 사용하여 [13]GPU에서 실행되는 셰이더라고 하는 프로그램을 표현합니다.
번역.
점점 더 많은 그래픽 API를 사용할 수 있게 됨에 따라 개발자들은 셰이더들을 하나의 음영 언어에서 다른 언어로 이식해야 하는 문제에 직면하게 되었습니다.몇 가지 접근법이 사용됩니다.[14]
- C Pre-Processor(CPP; 프리프로세서) 문을 사용한 수동 스위칭.Cg/HLSL, GLSL 및 MSL은 모두 CPP 매크로를 구현하기 때문에 모든 다른 조작을 공통 인터페이스로 랩할 수 있습니다.밸브의 Source 2와 NVIDIA의 FXAA 3.11이 이를 실현합니다.
- 한 언어를 다른 언어로 번역합니다.DirectX 바이트 코드는 부분적으로 HLSLcc를 통해 GLSL로 변환할 수 있으며, ANGLE이나 HLSL2GLSL 등의 GLSL을 HLSL로 변환하는 툴이 몇 가지 있습니다.
- 다른 중간 언어를 정의합니다.SPIR-V는 부분적으로 이 목적을 위해 설계되어 있습니다.HLSL 또는 GLSL에서 생성되어 HLSL, GLSL 또는 MSL로 [15]디컴파일할 수 있습니다.
레퍼런스
- ^ Staff (1986–2012). "The RISpec". Pixar. Pixar. Archived from the original on 25 July 2011. Retrieved 9 June 2012.
- ^ Staff. "Houdini". Side FX. Side Effects Software Inc. Archived from the original on 22 July 2008. Retrieved 9 June 2012.
- ^ NVIDIA Corporation (2003–2008). "Home". NVIDIA Gelato Zone. NVIDIA Corporation. Archived from the original on April 26, 2006. Retrieved 9 June 2012.
- ^ Staff (1997–2012). "OpenGL Shading Language". OpenGL. The Khronos Group. Retrieved 9 June 2012.
- ^ Staff (2012). "Cg Toolkit". NVIDIA Developer Zone. NVIDIA Corporation. Retrieved 9 June 2012.
- ^ MSDN - DirectX 및 게임 - ASM 셰이더 레퍼런스
- ^ Joseph Labrecque (2011). What's New in Adobe AIR 3. O'Reilly Media, Inc. pp. 17–26. ISBN 978-1-4493-1108-7.
- ^ Remi Arnaud (2011). "3D in a Web Browser". In Eric Lengyel (ed.). Game Engine Gems 2. CRC Press. pp. 207–212. ISBN 978-1-56881-437-7.
- ^ "Stage3D". scratch.mit.edu. Retrieved 2014-08-05.
- ^ Adobe Flash Player 11.8 - Bug 3591185 : FP11.8로 픽셀 벤더 셰이더의 퍼포먼스가 대폭 저하. 2014-04-22 Wayback Machine에서 "NeverFix" 아카이브 완료
- ^ Stenson, Richard; Ho, Chris. "PlayStation Shading Language for PS4". GDC Europe 2013.
- ^ 메탈 셰이딩 언어 가이드
- ^ https://www.w3.org/TR/WGSL
- ^ Pranckevičius, Aras (28 March 2014). "Cross Platform Shaders in 2014 · Aras' website".
- ^ "SPIR-V Toolchain". LunarXchange.
메모들
- ^ OpenGL의 이전 정점 쉐이딩 언어에는 EXT_vertex_shader, NV_vertex_program, 전술한 ARB_vertex_program, NV_vertex_program2, NV_vertex_program3 등이 있습니다.
- ^ fragment shading nvparse는 NV_register_combiners, NV_texture_shader, NV_texture_shader2, 및 NV_texture_shader3에 근거한 고도의 추상화를 특징으로 하는 최초의 shading 언어일 가능성이 있습니다.ATI_fragment_shader는 문자열 지향 구문 분석 기능조차 제공하지 않았습니다(나중에 ATI_text_fragment_shader에 의해 추가되었습니다).ARB_fragment_program은 매우 성공적이었습니다.NV_fragment_program과 NV_fragment_program2는 실제로 유사하지만, NV_fragment_program2는 다른 프로그램보다 훨씬 고급 기능을 제공합니다.
- ^ NVIDIA 홈페이지 http://developer.nvidia.com/object/fx_composer_home.html의 Fx Composer
- 루디 코르테스와 새티 라그하바차리:The RenderMan Shading Language Guide, Course Technology PTR, 1판(2007년 12월 27일), ISBN 1-59863-286-8