Язык штриховки
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Язык шейдеров — это язык графического программирования, адаптированный для программирования шейдеров эффектов . Языки штриховки обычно состоят из специальных типов данных , таких как «вектор», « матрица », «цвет» и « нормальный ».
Офлайн-рендеринг [ править ]
Языки шейдеров, используемые при автономном рендеринге, как правило, близки к естественному языку , поэтому специальных знаний программирования не требуется. Офлайн-рендеринг направлен на создание изображений максимального качества за счет большего времени и вычислительных ресурсов, чем рендеринг в реальном времени.
Язык шейдеров RenderMan [ править ]
RenderMan Язык шейдеров [1] (RSL или SL, для краткости), определенный в спецификации интерфейса RenderMan , — это общий язык шейдеров для рендеринга производственного качества. Это также один из первых языков шейдеров, когда-либо реализованных.
Он определяет шесть основных типов шейдеров:
- Шейдеры источника света вычисляют цвет света, излучаемого из точки источника света в точку на целевой поверхности.
- Поверхностные шейдеры моделируют цвет и положение точек на поверхности объекта на основе падающего света и физических свойств объекта.
- Шейдеры смещения манипулируют геометрией поверхности независимо от цвета.
- Шейдеры деформации преобразуют все пространство. Только одна реализация RenderMan, средство визуализации AIR от SiTex Graphics, реализовала этот тип шейдера, поддерживая только одно линейное преобразование, применяемое к пространству.
- Шейдеры объема управляют цветом света, проходящего через объем. Они создают такие эффекты, как туман .
- Шейдеры Imager описывают преобразование цвета в окончательные значения пикселей. Это похоже на фильтр изображения , за исключением того, что шейдер изображения работает с данными до квантования . Такие данные имеют больший динамический диапазон и цветовое разрешение, чем могут быть отображены на обычном устройстве вывода.
Язык шейдеров VEX Houdini
Язык шейдеров Houdini VEX (Vector Expressions) (часто сокращенно «VEX») создан по образцу RenderMan. Однако его интеграция в полный 3D-пакет означает, что автор шейдеров может получить доступ к информации внутри шейдера — функция, которая обычно недоступна в контексте рендеринга. Языковые различия между RSL и VEX в основном синтаксические, в дополнение к различиям в названиях нескольких имен шейдеров . [2]
Gelato шейдинга Язык
Мороженое [3] язык шейдеров, такой как VEX Гудини , очень похож на RenderMan. Различия между языком шейдинга Gelato и RSL в основном синтаксические: Gelato использует точки с запятой вместо запятых для разделения аргументов в определениях функций, а некоторые шейдеры имеют разные имена и параметры.
Открытый язык шейдинга [ править ]
Open Shading Language (OSL) был разработан Sony Pictures Imageworks для использования в ее Arnold Renderer. Он также используется Blender движком рендеринга Cycles . Шейдеры поверхностей и объемов OSL определяют, как поверхности или объемы рассеивают свет таким образом, чтобы обеспечить выборку важности; таким образом, он хорошо подходит для физических средств визуализации , поддерживающих трассировку лучей и глобальное освещение.
Рендеринг в реальном времени [ править ]
Языки шейдеров для рендеринга в реальном времени сейчас широко распространены. Они обеспечивают как более высокую аппаратную абстракцию, так и более гибкую модель программирования, чем предыдущие парадигмы, в которых жестко закодированы уравнения преобразования и затенения. Они обеспечивают больший контроль и более богатый контент с меньшими накладными расходами.
Шейдеры, предназначенные для выполнения непосредственно на графическом процессоре, стали полезны для общей обработки с высокой пропускной способностью благодаря своей потокового программирования модели ; это привело к разработке вычислительных шейдеров , работающих на аналогичном оборудовании (см. также: GPGPU ).
Исторически на рынке доминировали несколько таких языков; они описаны ниже.
Язык ассемблера ARB [ править ]
Совет по обзору архитектуры OpenGL установил язык ассемблера ARB в 2002 году как стандартный набор команд низкого уровня для программируемых графических процессоров.
Языки шейдеров высокого уровня OpenGL часто компилируются в сборку ARB для загрузки и выполнения. В отличие от языков шейдеров высокого уровня, сборка ARB не поддерживает поток управления или ветвление. Однако его продолжают использовать, когда требуется переносимость между графическими процессорами.
Язык шейдеров OpenGL [ править ]
Также известный как GLSL или glslang , это стандартизированный [4] язык шейдеров предназначен для использования с OpenGL .
Язык объединяет вершин и обработку фрагментов в одном наборе команд, позволяя выполнять условные циклы и переходы . GLSL предшествовал язык ассемблера ARB .
Язык программирования Cg [ править ]
Язык Cg , разработанный Nvidia . [5] был разработан для простой и эффективной интеграции производственного конвейера. Он отличается независимостью от API и поставляется со множеством бесплатных инструментов. [1] улучшить управление активами. Разработка Cg была остановлена в 2012 году, и сейчас этот язык устарел.
ассемблера DirectX Язык шейдеров
Язык ассемблера шейдеров в Direct3D 8 и 9 является основным языком программирования вершинных и пиксельных шейдеров в Shader Model 1.0/1.1, 2.0 и 3.0. Это прямое представление байт-кода промежуточного шейдера, который передается графическому драйверу для выполнения.
Язык ассемблера шейдеров нельзя напрямую использовать для программирования унифицированной модели шейдеров 4.0, 4.1, 5.0 и 5.1, хотя он сохраняет свою функцию представления промежуточного байт-кода для целей отладки. [6]
высокого DirectX уровня Язык шейдеров
Язык шейдеров высокого уровня (HLSL) — это язык шейдеров в стиле C для DirectX 9 и выше, а также игровых консолей Xbox. Он связан с Cg от Nvidia, но поддерживается только DirectX и Xbox. Программы HLSL компилируются в байт-код, эквивалентный ассемблеру шейдеров DirectX.
HLSL был представлен как дополнительная альтернатива языку ассемблера шейдеров в Direct3D 9, но стал обязательным в Direct3d 10 и более поздних версиях, где язык ассемблера шейдеров устарел.
Adobe Pixel Bender и язык Adobe ассемблера Graphics
Adobe Systems добавила Pixel Bender как часть API Adobe Flash 10. Pixel Bender мог обрабатывать только пиксели, но не данные 3D-вершин. Flash 11 представил совершенно новый 3D API под названием Stage3D , который использует собственный язык шейдеров под названием Adobe Graphics Assembly Language (AGAL), который предлагает полную поддержку 3D-ускорения. [7] [8] Ускорение графического процессора для Pixel Bender было удалено в Flash 11.8. [9] [10]
AGAL — это низкоуровневый, но независимый от платформы язык шейдеров, который можно скомпилировать, например, в ассемблерный язык ARB. [ нужна ссылка ] или ГЛСЛ .
Язык шейдеров PlayStation [ править ]
Sony анонсировала язык шейдеров PlayStation (PSSL) как язык шейдеров, аналогичный Cg/HLSL, но специфичный для PlayStation 4 . Говорят, что PSSL в значительной степени совместим с шейдерами HLSL на ПК, но с дополнительными функциями для платформы PS4. [11]
Язык шейдинга металла [ править ]
Apple создала низкоуровневый графический API под названием Metal , который работает на большинстве компьютеров Mac, выпущенных с 2012 года, iPhone, начиная с 5S, и iPad, начиная с iPad Air. У Metal есть собственный язык шейдеров под названием Metal Shading Language (MSL), который основан на C++14 и реализован с использованием clang и LLVM . MSL объединяет обработку вершин, фрагментов и вычислений. [12]
Язык шейдеров WebGPU [ править ]
Язык шейдеров WebGPU (WGSL) — это язык шейдеров для WebGPU . То есть приложение, использующее API WebGPU, использует WGSL для выражения программ, известных как шейдеры, которые выполняются на графическом процессоре. [13]
Перевод [ править ]
Для переноса шейдеров с одного языка шейдеров на другой используется несколько подходов: [14]
- Определите общий интерфейс. Например, Cg/HLSL, GLSL и MSL реализуют макросы препроцессора C , поэтому можно объединить все различные операции в общий интерфейс. 3.11 от NVIDIA Source 2 от Valve и FXAA делают это.
- Перевести один язык на другой. Например, байт-код DirectX можно частично преобразовать в GLSL через HLSLcc, и существует несколько инструментов для преобразования GLSL в HLSL, таких как ANGLE и HLSL2GLSL .
- Определите промежуточный язык. SPIR-V частично предназначен для этой цели. Его можно сгенерировать из HLSL или GLSL и декомпилировать в HLSL, GLSL или MSL. [15]
Ссылки [ править ]
- ^ Персонал (1986–2012). «РИСпец» . Пиксар . Архивировано из оригинала 25 июля 2011 года . Проверено 9 июня 2012 года .
- ^ Персонал. «Гудини» . Боковые эффекты . Side Effects Software Inc. Архивировано из оригинала 22 июля 2008 года . Проверено 9 июня 2012 года .
- ^ Корпорация NVIDIA (2003–2008). "Дом" . Зона NVIDIA Gelato . Корпорация NVIDIA. Архивировано из оригинала 26 апреля 2006 года . Проверено 9 июня 2012 года .
- ^ Персонал (1997–2012 гг.). «Язык шейдеров OpenGL» . OpenGL . Группа «Хронос» . Проверено 9 июня 2012 года .
- ^ Персонал (2012). «Инструментарий Cg» . Зона разработчиков NVIDIA . Корпорация NVIDIA . Проверено 9 июня 2012 года .
- ^ «Справочник по шейдерам Asm — приложения Win32» . Learn.microsoft.com . 10 декабря 2019 г.
- ^ Жозеф Лабрек (2011). Что нового в Adobe AIR 3 . O'Reilly Media, Inc., стр. 17–26 . ISBN 978-1-4493-1108-7 .
- ^ Реми Арно (2011). «3D в веб-браузере». В Эрике Лендьеле (ред.). Игровой движок Gems 2 . ЦРК Пресс. стр. 207–212. ISBN 978-1-56881-437-7 .
- ^ «Стейдж3Д» . Scratch.mit.edu . Проверено 5 августа 2014 г.
- ^ «Adobe Flash Player 11.8 — Ошибка 3591185: производительность шейдера Pixel Bender резко снизилась в FP11.8. Закрыто как «NeverFix» » . Архивировано из оригинала 22 апреля 2014 года.
- ^ Стенсон, Ричард; Эй, Крис. «Язык шейдеров PlayStation для PS4» . КРИ Европа 2013 .
- ^ Руководство по языку Metal Shading
- ^ «Язык шейдеров WebGPU» .
- ^ Пранцявичюс, Арас (28 марта 2014 г.). «Кроссплатформенные шейдеры в 2014 году · Веб-сайт Араса» .
- ^ «Связка инструментов СПИР-В» . ЛунныйXchange .
Примечания [ править ]
- ^ Предыдущие языки затенения вершин (в произвольном порядке) для OpenGL включают EXT_vertex_shader , NV_vertex_program , вышеупомянутые ARB_vertex_program , NV_vertex_program2 и NV_vertex_program3 .
- ^ Для фрагментарного затенения nvparse , возможно, является первым языком шейдеров с абстракцией высокого уровня, основанным на NV_register_combiners , NV_register_combiners2 для пиксельной математики и NV_texture_shader , NV_texture_shader2 и NV_texture_shader3 для поиска текстур. ATI_fragment_shader даже не предоставлял средства синтаксического анализа, ориентированного на строки (хотя позже они были добавлены ATI_text_fragment_shader ). ARB_fragment_program оказалась очень успешной. NV_fragment_program и NV_fragment_program2 на самом деле похожи, хотя последняя обеспечивает гораздо более расширенную функциональность по сравнению с другими.
- ^ Композитор Fx с домашней страницы NVIDIA, http://developer.nvidia.com/object/fx_composer_home.html.
- Руди Кортес и Сэти Рагхавачари : Руководство по языку шейдинга RenderMan , PTR по технологии курса, 1 издание (27 декабря 2007 г.), ISBN 1-59863-286-8