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

На этапе слияния вывода выходные данные различных типов (значения пиксельного шейдера, информация о глубине и наборе элементов) объединяются с содержимым целевого объекта отрисовки и буферов глубины и набора элементов для создания окончательного результата конвейера.The Output Merger (OM) stage combines various types of output data (pixel shader values, depth and stencil information) with the contents of the render target and depth/stencil buffers to generate the final pipeline result.

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

Этап слияния и вывода (OM) — это последняя стадия определения видимых пикселей (с проверкой трафарета глубины) и смешиванием окончательных цветов пикселей.The Output Merger (OM) stage is the final step for determining which pixels are visible (with depth-stencil testing) and blending the final pixel colors.

На этапе OM окончательный цвет пикселей формируется с использованием комбинации следующих элементов:The OM stage generates the final rendered pixel color using a combination of the following:

  • состояния конвейера;Pipeline state
  • данные пикселей, созданные пиксельными шейдерами;The pixel data generated by the pixel shaders
  • содержимое целевых объектов отрисовки;The contents of the render targets
  • содержимое буферов трафарета глубины.The contents of the depth/stencil buffers.

Общие сведения об смешенииBlending overview

Во время смешения одно или несколько значений пикселей объединяются для получения окончательного цвета.Blending combines one or more pixel values to create a final pixel color. На следующей схеме показан процесс смешения пиксельных данных.The following diagram shows the process involved in blending pixel data.

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

Концептуально эту схема применяется на этапе слияния и вывода дважды: в первый раз смешиваются данные RGB, а параллельно смешиваются данные альфа-канала.Conceptually, you can visualize this flow chart implemented twice in the Output Merger stage: the first one blends RGB data, while in parallel, a second one blends alpha data. Сведения об использования API для создания и настройки состояния смешения см. в разделе Настройка смешения.To see how to use the API to create and set blend state, see Configuring Blending Functionality.

Смешение с фиксированной функцией можно включить независимо для каждого целевого объекта отрисовки.Fixed-function blend can be enabled independently for each render target. Однако существует только один набор элементов управления смешением, поэтому одно смешение применяется ко всем целевым объектам отрисовки, если смешение включено.However there is only one set of blend controls, so that the same blend is applied to all RenderTargets with blending enabled. Значения смешения (в том числе BlendFactor) всегда ужимаются до диапазона формат целевого объекта отрисовки перед смешением.Blend values (including BlendFactor) are always clamped to the range of the render-target format before blending. Преобразование выполняется на одном целевом объекте отрисовки с учетом типа объекта.Clamping is done per render target, respecting the render target type. Единственное исключение — форматы float16, float11 и float10, которые не ужимаются таким образом, чтобы операции смешения можно было выполнить с такой же точностью или диапазоном, как у формата вывода.The only exception is for the float16, float11 or float10 formats which are not clamped so that blend operations on these formats can be done with at least equal precision/range as the output format. Не числа (NaN) и нули со знаком распространяются во всех случаях (в том числе для весов 0,0).NaN's and signed zeros are propagated for all cases (including 0.0 blend weights).

При использовании целевых объектов отрисовки sRGB среда выполнения преобразует цвет объекта в линейное пространство перед смешением.When you use sRGB render targets, the runtime converts the render target color into linear space before it performs blending. Среда выполнения преобразует окончательное значение в пространство sRGB перед его сохранением в целевом объекте прорисовки.The runtime converts the final blended value back into sRGB space before it saves the value back to the render target.

Смешение цветов с двумя источникамиDual-source color blending

Эта функция позволяет этапу слияния и вывода одновременно использовать оба выхода пиксельного шейдера (о0 и o1) как входные данные для операции смешения с одним целевым объектом отрисовки в слоте 0.This feature enables the Output Merger stage to simultaneously use both pixel shader outputs (o0 and o1) as inputs to a blending operation with the single render target at slot 0. К допустимым операциям смешения относятся добавление, вычитание и revsubtract.Valid blend operations include: add, subtract and revsubtract. Уравнение смешения и маска записи выходных данных определяют, какие компоненты выводит пиксельный шейдер.The blend equation and the output write mask specify which components the pixel shader is outputting. Дополнительные компоненты игнорируются.Extra components are ignored.

Запись в другие выходы пиксельного шейдера (o2, o3 и т. д.) не определена. Невозможно записать данные в целевой объект прорисовки, если он не привязан к слоту 0.Writing to other pixel shader outputs (o2, o3 etc.) is undefined; you may not write to a render target if it is not bound to slot 0. Запись oDepth во время смешения цветов с двумя источниками допускается.Writing oDepth is valid during dual source color blending.

Обзор тестирования трафарета глубиныDepth-stencil testing overview

Буфер трафарета глубины, который создается как ресурс текстуры, может содержать данные глубины и трафарета.A depth-stencil buffer, which is created as a texture resource, can contain both depth data and stencil data. Данные глубины позволяет определить, какие пиксели размещены ближе всего к камере, а данные трафарета используются для маскировки пикселей, которые можно обновить.The depth data is used to determine which pixels lie closest to the camera, and the stencil data is used to mask which pixels can be updated. В конечном счете все эти значения применяются на этапе слияния и вывода, чтобы определить, рисуется ли пиксель.Ultimately, both the depth and stencil values data are used by the output-merger stage to determine if a pixel should be drawn or not. На следующей схеме показаны схематический процесс тестирования трафарета глубины.The following diagram shows conceptually how depth-stencil testing is done.

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

