Шейдерная технология

Материал из ПИЭ.Wiki

Перейти к: навигация, поиск

Шейдер (англ. Shader) — это программа для одной из ступеней графического конвейера, используемая в трёхмерной графике для определения окончательных параметров объекта или изображения. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затенение, смещение поверхности и эффекты пост-обработки.

Программируемые шейдеры гибки и эффективны. Сложные с виду поверхности могут быть визуализированы при помощи простых геометрических форм. Например, шейдеры могут быть использованы для рисования поверхности из трёхмерной керамической плитки на абсолютно плоской поверхности.

‎Использование шейдеров


Содержание

Классификация шейдеров

Шейдеры классифицируются следующим образом:

1. Вершинный шейдер(позволяет задать координату вершины многогранника в пространстве)

2. Геометрический шейдер(обрабатывает группу вершин);

3. Фрагментный или пиксельный шейдер( передает цвет, глубину)

Вершинный шейдер

Вершинный шейдер (vertex shader) — это программа, выполняемая процессором видеокарты и заменяющая этапы преобразования и освещения в фиксированном конвейере. (Это описание не является абсолютно верным, поскольку если вершинные шейдеры не поддерживаются аппаратно, они могут эмулироваться программно библиотекой времени выполнения)

Вершинный шейдер заменяет этапы преобразования и освещения в фиксированном конвейере

На вход вершинного шейдера поступает вершина в локальной системе координат и шейдер должен вернуть освещенную (окрашенную) вершину в однородном пространстве отсечения (homogeneous clip space). Отметим, что пространство, в которое матрица проекции преобразует вершины называется однородным пространством отсечения. Следовательно, для того, чтобы преобразовать вершину из локального пространства в однородное пространство отсечения, необходимо выполнить следующую последовательность преобразований: мировое преобразование, преобразование вида и преобразование проекции выполняемые соответственно с помощью мировой матрицы, матрицы вида и матрицы проекции.Для примитивов точек вершинные шейдеры могут использоваться также для управления размером. Поскольку вершинные шейдеры — это программы, которые вы пишете сами (на HLSL) открывается огромный круг возможностей, позволяющих реализовать разнообразные графические эффекты. Например, благодаря вершинным шейдерам можно применять любой алгоритм освещения, реализуемый в коде шейдера. Мы больше не ограничены набором фиксированных алгоритмов освещения, реализованных в Direct3D. Более того, возможность управлять местоположением вершин также может применяться во многих задачах, таких как моделирование одежды, управление размером точек для систем частиц, смешивание вершин и морфинг. Помимо этого, в программируемом конвейере структура данных вершин более гибкая и может содержать больше данных, чем в фиксированном конвейере. Вершинные шейдеры остаются достаточно новой возможностью и многие видеокарты не поддерживают их, особенно новые версии шейдеров, реализованные в DirectX 9. Чтобы проверить, какую версию шейдеров поддерживает установленная видеокарта, проверьте значение члена VertexShaderVersion структуры D3DCAPS9 воспользовавшись макросом D3DVS_VERSION.

Пример вершинного шейдера


Геометрический шейдер

Геометрический шейдер — шейдерные программы, выполняющиеся в конвейерной стадии геометрического шейдера. Геометрический шейдер работает с вершинными данными, но выполняется сразу для элемента геометрии. Его назначение - обрабатывать входящие примитивы (точки, линии, треугольники) и, если необходимо, генерировать новые. С внедрением геометрического шейдера программист получает возможность работать с группой элементов - например, всеми вершинами в обрабатываемом треугольнике или даже смежными вершинами, а также создавать множество новых примитивов - и всё это в течении исполнения одного шейдера в универсальном шейдерном процессоре.

Геометрический шейдер является неотъемлемой частью API DirectX 10 корпорации Microsoft. Данный API доступен только в операционной системе Windows Vista, поэтому все новые возможности G80 (и грядущего R600) можно использовать только в этой ОС. С выполнением геометрического шейдера связаны три параметра: тип входного примитива, тип выходного примитива и максимальное количество создаваемых вершин. Эти параметры являются свойствами программного объекта. Максимальное количество создаваемых вершин определяет, сколько вершин сможет генерировать геометрический шейдер за один вызов. Если в процессе исполнения шейдер создаст больше вершин, чем это установлено, они могут не попасть в конвейер.

Пример геометрического шейдера


Пиксельный шейдер

