Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

DirectX 10 и OpenGL 3 представили Geometry Shader как третий тип.

При рендеринге заказа трубопровода -

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

Спецификация DirectX:

Shader:

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

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

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

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

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

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

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

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