OM(출력 병합기) 단계Output Merger (OM) stage

OM (출력 병합기) 단계에서는 다양 한 유형의 출력 데이터 (픽셀 셰이더 값, 깊이 및 스텐실 정보)를 렌더링 대상의 내용과 깊이/스텐실 버퍼의 내용과 결합 하 여 최종 파이프라인 결과를 생성 합니다.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를 사용 하 여 blend 상태를 만들고 설정 하는 방법을 보려면 혼합 기능 구성을 참조 하세요.To see how to use the API to create and set blend state, see Configuring Blending Functionality.

고정 함수 blend는 각 렌더링 대상에 대해 독립적으로 사용 하도록 설정할 수 있습니다.Fixed-function blend can be enabled independently for each render target. 그러나 혼합 컨트롤 집합은 하나만 있으므로 혼합이 설정 된 모든 RenderTargets에 동일한 blend가 적용 됩니다.However there is only one set of blend controls, so that the same blend is applied to all RenderTargets with blending enabled. Blend 값 (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 형식에 대 한 것입니다. 따라서 이러한 형식의 blend 연산을 출력 형식으로 최소 정밀도/범위를 사용 하 여 수행할 수 있습니다.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.0 blend 가중치 포함)에 대해 전파 됩니다.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

이 기능을 사용 하면 출력 병합기 단계에서 픽셀 셰이더 출력 (o0 및 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. 유효한 blend 작업에는 add, 빼기 및 revsubtract가 포함 됩니다.Valid blend operations include: add, subtract and revsubtract. Blend 수식과 출력 쓰기 마스크는 픽셀 셰이더가 출력 하는 구성 요소를 지정 합니다.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 (뷰포트))입니다.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

픽셀 셰이더는 최소 8 개의 개별 렌더링 대상으로 렌더링 하는 데 사용할 수 있습니다 .이는 모두 동일한 형식 (buffer, 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.

렌더링 대상 슬롯을 임의로 조합 하 여 사용할 수 있습니다 (최대 8 개).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