Графический конвейер
Графический конвейер Direct3D предназначен для создания графики для игр, действие в которых разворачивается в реальном времени. Данные поступают с устройств ввода на устройства вывода, проходя через все настраиваемые или программируемые этапы.
Все этапы можно настроить с помощью API Direct3D. Этапы с использованием общих ядер шейдеров (прямоугольные блоки со скругленными краями) можно программировать с помощью языка программирования HLSL. Это обеспечивает высочайшую гибкость и адаптивность конвейера.
Наиболее распространены этапы шейдера вершин (VS) и построителя текстуры (PS). Если не предоставить даже эти этапы шейдеров, используются холостая команда по умолчанию, сквозной шейдер вершин и построитель текстуры.
Этап сборщика входных данных
Этап сборщика входных данных (IA) предоставляет конвейеру примитивные данные и данные смежности, такие как треугольники, линии и точки, включая идентификаторы семантики, чтобы сделать шейдеры более эффективными, уменьшая обработку до примитивов, которые еще не были обработаны.
Входные данные
Данные примитивов (треугольники, линии или точки) из заполненных пользователем буферов в памяти. А также, возможно, данные смежности. Для каждого треугольника есть данные трех вершин и, возможно, еще трех смежных вершин.
Выходные данные
Примитивы с присоединенными системными значениями (такими как ИД примитива, ИД экземпляра или ИД вершины).
Этап шейдера вершин
Этап вершинного шейдера (VS) обрабатывает вершины, обычно выполняя такие операции, как преобразования, скинирование и освещение. Шейдер вершин принимает одну входную вершину и создает одну выходную вершину. Отдельные операции по вершинам, такие как преобразования, скиннинг, морфинг и освещение по вершинам.
Входные данные
Одна вершина с созданными системой значениями VertexID и InstanceID. Каждая входная вершина шейдера вершин может состоять из 32-разрядных векторов (до 4 компонентов в каждом) в количестве до 16 штук.
Выходные данные
Одна вершина. Каждая выходная вершина может состоять из 16 32-разрядных четырехкомпонентных векторов.
Этап шейдера поверхностей
Этап шейдера поверхностей (HS) — один из этапов тесселяции, на котором одна поверхность модели фактически разбивается на множество треугольников. Шейдер поверхностей вызывается единожды для каждого участка и преобразует входные контрольные точки, определяющие поверхность низкого порядка, в контрольные точки, формирующие участок. Он также выполняет некоторые вычисления для каждого участка, чтобы предоставить данные для этапа тесселяции (TS) и шейдера доменов (DS).
Входные данные
От 1 до 32 входных контрольных точек, которые вместе определяют поверхность низкого порядка.
Выходные данные
От 1 до 32 выходных контрольных точек, которые вместе образуют участок. Шейдер поверхностей объявляет состояние для этапа тесселяции (TS), включая количество контрольных точек, тип поверхности участка и нужный тип секционирования при тесселяции.
Этап тесселяции
На этапе тесселяции (TS) создается шаблон выборки домена, представляющего участок геометрии, и генерируется набор небольших объектов (треугольников, точек или линий), соединяющих эти пиксели.
Входные данные
Тесселяция выполняется единожды для каждого участка с использованием факторов тесселяции (указывают тщательность тесселяции домена) и типа секционирования (указывает алгоритм разделения участка на части), переданных с предыдущего этапа шейдера поверхностей.
Выходные данные
Тесселяция выводит координаты uv (дополнительно — w) и топологию поверхности для этапа шейдера доменов.
Этап шейдера доменов
На этапе шейдера доменов (DS) вычисляется положение вершины составной точки в выходном участке. Вычисляется положение вершины, соответствующее каждой выборке домена. Шейдер доменов запускается единожды на каждую выходную точку этапа тесселяции и имеет доступ только для чтения к выходному участку шейдера поверхности и константам выходного участка, а также к координатам UV выходных данных этапа тесселяции.
Входные данные
Шейдер доменов использует выходные контрольные точки этапа шейдера поверхности (HS). Выходные данные шейдера доменов включают контрольные точки, данные констант участков и факторы тесселяции (факторы тесселяции могут включать значения, используемые тесселятором с фиксированными функциями, а также необработанные значения — перед округлением с помощью целочисленной тесселяции, — например для упрощения геоморфизма). Шейдер доменов вызывается единожды на каждую выходную координату этапа тесселяции (TS).
Выходные данные
Этап шейдера доменов (DS) выводит положение вершины составной точки в выходном участке.
Этап шейдера геометрии
Этап шейдера геометрии (GS) обрабатывает целые примитивы: треугольники, линии и точки, а также смежные вершины. Он поддерживает усложнение и упрощение геометрии. Он полезен для таких алгоритмов, как расширение спрайтов точек, динамические системы частиц, создание меха/"плавников", создание объемных теней, однопроходная отрисовка с использованием кубической карты, замена материалов по примитивам и настройка материалов по примитивам, включая создание барицентрических координат в качестве данных примитива, чтобы построитель текстуры мог выполнить настраиваемую интерполяцию атрибутов.
Входные данные
В отличие от шейдеров вершин, работающих с одной вершиной, входными данными шейдера геометрии являются вершины полного примитива (три вершины для треугольников, две вершины для линий или одна вершина для точек).
Выходные данные
Этап шейдера геометрии может выводить несколько вершин, формирующих единую выбранную топологию. Доступны следующие выходные топологии шейдера геометрии: tristrip, linestrip и pointlist. Количество сгенерированных примитивов может свободно меняться при каждом вызове шейдера геометрии, но максимальное количество генерируемых вершин необходимо объявить статически. Длина полосы, выдаваемая при вызове геометрического шейдера, может быть произвольной, а новые полосы можно создать с помощью функции RestartStrip HLSL.
Этап потокового вывода
Этап вывода потока (SO) непрерывно выводит (или потоки) данные вершин из предыдущей активной стадии в один или несколько буферов в памяти. Поток данных, выведенный в память, можно снова вернуть в конвейер как входные данные или обратно считать из ЦП.
Входные данные
Данные вершин из предыдущего этапа конвейера.
Выходные данные
Этап потокового вывода (SO) непрерывно выводит (или выполняет потоковую передачу) данных вершин из предыдущего активного этапа, например этапа геометрического шейдера (GS), в один или несколько буферов в памяти. Если этап шейдера геометрии (GS) неактивен, а этап потокового вывода (SO) активен, оно непрерывно выводит данные вершин из этапа шейдера доменов (DS) в буферы в памяти (а если этап шейдера доменов также неактивен, то из этапа шейдера вершин (VS)).
Этап растеризации
Этап растеризации (RS) обрезает примитивы, которых нет в представлении, готовит их для этапа построителя текстуры (PS) и определяет, как вызывать эти построители. Векторные данные (состоящие из фигур или примитивов) преобразуются в растровое изображение (состоящее из пикселей) для отображения трехмерной графики в режиме реального времени.
Входные данные
Предполагается, что вершины (x, y, z, w), поступающие на этап растеризации, находятся однородном пространстве обрезки. В этом пространстве координат точки оси X указывают вправо, точки Y — вверх, а точки Z — по направлению от камеры.
Выходные данные
Фактические пиксели для отрисовки. Включает некоторые атрибуты вершин для интерполяции построителем текстуры.
Этап построителя текстуры
На этапе построителя текстуры (PS) принимаются интерполированные данные для примитива и генерируются данные для пикселей, такие как цвет.
Входные данные
Если конвейер настроен без шейдера геометрии, шейдер текстуры ограничивается 16 32-разрядными и 4-компонентными входными данными. В противном случае шейдер пикселей может принимать до 32 32-разрядных, 4-компонентных входных данных. Входные данные шейдера пикселей включают атрибуты вершин (которые можно интерполировать с коррекцией перспективы или без нее) или могут рассматриваться как константы примитивов. Входные данные шейдера пикселей интерполируются на основе атрибутов вершин растеризуемого примитива в зависимости от объявленного режима интерполяции. Если примитив обрезается до растеризации, режим интерполяции также учитывается в процессе обрезки.
Выходные данные
Пиксельный шейдер может вывести до 8 32-разрядных 4-компонентных цветов (если пиксель отклоняется, цвет не предоставляется). Компоненты регистрация выходных данных шейдера пикселей следует объявить перед использованием. У каждого регистра может быть отдельная маска вывода записи.
Этап слияния вывода
Этап слияния выходных данных (OM) объединяет различные типы выходных данных (значения шейдера пикселей, сведения о глубине и трафарете) с содержимым целевого объекта отрисовки и буферов глубины и трафарета для создания конечного результата конвейера.
Входные данные
Входные данные средства слияния вывода — это состояние конвейера, пиксельные данные, сгенерированные построителями текстур, содержимое целевых объектов отрисовки и буферов глубины и трафаретов.
Выходные данные
Окончательный цвет отрисованных пикселей.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по