Пиксельный шейдер (или фрагментная программа в OpenGL) — программа для пиксельной шейдерной стадии конвейера. Пиксельный шейдер выполняется для каждого фрагмента растеризованной геометрии. Обычно пиксельный шейдер занимается закраской геометрического объекта — наложение текстур, освещение, и наложение разных текстурных эффектов, таких как отражение, преломление, туман.Пиксельные шейдеры также используются для пост-эффектов. Пиксельные шейдеры, именно результаты их применения сразу же бросаются в глаза,а также,заме­нить их нечем. Выполняет обработку цветовых данных, полученных при отрисовке треугольника. Оперирует с текстурами и цветом. Количество инструкций значительно ограничено, так, к примеру, в версии 1.4 оно не может быть больше 32. Появившиеся в NV20 пиксельные шейдеры уже могли не только делать мультитекстурирование, но и многое другое, хотя большинство игр, просто использовали традиционное мультитекстурирование на большинстве поверхностей, выполняя более сложные пиксельные шейдеры лишь на части поверхностей, для создания разнообразных спецэффектов (все знают, что вода до сих пор является наиболее частым примером использования пиксельных шейдеров в играх). Сейчас, после появления SM3 и поддерживающих их видеочипов, возможности пиксельных шейдеров доросли уже до того, чтобы с их помощью делать даже трассировку лучей (raytracing), пусть пока с некоторыми ограничениями. Пиксельные шейдеры - это рельеф­ные стены и естественное освещение (в том числе - динамическое и от многих источников света), рябь на воде и блики света на металлических и стеклянных по­верхностях, очень реалистично выглядя­щие криволинейные поверхности и раз­нообразные спецэффекты... Всего не пере­числить! Пожалуй, за самым наглядным и очевидным применением шейдеров (водная гладь)

С вычислительной точки зрения пик­сельный шейдер обычно задает модель расчета освещения отдельно взятой точки изображения Но, опять же, только освещением дело не ограничивается: с по­мощью пиксельных шейдеров можно так­же автоматически генерировать текстуры (стилизацию под дерево, или под воду, или блики на дне ручья, отбрасываемые рябью на его поверхности). Причем - тек­стуры, изменяющиеся во времени и не те­ряющие детализации даже при прибли­жении к ним. Или создавать оптические эффекты - дрожащий воздух, неровное стекло... вариантов много. Правда, пик­сельный шейдер не столько вычисляет, сколько изменяет некий предварительно вычисленный стандартными способами цвет, поэтому даже при отсутствии под­держки пиксельных шейдеров акселера­тор все-таки сможет что-то изобразить. Поскольку нагрузка на блоки закраски гораздо выше, а самих блоков, как пра­вило, больше, то ограничения на про­грамму здесь гораздо жестче, чем в слу­чае вершинных шейдеров. Помимо арифметических инструкций присутству­ют и специализированные «текстурные», осуществляющие выборки цвета и ариф­метические вычисления сданными текс­тур. Различия между версиями пиксельных шейдеров примерно того же поряд­ка, как между вершинными шейдерами. Главная особенность пиксельных шейдеров - поддержка чисел с плавающей точкой. В задачах ос­вещения это очень важно: динамическо­го диапазона стандартного 8-битного цвета для передачи всего богатства от­тенков может и не хватить. Ну а в пиксельные шейдеры третьей версии вклю­чена поддержка условных переходов для задания формул освещения функция почти бесполезная, но позволяющая в не­которых случаях оптимизировать произ­водительность шейдера (например, не проводить вычислений над заведомо бесперспективными пикселями).

Пример пиксельного шейдера
Пример пиксельного шейдера

Потребность в шейдерах

Давно назревшая потребность в новых инструментах разработки для интерактивной виртуальной реальности наконец-то удовлетворена недавно вышедшей библиотекой DirectX 9. Полугодом ранее компания nVidia создала интереснейший инструмент CG — специальный графический компилятор для шейдеров, поддерживающих DirectX 9, но при этом до сих пор так и не выпустила в массовое производство графические процессоры для этого API. И только фирма ATI вполне успешно и массово продает графические процессоры с поддержкой DirectX 9 по достаточно приемлемым ценам. Главным преимуществом в большей степени касается новых эффектов, которыми теперь можно совершенствовать графическую систему своего ПК. Еще одно следствие появления шейдеров — принципиальное изменение методики программирования. Постепенно разработчики будут вынуждены полностью перейти от программирования фиксированной функциональности ГП к полностью программной, базирующейся на шейдерах. Программируемые шейдеры гибки и эффективны,их использование возможно повторно. С появлением шейдеров очень расширяется возможность использования трехмерного пространства.

Просмотры
Инструменты

Besucherzahler russian mail order brides
счетчик посещений
Rambler's Top100
Лингафонные кабинеты  Интерактивные доски  Интерактивная приставка Mimio Teach