Что такое вершинные и пиксельные шейдеры?
Что такое вершинные и пиксельные шейдеры?
в чем разница между ними? Какой из них лучший?
5 ответов
A Пиксельный Шейдер - это компонент GPU (графический процессор), который может быть запрограммирован для работы на пиксельной основе и заботиться о таких вещах, как освещение и отображение ударов.
A Вершинный Шейдер также является компонентом GPU и также программируется с использованием определенного сборочного языка, такого как пиксельные шейдеры, но ориентированы на геометрию сцены и могут делать такие вещи, как добавление мультяшных силуэтных краев к объектам и т. д.
ни лучше каждый из них имеет свое конкретное применение. Большинство современных графических карт, поддерживающих DirectX 9 или лучше включить эти функции.
есть несколько ресурсов в интернете для того, чтобы лучше понять, как использовать эти вещи. NVidia и ATI особенно хорошие ресурсы для документов по этой теме.
DirectX 10 и OpenGL 3 представили шейдер геометрии в качестве третьего типа.
в порядке перевода-
Вершинный Шейдер - принимает одноточечный и может отрегулировать его. Может использоваться для разработки сложных * * vertex lighting calcs в качестве настройки для следующего этапа и / или деформации точек вокруг (колебание, масштаб и т. д.).
каждый результирующий примитив передается в
Геометрия Шейдеров - принимает каждый преобразованный примитивный (треугольник и т. д.) и может выполнять вычисления на нем. Это может добавить новые точки, забрать их или переместить их по мере необходимости. Это может использоваться для динамического добавления или удаления уровней детализации из одной базовой сетки, создания математических сеток на основе точки (для сложных систем частиц) и других подобных задач.
каждый результирующий примитив преобразуется в scanline, и каждый пиксель, который охватывает промежуток, проходит через
Пиксельный Шейдер (фрагмент Шейдер в OpenGL) - вычисляет цвет пикселя на экране на основе того, что проходит вершинный шейдер, связанных текстур и пользовательских данных. Это не может прочитать текущий экран вообще, просто выяснить, какой цвет/прозрачность этот пиксель должен быть для текущего примитива.
эти пиксели затем помещаются в текущий буфер рисования (экран, backbuffer, render-to-texture, что угодно)
все шейдеры могут получить доступ к глобальным данным, таким как матрица мировоззрения и разработчик смогите пройти в простые переменные для их для использования для освещать или любой другой цели. Шейдеры обрабатываются на ассемблерном языке, но современные версии DirectX и OpenGL имеют встроенные компиляторы языка высокого уровня c-like, встроенные в HLSL и GLSL соответственно. У NVidia также есть компилятор шейдеров CG, который работает на обоих API.
[отредактировано, чтобы отразить неправильный порядок, который я имел раньше (геометрия->вершина->пиксель), как отмечено в комментарии.]
теперь есть 3 новых шейдеры, используемые в DirectX 11 и тесселяции. Новый полный порядок шейдеров-вершина- > корпус - >тесселяция->домен->геометрия - >пиксель. Я еще не использовал эти новые, поэтому не чувствую себя квалифицированным, чтобы описать их точно.
вершинные и пиксельные шейдеры предоставляют различные функции в графическом конвейере. Вершинные шейдеры принимают и обрабатывают данные, связанные с вершинами (позиции, нормали, texcoords).
пиксельные (или, точнее, фрагментарные) шейдеры принимают значения, интерполированные из обработанных в вершинном шейдере, и генерируют фрагменты пикселей. Большинство "крутых" вещей выполняется в пиксельных шейдерах. Здесь происходят такие вещи, как поиск текстуры и освещение.
Специфический DirectX:
шейдеров:
набор программ, реализующих добавление графических объектов к объектам, которые не определены в фиксированном конвейере рендеринга. Из-за этого мы можем иметь наши собственные графические эффекты в соответствии с нашими потребностями - то есть., Мы больше не ограничены предопределенным " фиксированным" оперативный.
HLSL: (язык высокого уровня затенения):
HLSL-это язык программирования, такой как C++, который используется для реализации шейдеров (пиксельных шейдеров / вершинных шейдеров).
Вершинных Шейдеров:
вершинный шейдер-это программа, выполняемая на GPU видеокарты, которая работает на каждой вершине индивидуально. Это облегчает нам возможность написать собственный алгоритм для работы с вершиной.
Пиксельные Шейдеры:
пиксельный шейдер-это программа, выполняемая на GPU видеокарты во время процесс растеризации для каждый пиксель. Это дает нам возможность получить доступ / манипулировать отдельными пикселями напрямую . Этот прямой доступ к пикселям позволяет нам достичь различных специальных эффектов, таких как мультитекстурирование, освещение на пиксель, глубина резкости, моделирование облаков, моделирование огня и сложные методы затенения.
Примечание: Как вершинные шейдеры, так и пиксельные шейдеры (программы) должны быть скомпилированы с использованием определенной версии компилятора перед использованием. Компиляция может быть выполнена так же, как вызов API с необходимыми параметрами, такими как имя файла, основная функция ввода и т. д.,
с точки зрения разработки пиксельный шейдер-это небольшая программа, которая работает с каждым пикселем индивидуально, аналогично вершинный шейдер работает с каждой вершиной индивидуально.
их можно использовать для создания специальных эффектов, теней, освещения и т. д...
Так как каждый пиксель / вершина управляется индивидуально этими шейдеры поддаются очень параллельной архитектуре современных графических процессоров.