Введение
Язык графического программирования
Язык затенения — это графический язык программирования, предназначенный для программирования эффектов затенения. Языки затенения обычно включают специальные типы данных, такие как "вектор", "матрица", "цвет" и "нормаль".
Офлайн-редеринг
Языки затенения, используемые в оффлайн-рендеринге, обычно приближены к естественному языку, чтобы не требовались специальные знания программирования. Офлайн-рендеринг стремится к созданию изображений наивысшего качества, ценой большего времени и вычислительных ресурсов, чем рендеринг в реальном времени.
Язык затенения VEX Гудини
Язык затенения Houdini VEX (Vector Expressions) (обычно сокращается как "VEX") тесно смоделирован по образцу RenderMan. Однако, благодаря интеграции в полноценный 3D-пакет, разработчик шейдеров может получать доступ к информации внутри шейдера, что обычно недоступно в процессе рендеринга. Различия между языками RSL и VEX в основном синтаксические, а также касаются названий некоторых shadeop-ов.
Язык затенения "желато"
Язык затенения Gelato, как и VEX в Houdini, тесно моделируется по образцу RenderMan. Различия между языком затенения Gelato и RSL в основном синтаксические — Gelato использует точки с запятой вместо запятых для разделения аргументов в определениях функций, а некоторые shadeops имеют другие названия и параметры.
Открытый язык затенения
Open Shading Language (OSL) был разработан Sony Pictures Imageworks для использования в своем рендерере Arnold. Он также используется в рендеринговом движке Cycles от Blender. Поверхностные и объемные шейдеры OSL определяют, как поверхности или объемы рассеивают свет, обеспечивая возможность важностной выборки; таким образом, он идеально подходит для физически корректных рендеров, поддерживающих трассировку лучей и глобальное освещение.
Рендаринг в реальном времени
Языки затенения для рендеринга в реальном времени сейчас получили широкое распространение. Они обеспечивают более высокую аппаратную абстракцию и более гибкую модель программирования, чем предыдущие подходы, в которых преобразования и уравнения затенения были жестко запрограммированы. Они позволяют добиться большего контроля и создавать более насыщенный контент с меньшими накладными расходами. Шейдеры, предназначенные для непосредственного выполнения на GPU, оказались полезны для высокопроизводительных общих вычислений благодаря своей модели потокового программирования, что привело к разработке вычислительных шейдеров, работающих на схожем оборудовании (см. также: GPGPU). Исторически на рынке доминировало несколько таких языков, которые описаны ниже.
Язык сборки ARB
Совет по рассмотрению архитектуры OpenGL разработал язык ассемблера ARB в 2002 году как стандартный набор низкоуровневых инструкций для программируемых графических процессоров. Языки шейдеров OpenGL высокого уровня часто компилируются в ассемблер ARB для загрузки и исполнения. В отличие от языков шейдеров высокого уровня, ассемблер ARB не поддерживает управление потоком выполнения или ветвление. Тем не менее, он продолжает использоваться, когда требуется кросс-платформенная совместимость графических процессоров.
Язык затенения OpenGL
Этот стандартизированный язык затенения, также известный как GLSL или glslang, предназначен для использования с OpenGL. Язык объединяет обработку вершин и фрагментов в едином наборе инструкций, обеспечивая возможность использования условных циклов и переходов. Языку GLSL предшествовал ассемблерный язык ARB.
Язык программирования Cg
Язык Cg, разработанный Nvidia, был создан для простой и эффективной интеграции в производственный процесс. Он не зависит от конкретных API и включает в себя множество бесплатных инструментов для улучшения управления ресурсами. Разработка Cg была прекращена в 2012 году, и сейчас язык считается устаревшим.
Язык сборки DirectX Shader
Язык ассемблера шейдеров в Direct3D 8 и 9 является основным языком программирования вершинных и пиксельных шейдеров в Shader Model 1.0/1.1, 2.0 и 3.0. Он представляет собой непосредственное отражение промежуточного байт-кода шейдера, который передается графическому драйверу для исполнения. Язык ассемблера шейдеров нельзя напрямую использовать для программирования унифицированной Shader Model 4.0, 4.1, 5.0 и 5.1, хотя он сохраняет свою функцию как представление промежуточного байт-кода в целях отладки.
Язык шейдера высокого уровня DirectX
Язык шейдерного программирования высокого уровня (HLSL) — это язык шейдеров, синтаксически близкий к языку C, предназначенный для DirectX 9 и более поздних версий, а также игровых консолей Xbox. Он имеет сходство с Cg от Nvidia, но поддерживается исключительно DirectX и Xbox. Программы на HLSL компилируются в байт-код, эквивалентный ассемблеру шейдеров DirectX. HLSL был представлен как необязательная альтернатива ассемблеру шейдеров в Direct3D 9, но стал обязательным в Direct3D 10 и более поздних версиях, где ассемблер шейдеров считается устаревшим.
Adobe Pixel Bender и Adobe Graphics Assembly Language (язык сборки графики)
Adobe Systems добавила Pixel Bender как часть API Adobe Flash 10. Pixel Bender мог обрабатывать только данные пикселей, но не 3D-вершин. Flash 11 представил совершенно новый 3D API под названием Stage3D, который использует собственный язык шейдеров Adobe Graphics Assembly Language (AGAL), обеспечивающий полную поддержку 3D-ускорения. Ускорение Pixel Bender с помощью графического процессора было удалено в Flash 11.8. AGAL — это язык шейдеров низкого уровня, но платформонезависимый, который можно компилировать, например, в GLSL.
Язык шейдера PlayStation
Sony объявила о PlayStation Shader Language (PSSL) – языке шейдеров, аналогичном Cg/HLSL, но разработанном специально для PlayStation 4. Утверждается, что PSSL обладает значительной совместимостью с HLSL-шейдерами для ПК, а также дополнительными возможностями, ориентированными на платформу PS4.
Язык металлического затенения
Apple создала низкоуровневый графический API под названием Metal, который работает на большинстве компьютеров Mac, выпущенных после 2012 года, iPhone начиная с модели 5S и iPad начиная с iPad Air. Metal имеет собственный язык шейдеров, называемый Metal Shading Language (MSL), который основан на C++14 и реализован с использованием clang и LLVM. MSL объединяет обработку вершин, фрагментов и вычислений.
Язык затенения WebGPU
WebGPU Shading Language (WGSL) — это язык шейдеров для WebGPU. Приложение, использующее WebGPU API, применяет WGSL для написания программ, называемых шейдерами, которые выполняются на GPU.