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


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

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

Назначение и использование

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

Этап OM создает окончательный отрисованный цвет пикселей с помощью сочетания следующих элементов:

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

Обзор смешивания

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

схема работы смешивания данных

Концептуально вы можете визуализировать эту блок-диаграмму, реализованную дважды на этапе слияния выходных данных: первая объединяет данные RGB, а второй — альфа-данные. Сведения о том, как использовать API для создания и задания состояния смешения, см. в разделе "Настройка функциональных возможностей смешивания".

Фиксированное сочетание функций можно включить независимо для каждого целевого объекта отрисовки. Однако существует только один набор элементов управления смесью, поэтому одна и та же смесь применяется ко всем renderTargets с включенным сочетанием. Значения смешивания (включая BlendFactor) всегда зажаты в диапазон формата целевого отрисовки перед смешения. Зажимирование выполняется на целевой объект отрисовки, учитывая тип целевого объекта отрисовки. Единственное исключение — для форматов float16, float11 или float10, которые не зажаты таким образом, чтобы операции с сочетанием этих форматов могли выполняться по крайней мере с равной точностью или диапазоном в качестве выходного формата. NaN и подписанные нули распространяется во всех случаях (включая 0,0 весов смешения).

При использовании целевых объектов отрисовки sRGB среда выполнения преобразует целевой цвет отрисовки в линейное пространство перед выполнением смешивания. Среда выполнения преобразует окончательное смешанное значение обратно в пространство SRGB, прежде чем сохранить значение обратно в целевой объект отрисовки.

Сочетание цветов с двумя источниками

Эта функция позволяет этапу слияния выходных данных одновременно использовать выходные данные шейдера пикселей (o0 и o1) в качестве входных данных для операции смешивания с одним целевым объектом отрисовки в слоте 0. Допустимые операции смешения включают: добавление, вычитание и повторную очистку. Уравнение смешения и маска записи выходных данных указывают, какие компоненты шейдера пикселей выводится. Дополнительные компоненты игнорируются.

Запись в другие выходные данные шейдера пикселей (o2, o3 и т. д.) не определена; Вы можете не записывать данные в целевой объект отрисовки, если он не привязан к слоту 0. Запись oDepth допустима во время смешивания цветов с двумя источниками.

Общие сведения о тестировании элементов глубины

Буфер элементов глубины, созданный как ресурс текстуры, может содержать данные глубины и наборы данных. Данные глубины используются для определения того, какие пиксели находятся ближе всего к камере, а данные наборов элементов используются для маскирования, какие пиксели можно обновить. В конечном счете, данные глубины и наборов значений используются этапом слияния выходных данных, чтобы определить, следует ли нарисовать пиксель или нет. На следующей схеме показано, как выполняется тестирование элементов глубины.

схема работы тестирования элементов глубины

Сведения о настройке тестирования элементов глубины см. в разделе "Настройка функций набора глубины". Объект глубины инкапсулирует состояние элементов глубины. Приложение может указать состояние набора элементов глубины, или этап OM будет использовать значения по умолчанию. Операции смешивания выполняются на основе пикселя, если мультисамплинг отключен. Если включена многофакторная сортировка, смешивание выполняется на основе нескольких наборов.

Процесс использования буфера глубины для определения того, какой пиксель должен быть нарисован, называется буферизацией глубины, иногда называется z-buffering.

Когда значения глубины достигают этапа слияния выходных данных (независимо от интерполяции или из шейдера пикселей) они всегда зажаты: z = z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) в соответствии с форматом и точностью буфера глубины, используя правила с плавающей запятой. После закрепления значение глубины сравнивается (с помощью DepthFunc) с существующим значением буфера глубины. Если буфер глубины не привязан, тест глубины всегда проходит.

Если в формате буфера глубины отсутствует компонент наборов элементов или нет границы буфера глубины, тест набора элементов всегда проходит.

Одновременно может быть активен только один буфер глубины или набора элементов; любое связанное представление ресурсов должно соответствовать (одному и тому же размеру) представлению глубины или набора элементов. Это не означает, что размер ресурса должен совпадать, только то, что размер представления должен соответствовать.

Обзор примера маски

Пример маски — это 32-разрядная многофакторная маска покрытия, которая определяет, какие образцы обновляются в активных целевых объектах отрисовки. Допускается только один пример маски. Сопоставление битов в маске образца с примерами в ресурсе определяется пользователем. Для отрисовки n-образец используются первые n-биты (из LSB) маски образца (32 бита, максимальное число битов).

Ввод

Этап слияния выходных данных (OM) создает окончательный цвет отрисованного пикселя с помощью сочетания следующих элементов:

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

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

Обзор маски вывода и записи

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

Обзор нескольких целевых объектов отрисовки

Шейдер пикселей можно использовать для отрисовки по крайней мере 8 отдельных целевых объектов отрисовки, все из которых должны быть одинаковыми типами (буфер, Текстур1D, Текстур1DArray и т. д.). Кроме того, все целевые объекты отрисовки должны иметь одинаковый размер во всех измерениях (ширина, высота, глубина, размер массива, количество выборок). Каждый целевой объект отрисовки может иметь другой формат данных.

Вы можете использовать любое сочетание слотов целевых объектов отрисовки (до 8). Однако представление ресурсов не может быть привязано к нескольким слотам render-target-target одновременно. Представление может использоваться повторно, если ресурсы не используются одновременно.

В этом разделе

Раздел Описание

Настройка функций набора элементов глубины

В этом разделе рассматриваются действия по настройке буфера элементов глубины и состояния элементов глубины для этапа слияния выходных данных.

 

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