Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Язык затенения это графический язык программирования приспособлен для программирования шейдеров эффектов (характеризующий поверхности, объемы и объекты). Такие языковые формы обычно состоят из специальных типов данных , таких как «вектор», « матрица », «цвет» и « нормальный ». В связи с разнообразием целевых рынков трехмерной компьютерной графики были разработаны разные языки штриховки.

Автономный рендеринг [ править ]

Языки затенения, используемые при автономном рендеринге, обеспечивают максимальное качество изображения. Свойства материалов полностью абстрагированы, не требуются навыки программирования и знания оборудования. Такие шейдеры часто разрабатываются художниками, чтобы получить правильный «вид», так же, как наложение текстуры, освещение и другие аспекты их работы.

Обработка таких шейдеров требует много времени. Требуемая вычислительная мощность может быть дорогостоящей из-за их способности давать фотореалистичные результаты. В большинстве случаев производственный рендеринг выполняется на больших компьютерных кластерах .

RenderMan Shading Language [ править ]

Язык шейдинга RenderMan (часто называемый RSL или SL для краткости), который определен в спецификации интерфейса RenderMan [1], является наиболее распространенным языком шейдинга для рендеринга производственного качества. [ необходима цитата ] Это также один из первых когда-либо реализованных языков затенения.

В языке определены шесть основных типов шейдеров:

  • Шейдеры источников света вычисляют цвет света, излучаемого из точки источника света по направлению к точке на целевой поверхности.
  • Поверхностные шейдеры моделируют оптические свойства освещенного объекта. Они выводят окончательный цвет и положение точки с учетом падающего света и физических свойств объекта.
  • Шейдеры смещения управляют геометрией поверхности независимо от цвета.
  • Шейдеры деформации преобразуют все пространство геометрии. Только одна реализация RenderMan, средство визуализации AIR от SiTex Graphics, реализовало этот тип шейдера, поддерживая только одно линейное преобразование, применяемое к пространству (это было больше похоже на шейдер преобразования, если такой тип существовал).
  • Шейдеры объема управляют цветом света, проходящего через объем. Они создают такие эффекты, как туман .
  • Шейдеры тепловизора описывают преобразование цвета в конечные значения пикселей. Это очень похоже на фильтр изображения , однако шейдер имидж -сканера работает с данными до квантования . Такие данные имеют больший динамический диапазон и цветовое разрешение, чем могут отображаться на обычном устройстве вывода.

Houdini VEX Shading Language [ править ]

Язык затенения Houdini VEX (векторные выражения) (часто сокращенно «VEX») во многом смоделирован после RenderMan. Однако его интеграция в полный 3D-пакет означает, что средство записи шейдера может получить доступ к информации внутри шейдера, а эта функция обычно недоступна в контексте рендеринга. Языковые различия между RSL и VEX в основном синтаксические, в дополнение к различиям, касающимся названий нескольких имён шейдопов . [2]

Язык затенения Gelato [ править ]

Gelato «s [3] затенение язык, как VEX Гудини , тесно смоделирован RenderMan. Различия между языком затенения Gelato и RSL в основном синтаксические - Gelato использует точки с запятой вместо запятых для разделения аргументов в определениях функций, а некоторые оттенки имеют разные имена и параметры.

Open Shading Language [ править ]

Open Shading Language (OSL) был разработан Sony Pictures Imageworks для использования в ее модуле визуализации Arnold. Он также используется движком рендеринга Cycles Blender . Шейдеры поверхностей и объема OSL определяют, как поверхности или объемы рассеивают свет таким образом, чтобы можно было производить выборку по важности; таким образом, он хорошо подходит для физических средств визуализации, которые поддерживают трассировку лучей и глобальное освещение.

Рендеринг в реальном времени [ править ]

Языки шейдинга для рендеринга в реальном времени сейчас широко распространены. Они обеспечивают как более высокую аппаратную абстракцию, так и более гибкую модель программирования, чем предыдущие парадигмы, в которых были жестко запрограммированы уравнения преобразования и затенения. Это дает программисту больший контроль над процессом рендеринга и предоставляет более богатый контент с меньшими накладными расходами.

Шейдеры, предназначенные для выполнения непосредственно на графическом процессоре, стали полезными для общей обработки с высокой пропускной способностью благодаря своей модели потокового программирования ; это привело к разработке вычислительных шейдеров, работающих на аналогичном оборудовании (см. также: GPGPU ).

Исторически сложилось так, что лишь немногим из таких языков удавалось как утвердиться, так и сохранить сильные позиции на рынке; краткое описание этих языков следует ниже.

Ассемблер ARB [ править ]

Совет по обзору архитектуры OpenGL установил язык ассемблера ARB в 2002 году в качестве стандартного низкоуровневого набора команд для программируемых графических процессоров.

Языки затенения OpenGL высокого уровня часто компилируются в сборку ARB для загрузки и выполнения. В отличие от языков затенения высокого уровня, сборка ARB не поддерживает поток управления или ветвление. Однако он продолжает использоваться, когда требуется переносимость между графическими процессорами.

Язык затенения OpenGL [ править ]

Этот стандартизированный [4] язык затенения, также известный как GLSL или glslang , предназначен для использования с 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 [ править ]