Сведения о настройке тестирования трафарета глубины см. в разделе Настройка функции трафарета глубины.To configure depth-stencil testing, see Configuring Depth-Stencil Functionality. В объекте трафарета глубины инкапсулируется состояние трафарета глубины.A depth-stencil object encapsulates depth-stencil state. Приложение может указать состояние трафарета глубины, или же на этапе OM будут использоваться значения по умолчанию.An application can specify depth-stencil state, or the OM stage will use default values. Если множественная дискретизация отключена, операции смешения выполняются отдельно для каждого пикселя.Blending operations are performed on a per-pixel basis if multisampling is disabled. Если множественная дискретизация включена, смешение происходит отдельно для каждого объекта мультисэмплинга.If multisampling is enabled, blending occurs on a per-multisample basis.

Процесс использования буфера глубины для определения рисуемых пикселей называется буферизацией глубины или z-буферизацией.The process of using the depth buffer to determine which pixel should be drawn is called depth buffering, also sometimes called z-buffering.

Когда значения глубины достигают этапа слияния и вывода (после интерполяции или применения пиксельного шейдера), они всегда ужимаются: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) (в соответствии с форматом или точностью буфера глубины с использованием правил с плавающей запятой).Once depth values reach the output-merger stage (whether coming from interpolation or from a pixel shader) they are always clamped: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) according to the format/precision of the depth buffer, using floating-point rules. После преобразования значение глубины сравнивается (с помощью DepthFunc) от существующим значением буфера глубины.After clamping, the depth value is compared (using DepthFunc) against the existing depth-buffer value. Если ни один буфер глубины не привязан, тест глубины всегда будет пройден.If no depth buffer is bound, the depth test always passes.

Если компонент трафарета в формате буфера глубины или привязанный буфер глубины не существуют, тест трафарета всегда будет пройден.If there is no stencil component in the depth-buffer format, or no depth buffer bound, then the stencil test always passes.

Только один буфер глубины трафарета может быть активен в заданный момент времени. Все связанные ресурсов должны соответствовать (по размеру и габаритам) представление глубины трафарета.Only one depth/stencil buffer can be active at a time; any bound resource view must match (same size and dimensions) the depth/stencil view. Это не означает, что размер ресурса должен совпадать — совпадать должен только размер представления.This does not mean the resource size must match, just that the view size must match.

Общие сведения о примерах маскиSample mask overview

Маска дискретизации — это 32-разрядная маска покрытия, которая определяет какие образцы обновляются в активных целевых объектах прорисовки.A sample mask is a 32-bit multisample coverage mask that determines which samples get updated in active render targets. Допускается только одна маска дискретизации.Only one sample mask is allowed. Сопоставление разрядов маски дискретизации с образцами в ресурсе определяется пользователем.The mapping of bits in a sample mask to the samples in a resource is defined by a user. Для отрисовки с n-дискретизацией используются первые n разрядов (от LSB) маски дискретизации (максимальное количество разрядов — 32).For n-sample rendering, the first n bits (from the LSB) of the sample mask are used (32 bits it the maximum number of bits).

ВходнойInput

На этапе слияния и вывода (OM) окончательный цвет пикселей формируется с использованием комбинации следующих элементов:The Output Merger (OM) stage generates the final rendered pixel color using a combination of the following:

  • состояния конвейера;Pipeline state
  • данные пикселей, созданные пиксельными шейдерами;The pixel data generated by the pixel shaders
  • содержимое целевых объектов отрисовки;The contents of the render targets
  • содержимое буферов трафарета глубины.The contents of the depth/stencil buffers.

ПроверкиOutput

Обзор маски записи выходных данныхOutput-write mask overview

Маска записи выходных данных используется для управления тем, какие данные можно записать в целевой объекте прорисовки для каждого компонента.Use an output-write mask to control (per component) what data can be written to a render target.

Общие сведения о нескольких целевых объектах рендерингаMultiple render targets overview

Пиксельный шейдер можно использовать для отображения как минимум восьми отдельных целевых объектов отрисовки, все которые должны быть одного типа (буфер, Texture1D, Texture1DArray и т. д.).A pixel shader can be used to render to at least 8 separate render targets, all of which must be the same type (buffer, Texture1D, Texture1DArray, and so on). Кроме того, все целевые объекты отрисовки должны быть одного размера по всем измерениям (ширина, высота, глубина, размер массива, число выборок).Furthermore, all render targets must have the same size in all dimensions (width, height, depth, array size, sample counts). Каждая однобуферная прорисовка может иметь свой формат данных.Each render target may have a different data format.

Вы можете использовать любое сочетание слотов целевых объектов отрисовки (до восьми).You may use any combination of render targets slots (up to 8). Однако представление ресурса невозможно привязать к нескольким слотам целевых объектов отрисовки одновременно.However, a resource view cannot be bound to multiple render-target-slots simultaneously. Представление можно использовать повторно, если ресурсы не применяются одновременно.A view may be reused as long as the resources are not used simultaneously.

В этом разделеIn this section

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

Настройка функции трафарета глубиныConfiguring depth-stencil functionality

В этом разделе приводится пошаговая инструкция по настройке буфера трафарета глубины и рассматривается состояние трафарета глубины для стадии слияния вывода.This section covers the steps for setting up the depth-stencil buffer, and depth-stencil state for the output-merger stage.

 

Связанные темыRelated topics

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