Графический конвейер

Графический конвейер Direct3D предназначен для создания графики для игр, действие в которых разворачивается в реальном времени. Данные поступают с устройств ввода на устройства вывода, проходя через все настраиваемые или программируемые этапы.

Все этапы можно настроить с помощью API Direct3D. Этапы с использованием общих ядер шейдеров (прямоугольные блоки со скругленными краями) можно программировать с помощью языка программирования HLSL. Это обеспечивает высочайшую гибкость и адаптивность конвейера.

Наиболее распространены этапы шейдера вершин (VS) и построителя текстуры (PS). Если не предоставить даже эти этапы шейдеров, используются холостая команда по умолчанию, сквозной шейдер вершин и построитель текстуры.

схема потока данных в программируемом конвейере direct3d 11

Этап сборщика входных данных

Этап сборщика входных данных (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) объединяет различные типы выходных данных (значения шейдера пикселей, сведения о глубине и трафарете) с содержимым целевого объекта отрисовки и буферов глубины и трафарета для создания конечного результата конвейера.

  • Входные данные

    Входные данные средства слияния вывода — это состояние конвейера, пиксельные данные, сгенерированные построителями текстур, содержимое целевых объектов отрисовки и буферов глубины и трафаретов.

  • Выходные данные

    Окончательный цвет отрисованных пикселей.