Высокий уровень Shading Language (также называемый HLSL для краткости) шейдерный язык C-стиль для DirectX 9 и выше и Xbox игровых консолей. Он связан с Cg от Nvidia, но поддерживается только DirectX и Xbox. Программы HLSL компилируются в байт-код, эквивалентный языку ассемблера шейдеров DirectX.

HLSL был представлен как необязательная альтернатива языку ассемблера шейдеров в Direct3D 9, но стал требованием в Direct3d 10 и более поздних версиях, где язык ассемблера шейдеров является устаревшим.

Adobe Pixel Bender и язык сборки графики Adobe [ править ]

Adobe Systems добавила Pixel Bender как часть Adobe Flash 10 API. 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 [ необходима ссылка ] или GLSL .

Язык шейдеров PlayStation [ править ]

Sony анонсировала PSSL ( язык шейдеров PlayStation ) как язык шейдеров для конкретной платформы, аналогичный Cg / HLSL для PlayStation 4 . Говорят, что он в значительной степени совместим с шейдерами HLSL на ПК, но с дополнительными функциями для платформы PS4. [11]

Metal Shading Language [ править ]

Apple создала низкоуровневый графический API под названием Metal , который работает на большинстве компьютеров Mac, выпущенных с 2012 года, iPhone после 5S и iPad после iPad Air. Metal представляет свой собственный язык шейдинга под названием Metal Shading Language (MSL), который основан на C ++ 14 и реализован с использованием clang и LLVM . MSL объединяет обработку вершин, фрагментов и вычислений. [12]

Перевод [ править ]

По мере того, как становится доступным все больше и больше графических API, разработчики сталкиваются с проблемой переноса шейдеров с одного языка шейдера на другой. Используются несколько подходов: [13]

  • Ручное переключение с использованием C препроцессор (CPP) отчетности. Cg / HLSL, GLSL и MSL реализуют макросы CPP, поэтому можно объединить все различные операции в общий интерфейс. Это делают Source 2 от Valve и FXAA 3.11 от NVIDIA .
  • Переведите один язык на другой. Байт-код DirectX частично может быть преобразован в GLSL через HLSLcc, и существует несколько инструментов для преобразования GLSL в HLSL, таких как ANGLE и HLSL2GLSL .
  • Определите другой промежуточный язык. SPIR-V предназначен частично для этой цели. Его можно сгенерировать из HLSL или GLSL и декомпилировать в HLSL, GLSL или MSL. [14]

Ссылки [ править ]

  1. ^ Персонал (1986–2012). «RISpec» . Pixar . Pixar. Архивировано из оригинального 25 июля 2011 года . Проверено 9 июня 2012 года .
  2. ^ Персонал. «Гудини» . Боковой FX . Побочные эффекты Software Inc. Архивировано из оригинала 22 июля 2008 года . Проверено 9 июня 2012 года .
  3. ^ NVIDIA Corporation (2003–2008). «Дом» . Зона NVIDIA Gelato . Корпорация NVIDIA. Архивировано из оригинального 26 апреля 2006 года . Проверено 9 июня 2012 года .
  4. ^ Персонал (1997–2012). «Язык затенения OpenGL» . OpenGL . Группа Хронос . Проверено 9 июня 2012 года .
  5. ^ Персонал (2012). «Cg Toolkit» . Зона разработчиков NVIDIA . Корпорация NVIDIA . Проверено 9 июня 2012 года .
  6. ^ MSDN - DirectX и игры - Справочник по шейдерам Asm
  7. ^ Джозеф Лабрек (2011). Что нового в Adobe AIR 3 . O'Reilly Media, Inc. стр.  17 -26. ISBN 978-1-4493-1108-7.
  8. ^ Реми Арно (2011). «3D в веб-браузере». В Эрике Ленгьеле (ред.). Самоцветы игрового движка 2 . CRC Press. С. 207–212. ISBN 978-1-56881-437-7.
  9. ^ "Stage3D" . scratch.mit.edu . Проверено 5 августа 2014 .
  10. ^ Adobe Flash Player 11.8 - Ошибка 3591185: производительность шейдера Pixel Bender резко упала в FP11.8. Закрыто как "NeverFix". Архивировано 22 апреля 2014 г. на Wayback Machine.
  11. ^ Стенсон, Ричард; Хо, Крис. «Язык затенения PlayStation для PS4» . GDC Europe 2013 .
  12. ^ Руководство по языку Metal Shading
  13. ^ Пранцкявичюс, Арас. «Кросс-платформенные шейдеры в 2014 г. · Сайт Араса» .
  14. ^ "SPIR-V Toolchain" . LunarXchange .

Заметки [ править ]

  1. ^ Предыдущие языки затенения вершин (впроизвольномпорядке) для OpenGL включаютEXT_vertex_shader,NV_vertex_program, вышеупомянутуюARB_vertex_program,NV_vertex_program2иNV_vertex_program3.
  2. ^ Для фрагментного затенения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 на самом деле похожи, хотя последний обеспечивает гораздо более продвинутую функциональность по сравнению с другими.
  3. ^ Fx composer с домашней страницы NVIDIA,http://developer.nvidia.com/object/fx_composer_home.html
  4. Руди Кортес и Сати Рагхавачари : Руководство по языку затенения RenderMan , PTR технологии курса, 1 издание (27 декабря 2007 г.), ISBN 1-59863-286-8