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


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

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

5 59

5 ответов:

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

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

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

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

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

В порядке конвейера визуализации -

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

Каждый результирующий примитив передается в

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

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

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

Эти пиксели затем помещаются в текущий буфер рисования (экран, backbuffer, render-to-texture, что угодно)

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

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

Теперь в DirectX 11 для тесселяции используются 3 новых шейдера. Новый полный порядок шейдеров: Вершина - > Корпус - >Тесселяция - > Домен - > Геометрия - > Пиксель. Я еще не использовал эти новые, так что не чувствую себя компетентным, чтобы описать их точно.

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

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

Специфика DirectX:

Шейдер:

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

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

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

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

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

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

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

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

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

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