DirectX 10 и OpenGL 3 представили геометрический шейдер как третий тип.
В порядке рендеринга конвейера -
Vertex Shader - берет одну точку и может ее отрегулировать. Может использоваться для разработки сложных ** подсчетов освещения вершин в качестве установки для следующего этапа и / или деформации точек вокруг (колебание, масштабирование и т. Д.).
каждый полученный примитив передается в
Геометрический шейдер - берет каждый преобразованный примитив (треугольник и т. Д.) И может выполнять на нем вычисления. Это может добавить новые очки, убрать их или переместить их по мере необходимости. Это можно использовать для динамического добавления или удаления уровней детализации из одной базовой сетки, создания математических сеток на основе точки (для сложных систем частиц) и других аналогичных задач.
каждый получающийся примитив конвертируется в строку развертки, и каждый пиксель, который охватывает диапазон, проходит через
Пиксельный шейдер (Фрагментный шейдер в OpenGL) - вычисляет цвет пикселя на экране на основе того, что передает вершинный шейдер, связанных текстур и данных, добавленных пользователем. Это вообще не может прочитать текущий экран, просто определите, каким должен быть цвет / прозрачность этого пикселя для текущего примитива.
эти пиксели затем помещаются в текущий буфер рисования (экран, буфер, рендеринг в текстуру и т. Д.)
Все шейдеры могут получать доступ к глобальным данным, таким как матрица мировоззрения, и разработчик может передавать простые переменные, которые они могут использовать для освещения или в любых других целях. Шейдеры обрабатываются на языке, подобном ассемблеру, но современные версии DirectX и OpenGL имеют встроенные высокоуровневые компиляторы с-подобного языка, которые называются HLSL и GLSL соответственно. У NVidia также есть шейдерный компилятор под названием CG, который работает на обоих API.
[отредактировано, чтобы отразить неправильный порядок, который я имел прежде (Geometry-> Vertex-> Pixel), как отмечено в комментарии.]
В настоящее время в DirectX 11 используются 3 новых шейдера для тесселяции. Новый полный порядок шейдеров: Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel. Я еще не использовал эти новые, поэтому не чувствую себя достаточно квалифицированным, чтобы точно их описать.