Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Специально для DirectX:

Шейдер:

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

ХЛСЛ:(Язык шейдеров высокого уровня):

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top