Поделиться через


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

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

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

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

схема потока данных в конвейере direct3d 11 с возможностью программирования

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

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

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

    Примитивные данные (треугольники, линии и/или точки) из заполненных пользователем буферов в памяти. И, возможно, данные о зависимостях. Треугольник будет иметь 3 вершины для каждого треугольника и, возможно, 3 вершины для данных о приращения на треугольник.

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

    Примитивы с присоединенными системными значениями (например, примитивный идентификатор, идентификатор экземпляра или идентификатор вершины).

Этап шейдера вершин

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

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

    Одна вершина с системными значениями VertexID и InstanceID. Каждая входная вершина шейдера вершин может состоять из 16 32-разрядных векторов (до 4 компонентов).

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

    Одна вершина. Каждая выходная вершина может состоять из 16 32-разрядных 4-разрядных векторов.

Этап шейдера корпуса

Этап шейдера корпуса (HS) является одним из этапов тесселяции, которые эффективно разбивают одну поверхность модели на многие треугольники. Шейдер корпуса вызывается один раз на исправление, и он преобразует входные точки управления, определяющие поверхность с низким порядком в точки управления, составляющие исправление. Он также выполняет некоторые вычисления для каждого исправления, чтобы предоставить данные для этапа Tessellator (TS) и этапа шейдера домена (DS).

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

    Между 1 и 32 входными точками управления, которые вместе определяют поверхность низкого порядка.

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

    Между 1 и 32 выходными точками управления, которые вместе составляют исправление. Шейдер корпуса объявляет состояние для этапа Tessellator (TS), включая количество контрольных точек, тип лица исправления и тип секционирования, используемый при тесселлатинге.

Этап Тесселлатора

Этап Tessellator (TS) создает шаблон выборки домена, который представляет геометрическое исправление и создает набор небольших объектов (треугольников, точек или линий), которые соединяют эти образцы.

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

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

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

    Выходные данные tessellator (и при необходимости w) и топология поверхности на стадии шейдера домена.

Этап шейдера домена

Этап шейдера домена (DS) вычисляет позицию вершины разделенной точки в выходном исправлении; вычисляет позицию вершины, соответствующую каждому образцу домена. Шейдер домена запускается один раз на точку вывода стадии tessellator и имеет доступ только для чтения к выходным исправлениям шейдера корпуса и выходным константам исправления, а также выходные координаты шейдера на стадии tessellator.

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

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

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

    Этап шейдера домена (DS) выводит позицию вершины разделенной точки в выходном исправлении.

Этап шейдера геометрии

Этап геометрического шейдера (GS) обрабатывает целые примитивы: треугольники, линии и точки, а также их смежные вершины. Он поддерживает геометрическую амплификацию и деамплификацию. Это полезно для алгоритмов, включая расширение точек спрайта, динамические системы частиц, фургоно-фингового поколения, создание теневого тома, однопроходное отрисовка к кубу, переключение материала на примитивы и настройку материала per-Primitive, включая создание барицентрических координат в качестве примитивных данных, чтобы шейдер пикселей может выполнять интерполяцию пользовательских атрибутов.

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

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

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

    Этап геометрического шейдера (GS) может выводить несколько вершин, формируя одну выбранную топологию. Доступные топологии выходных данных шейдера геометрии : tristrip, linestrip и pointlist. Число примитивов, создаваемых, может свободно различаться в пределах любого вызова геометрического шейдера, хотя максимальное количество вершин, которые можно создать, должно быть объявлено статически. Длина полосы, выдаваемая из вызова шейдера геометрии, может быть произвольной, а новые полосы можно создавать с помощью функции RestartStrip HLSL.

Этап вывода потока

Этап вывода потока (SO) непрерывно выводит данные вершин (или потоков) из предыдущей активной стадии в один или несколько буферов в памяти. Данные, исходящие в память, могут быть повторно возвращены в конвейер в виде входных данных или обратного чтения из ЦП.

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

    Вершинные данные из предыдущего этапа конвейера.

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

    Этап вывода потока (SO) непрерывно выводит данные вершин (или потоков) из предыдущей активной стадии, например этап геометрии шейдера (GS) в один или несколько буферов в памяти. Если этап шейдера геометрии (GS) неактивен, а этап вывода потока (SO) активен, он непрерывно выводит данные вершин из этапа шейдера домена (DS) в буферы в памяти (или если DS также неактивен, из этапа вершинного шейдера (VS).

Этап растеризатора

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

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

    Вершины (x,y,z,w), поступающие на сцену Rasterizer, предполагается, что находятся в однородном клип-пространстве. В этом пространстве координат ось X справа, Y указывает вверх и Z точки от камеры.

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

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

Этап шейдера пикселей

Этап шейдера пикселей (PS) получает интерполированные данные для примитива и создает данные на пиксель, такие как цвет.

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

    Если конвейер настроен без геометрического шейдера, шейдер пикселей ограничен 16, 32-разрядными 4-компонентными входными данными. В противном случае шейдер пикселей может занять до 32, 32-разрядных, 4-компонентов входных данных. Входные данные шейдера пикселей включают атрибуты вершин (которые могут быть интерполированы с исправлением перспективы или без нее) или могут рассматриваться как примитивные константы. Входные данные шейдера пикселей интерполируются из атрибутов вершины растеризованного примитива на основе объявленного режима интерполяции. Если примитив обрезается перед растеризацией, режим интерполяции также учитывается во время процесса вырезки.

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

    Шейдер пикселей может выводить до 8, 32-разрядных, 4-компонентов или без цвета, если пиксель удаляется. Компоненты выходных регистров шейдеров пикселей должны быть объявлены до их использования; каждый регистр допускает отдельную маску для записи выходных данных.

Этап слияния выходных данных

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

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

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

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

    Последний отрисованный цвет пикселя.