Что такое вершинные и пиксельные шейдеры? - PullRequest
68 голосов
/ 07 мая 2009

Что такое вершинные и пиксельные шейдеры?

В чем разница между ними? Какой из них лучший?

Ответы [ 5 ]

62 голосов
/ 06 июня 2009

DirectX 10 и OpenGL 3 представили геометрический шейдер как третий тип.

В порядке рендеринга конвейера -

Vertex Shader - берет одну точку и может ее отрегулировать. Может использоваться для разработки сложных ** подсчетов освещения вершин в качестве установки для следующего этапа и / или деформации точек вокруг (колебание, масштабирование и т. Д.).

каждый полученный примитив передается в

Геометрический шейдер - берет каждый преобразованный примитив (треугольник и т. Д.) И может выполнять на нем вычисления. Это может добавить новые очки, убрать их или переместить их по мере необходимости. Это можно использовать для динамического добавления или удаления уровней детализации из одной базовой сетки, создания математических сеток на основе точки (для сложных систем частиц) и других аналогичных задач.

каждый получающийся примитив конвертируется в строку развертки, и каждый пиксель, который охватывает диапазон, проходит через

Пиксельный шейдер (Фрагментный шейдер в OpenGL) - вычисляет цвет пикселя на экране на основе того, что передает вершинный шейдер, связанных текстур и данных, добавленных пользователем. Это вообще не может прочитать текущий экран, просто определите, каким должен быть цвет / прозрачность этого пикселя для текущего примитива.

эти пиксели затем помещаются в текущий буфер рисования (экран, буфер, рендеринг в текстуру и т. Д.)

Все шейдеры могут получать доступ к глобальным данным, таким как матрица мировоззрения, и разработчик может передавать простые переменные, которые они могут использовать для освещения или в любых других целях. Шейдеры обрабатываются на языке, подобном ассемблеру, но современные версии DirectX и OpenGL имеют встроенные высокоуровневые компиляторы с-подобного языка, которые называются HLSL и GLSL соответственно. У NVidia также есть шейдерный компилятор под названием CG, который работает на обоих API.

[отредактировано, чтобы отразить неправильный порядок, который я имел прежде (Geometry-> Vertex-> Pixel), как отмечено в комментарии.]

В настоящее время в DirectX 11 используются 3 новых шейдера для тесселяции. Новый полный порядок шейдеров: Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel. Я еще не использовал эти новые, поэтому не чувствую себя достаточно квалифицированным, чтобы точно их описать.

44 голосов
/ 07 мая 2009

A Pixel Shader является компонентом графического процессора (GPU), который может быть запрограммирован для работы на основе пикселей и заботиться о таких вещах, как освещение и рельефное отображение.

A Vertex Shader также является компонентом графического процессора и также программируется с использованием определенного языка, похожего на ассемблер, например пиксельные шейдеры, но ориентируется на геометрию сцены и может выполнять такие вещи, как добавление краев шарнирных силуэтов к объектам и т. д.

Ни один из них не лучше другого, у каждого из них есть свое специфическое применение. Большинство современных графических карт, поддерживающих DirectX 9 или выше, включают эти возможности.

В Интернете существует множество ресурсов для лучшего понимания того, как использовать эти вещи. NVidia и ATI особенно полезны для документов по этой теме.

11 голосов
/ 07 мая 2009

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

Пиксельные (или, точнее, Фрагментные) шейдеры принимают значения, интерполированные от значений, обработанных в шейдере Vertex, и генерируют фрагменты пикселей. Большинство «крутых» вещей сделано в пиксельных шейдерах. Здесь происходят такие вещи, как поиск текстур и освещение.

5 голосов
/ 05 августа 2013

DirectX Specific:

Shader:

Набор программ, которые реализуют добавление графических функций к объектам, которые не определены в конвейере фиксированной визуализации. Из-за этого мы можем иметь свои собственные графические эффекты в соответствии с нашими потребностями - т.е. мы больше не ограничены предопределенными «фиксированными» операции.

HLSL: (Язык затенения высокого уровня):

HLSL - это язык программирования, подобный C ++, который используется для реализации шейдеров (Pixel Shaders / Vertex Shaders).

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

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

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

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

Примечание: Как вершинные, так и пиксельные шейдеры (программы) должны быть скомпилированы с использованием определенной версии компилятора перед использованием. Компиляция может быть выполнена так же, как вызов API с необходимыми параметрами, такими как имя файла, функция основного входа и т. Д.,

3 голосов
/ 07 мая 2009

С точки зрения разработки, пиксельный шейдер - это небольшая программа, которая работает с каждым пикселем индивидуально, аналогично вершинный шейдер работает с каждой вершиной индивидуально.

Их можно использовать для создания спецэффектов, теней, освещения и т. Д. *

Поскольку каждый пиксель / вершина работает по отдельности, эти шейдеры пригодны для высокопараллельной архитектуры современных графических процессоров.

...