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



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



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

712   5  

5 ответов:

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

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

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

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

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

в порядке перевода-

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

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

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

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

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

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

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

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

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

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

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

DirectX Specific:

шейдеров:

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

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

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

Вершинных Шейдеров:

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

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

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

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

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

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

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

Comments

    Ничего не найдено.