Язык штриховки
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Язык шейдеров — это язык графического программирования, адаптированный для программирования шейдеров эффектов . Языки штриховки обычно состоят из специальных типов данных , таких как «вектор», « матрица », «цвет» и « нормальный ».
Офлайн-рендеринг
[ редактировать ]Языки шейдеров, используемые при автономном рендеринге, как правило, близки к естественному языку , поэтому специальных знаний программирования не требуется. Офлайн-рендеринг направлен на создание изображений максимального качества за счет большего времени и вычислительных ресурсов, чем рендеринг в реальном времени.
Язык шейдеров RenderMan
[ редактировать ]RenderMan Язык шейдеров [ 1 ] (RSL или сокращенно SL), определенный в спецификации интерфейса RenderMan , — это общий язык шейдеров для рендеринга производственного качества. Это также один из первых когда-либо реализованных языков шейдеров.
Он определяет шесть основных типов шейдеров:
- Шейдеры источника света вычисляют цвет света, излучаемого из точки источника света в точку на целевой поверхности.
- Поверхностные шейдеры моделируют цвет и положение точек на поверхности объекта на основе падающего света и физических свойств объекта.
- Шейдеры смещения манипулируют геометрией поверхности независимо от цвета.
- Шейдеры деформации преобразуют все пространство. Только одна реализация RenderMan, средство визуализации AIR от SiTex Graphics, реализовала этот тип шейдера, поддерживая только одно линейное преобразование, применяемое к пространству.
- Шейдеры объема управляют цветом света, проходящего через объем. Они создают такие эффекты, как туман .
- Шейдеры Imager описывают преобразование цвета в окончательные значения пикселей. Это похоже на фильтр изображения , за исключением того, что шейдер изображения работает с данными до квантования . Такие данные имеют больший динамический диапазон и цветовое разрешение, чем могут быть отображены на обычном устройстве вывода.
Язык шейдеров Houdini VEX
[ редактировать ]Язык шейдеров Houdini VEX (Vector Expressions) (часто сокращенно «VEX») создан по образцу RenderMan. Однако его интеграция в полный 3D-пакет означает, что автор шейдеров может получить доступ к информации внутри шейдера — функция, которая обычно недоступна в контексте рендеринга. Языковые различия между RSL и VEX в основном синтаксические, в дополнение к различиям в названиях нескольких имен шейдеров . [ 2 ]
Язык шейдеров мороженого
[ редактировать ]Мороженое [ 3 ] язык шейдеров, такой как VEX Гудини , очень похож на RenderMan. Различия между языком шейдинга Gelato и RSL в основном синтаксические: Gelato использует точки с запятой вместо запятых для разделения аргументов в определениях функций, а некоторые шейдеры имеют разные имена и параметры.
Открытый язык шейдеров
[ редактировать ]Open Shading Language (OSL) был разработан Sony Pictures Imageworks для использования в Autodesk Arnold Renderer. Он также используется Blender движком рендеринга Cycles . Шейдеры поверхностей и объемов OSL определяют, как поверхности или объемы рассеивают свет таким образом, чтобы обеспечить выборку важности; таким образом, он хорошо подходит для физических средств визуализации , поддерживающих трассировку лучей и глобальное освещение .
Рендеринг в реальном времени
[ редактировать ]Языки шейдеров для рендеринга в реальном времени сейчас широко распространены. Они обеспечивают как более высокую аппаратную абстракцию, так и более гибкую модель программирования, чем предыдущие парадигмы, в которых жестко закодированы уравнения преобразования и затенения. Они обеспечивают больший контроль и более богатый контент с меньшими накладными расходами.
Шейдеры, предназначенные для выполнения непосредственно на графическом процессоре, стали полезны для общей обработки с высокой пропускной способностью благодаря своей потокового программирования модели ; это привело к разработке вычислительных шейдеров , работающих на аналогичном оборудовании (см. также: GPGPU ).
Исторически на рынке доминировали несколько таких языков; они описаны ниже.
язык ассемблера АРБ
[ редактировать ]Совет по обзору архитектуры 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