래스터화 규칙Rasterization rules

래스터화 규칙은 벡터 데이터가 래스터 데이터에 매핑되는 방식을 정의 합니다.Rasterization rules define how vector data is mapped into raster data. 래스터 데이터는 추출 및 잘린 (최소 픽셀 수를 그리기 위해) 정수 위치로 스냅 된 다음 픽셀 단위 특성은 픽셀 셰이더에 전달 되기 전에 보간 됩니다 (꼭 짓 점 별 특성에서).The raster data is snapped to integer locations that are then culled and clipped (to draw the minimum number of pixels), and per-pixel attributes are interpolated (from per-vertex attributes) before being passed to a pixel shader.

매핑되는 기본 형식에 종속 되는 여러 가지 유형의 규칙이 있으며, 데이터에서 다중 샘플링을 사용 하 여 별칭을 줄이도록 할지 여부를 결정 합니다.There are several types of rules, which depend on the type of primitive that is being mapped, as well as whether or not the data uses multisampling to reduce aliasing. 다음 그림에서는 모퉁이 사례를 처리 하는 방법을 보여 줍니다.The following illustrations demonstrate how the corner cases are handled.

삼각형 래스터화 규칙 (다중 샘플링 없음)Triangle Rasterization Rules (Without Multisampling)

삼각형 안에 있는 모든 픽셀 센터가 그려집니다. 픽셀은 왼쪽 위에 있는 규칙을 통과 하는 경우 내부에 있는 것으로 간주 됩니다.Any pixel center which falls inside a triangle is drawn; a pixel is assumed to be inside if it passes the top-left rule. 왼쪽 위 규칙은 픽셀 센터가 삼각형의 위쪽 가장자리 또는 삼각형의 왼쪽 가장자리에 있는 경우 삼각형의 안쪽에 있도록 정의 된 것입니다.The top-left rule is that a pixel center is defined to lie inside of a triangle if it lies on the top edge or the left edge of a triangle.

여기서where:

  • 위쪽 가장자리는 정확히 가로 이며 다른 가장자리를 넘는 가장자리입니다.A top edge, is an edge that is exactly horizontal and is above the other edges.
  • 왼쪽 가장자리는 정확히 가로는 아니고 삼각형의 왼쪽에 있는 가장자리입니다. 삼각형에는 하나 또는 두 개의 왼쪽 가장자리가 있을 수 있습니다.A left edge, is an edge that is not exactly horizontal and is on the left side of the triangle A triangle can have one or two left edges.

왼쪽 위 규칙을 사용 하면 인접 한 삼각형이 한 번 그려집니다.The top-left rule ensures that adjacent triangles are drawn once.

이 그림은 삼각형 안에 있거나 왼쪽 위에 있는 규칙을 따르기 때문에 그려지는 픽셀의 예를 보여 줍니다.This illustration shows examples of pixels that are drawn because they either lie inside a triangle or follow the top-left rule.

왼쪽 위 삼각형 래스터화의 예

픽셀을 포함 하는 밝은 회색 및 어두운 회색은 이러한 픽셀을 포함 하는 삼각형을 나타내는 픽셀의 그룹으로 표시 합니다.The light and dark gray covering of the pixels show them as groups of the pixels to indicate which triangle they are inside.

선 래스터화 규칙 (다중 샘플링 없이 별칭 지정)Line Rasterization Rules (Aliased, Without Multisampling)

선 래스터화 규칙은 다이아몬드 테스트 영역을 사용 하 여 줄이 픽셀을 포함 하는지 확인 합니다.Line rasterization rules use a diamond test area to determine if a line covers a pixel. X 주 줄 (-1 < = 슬로프 = + 1 인 경우 선)의 경우 < 다이아몬드 테스트 영역에는 왼쪽 아래 가장자리, 오른쪽 아래 가장자리, 아래쪽 모퉁이가 포함 되 고, 다이아몬드는 왼쪽 위 가장자리, 오른쪽 위 가장자리, 위쪽 corder, 왼쪽 모퉁이 및 오른쪽 모퉁이를 제외 합니다.For x-major lines (lines with -1 <= slope <= +1), the diamond test area includes (shown solid) the lower-left edge, lower-right edge, and bottom corner; the diamond excludes (shown dotted) the upper-left edge, upper-right edge, the top corder, the left corner, and the right corner. Y 주 선은 x 주 선이 아닌 선입니다. 테스트 다이아몬드 영역은 오른쪽 모퉁이가 포함 된 경우를 제외 하 고는 x 주 선에 대해 설명한 것과 같습니다.A y-major line is any line that is not an x-major line; the test diamond area is the same as described for the x-major line except the right corner is also included.

다이아몬드 영역을 지정 하는 경우 줄이 시작 부분에서 끝 방향으로 이동할 때 줄이 픽셀의 다이아몬드 테스트 영역을 벗어나면 픽셀을 포함 합니다.Given the diamond area, a line covers a pixel if the line exits the pixel's diamond test area when traveling along the line from the start towards the end. 줄 스트립은 선 시퀀스로 그리기 때문에 동일 하 게 동작 합니다.A line strip behaves the same, as it is drawn as a sequence of lines.

다음 그림에서는 몇 가지 예를 보여 줍니다.The following illustration shows some examples.

앨리어싱된 선 래스터화의 예

선 래스터화 규칙 (다중 샘플링 없이 앤티 앨리어싱)Line Rasterization Rules (Antialiased, Without Multisampling)

앤티 앨리어싱 선은 사각형 (너비 = 1) 인 것 처럼 래스터화됩니다.An antialiased line is rasterized as if it were a rectangle (with width = 1). 사각형은 픽셀 셰이더 출력 알파 구성 요소에 곱하여 픽셀 단위 검사 값을 생성 하는 렌더링 대상과 교차 합니다.The rectangle intersects with a render target producing per-pixel coverage values, which are multiplied into pixel shader output alpha components. 다중 샘플 렌더링 대상에서 선을 그릴 때 앤티 앨리어싱 수행 없습니다.There is no antialiasing preformed when drawing lines on a multisampled render target.

앤티 앨리어싱 선 렌더링을 수행 하는 단일 "최상" 방법이 없는 것으로 간주 됩니다.It is deemed that there is no single "best" way to perform antialiased line rendering. Direct3D는 다음 그림에 표시 된 방법에 대 한 지침으로 채택 합니다.Direct3D adopts as a guideline the method shown in the following illustration. 이 메서드는 다양 한 시각적 속성을 알려지고 실험적으로 하 여 파생 된 것입니다.This method was derived empirically, exhibiting a number of visual properties deemed desirable.

하드웨어는이 알고리즘과 정확히 일치 하지 않아도 됩니다. 이 참조에 대 한 테스트에는 아래에 나열 된 몇 가지 원칙에 따라 "적절 한" 공차가 제공 되어 다양 한 하드웨어 구현 및 필터 커널 크기를 허용 해야 합니다.Hardware need not exactly match this algorithm; tests against this reference shall have "reasonable" tolerances, guided by some of the principles listed further below, permitting various hardware implementations and filter kernel sizes. 그러나 하드웨어 구현에 허용 되는 이러한 유연성은 간단 하 게 선을 그리고 모양을 관찰/측정 하는 것 외에도 Direct3D를 통해 응용 프로그램에 전달할 수 있습니다.None of this flexibility permitted in hardware implementation, however, can be communicated up through Direct3D to applications, beyond simply drawing lines and observing/measuring how they look.

앤티 앨리어싱 선 래스터화의 예

이 알고리즘은 최소 들쭉날쭉한 가장자리 또는 braiding를 사용 하 여 균일 한 강도로 균일 한 선을 생성 합니다.This algorithm generates relatively smooth lines, with uniform intensity, with minimal jagged edges or braiding. 닫힌 줄의 moire 패턴화는 최소화 됩니다.Moire patterning for close lines is minimized. 끝에서 끝까지 배치 된 선 세그먼트 간의 교차점에 대 한 적절 한 검사를 제공 합니다.There is good coverage for junctions between line segments placed end-to-end.

필터 커널은 가장자리 흐린 크기와 감마 수정으로 인해 발생 하는 강도의 변화에 대 한 적절 한 균형을 유지 합니다.The filter kernel is a reasonable tradeoff between the amount of edge blurring and the changes in intensity caused by gamma corrections. 검사 값은 OM (출력 병합기) 단계에서 다음 수식에 따라 픽셀 셰이더 O0 (srcAlpha)를 곱합니다.The coverage value is multiplied into pixel shader o0.a (srcAlpha) per the following formula by the Output Merger (OM) stage:

srcColor * srcAlpha + destcolor * (1-srcAlpha)srcColor * srcAlpha + destColor * (1-srcAlpha)

점 래스터화 규칙 (다중 샘플링 없음)Point Rasterization Rules (Without Multisampling)

점은 Z 패턴에서 삼각형 래스터화 규칙을 사용 하는 두 개의 삼각형으로 구성 된 것 처럼 해석 됩니다.A point is interpreted as though it were composed of two triangles in a Z pattern, which use triangle rasterization rules. 좌표는 한 픽셀 와이드 사각형의 중심을 식별 합니다.The coordinate identifies the center of a one pixel wide square. 점에 대 한 고르기 없습니다.There is no culling for points.

다음 그림에서는 몇 가지 예를 보여 줍니다.The following illustration shows some examples.

점 래스터화의 예

다중 샘플 앤티 앨리어싱 래스터화 규칙Multisample Anti-Aliasing Rasterization Rules

MSAA (다중 샘플 앤티엘리어싱)는 여러 하위 샘플 위치에서 픽셀 범위 및 깊이 스텐실 테스트를 사용 하 여 기 하 도형 앨리어싱을 감소 시킵니다.Multisample antialiasing (MSAA) reduces geometry aliasing using pixel coverage and depth-stencil tests at multiple sub-sample locations. 성능 향상을 위해 대상 하위 픽셀 간에 셰이더 출력을 공유 하 여 각 대상 픽셀에 대해 픽셀 단위 계산이 한 번씩 수행 됩니다.To improve performance, per-pixel calculations are performed once for each covered pixel, by sharing shader outputs across covered sub-pixels. 다중 샘플 앤티엘리어싱은 표면 앨리어싱을 줄이지 않습니다.Multisample antialiasing does not reduce surface aliasing. 샘플 위치 및 재구성 함수는 하드웨어 구현에 따라 달라 집니다.Sample locations and reconstruction functions are dependent on the hardware implementation.

다음 그림에서는 몇 가지 예를 보여 줍니다.The following illustration shows some examples.

다중 샘플 앤티앨리어싱 래스터화의 예

샘플 위치 수는 다중 샘플 모드에 따라 달라 집니다.The number of sample locations is dependent on the multisample mode. 꼭 짓 점 특성은 픽셀 셰이더가 호출 되는 위치 이기 때문에 픽셀 센터에서 보간됩니다 .이는 센터가 포함 되지 않은 경우에는이를 해결할 수 없습니다.Vertex attributes are interpolated at pixel centers, since this is where the pixel shader is invoked (this becomes extrapolation if the center is not covered). 특성은 중심 샘플링 되도록 픽셀 셰이더에 플래그가 지정 될 수 있으며,이로 인해 해당 픽셀의 영역과 기본이 교차 하는 위치에 특성을 보간 하지 않습니다.Attributes can be flagged in the pixel shader to be centroid sampled, which causes non-covered pixels to interpolate the attribute at intersection of the pixel's area and the primitive.

X 및 y 델타를 사용 하는 파생 계산을 지원 하기 위해 각 2x2 픽셀 영역에 대해 픽셀 셰이더를 실행 합니다.A pixel shader runs for each 2x2 pixel area to support derivative calculations (which use x and y deltas). 즉, 다중 샘플링에 독립적인 최소 2x2 퀀텀을 채우기 위해 셰이더 호출이 표시 된 것 보다 더 많이 발생 합니다.This means that shader invocations occur more than is shown to fill out the minimum 2x2 quanta (which is independent of multisampling). 셰이더 결과는 샘플 별 깊이 스텐실 테스트를 통과 하는 각 대상 샘플에 대해 기록 됩니다.The shader result is written out for each covered sample that passes the per-sample depth-stencil test.

기본 형식에 대 한 래스터화 규칙은 일반적으로 다음을 제외 하 고 다중 샘플 앤티엘리어싱에 의해 변경 되지 않습니다.Rasterization rules for primitives are, in general, unchanged by multisample antialiasing, except:

  • 삼각형의 경우 각 샘플 위치 (픽셀 센터가 아님)에 대해 검사 테스트가 수행 됩니다.For a triangle, a coverage test is performed for each sample location (not for a pixel center). 둘 이상의 샘플 위치가 포함 된 경우 픽셀 셰이더는 픽셀 중심에서 보간된 특성을 사용 하 여 한 번 실행 됩니다.If more than one sample location is covered, a pixel shader runs once with attributes interpolated at the pixel center. 결과는 깊이/스텐실 테스트를 통과 하는 픽셀의 각 대상 샘플 위치에 대해 저장 (복제) 됩니다.The result is stored (replicated) for each covered sample location in the pixel that passes the depth/stencil test.

    선은 줄 너비가 1.4 인 두 개의 삼각형으로 구성 된 사각형으로 처리 됩니다.A line is treated as a rectangle made up of two triangles, with a line width of 1.4.

  • 지점의 경우 각 샘플 위치 (픽셀 센터가 아님)에 대해 검사 테스트가 수행 됩니다.For a point, a coverage test is performed for each sample location (not for a pixel center).

셰이더에 의해 액세스 되는 개별 샘플에는 확인이 필요 하지 않으므로 로드를 사용 하 여 셰이더를 다시 읽을 수 있는 렌더링 대상에서 다중 샘플링 형식을 사용할 수 있습니다.Multisampling formats can be used in render targets which can be read back into shaders using load, since no resolve is required for individual samples accessed by the shader. 다중 샘플 리소스에는 깊이 형식이 지원 되지 않으므로 깊이 형식은 렌더링 대상 으로만 제한 됩니다.Depth formats are not supported for multisample resource, therefore, depth formats are restricted to render targets only.

관대 한 형식 형식은 다중 샘플링을 지원 하므로 리소스 뷰에서 데이터를 다른 방식으로 해석할 수 있습니다.Typeless formats support multisampling to allow a resource view to interpret data in different ways. 예를 들어 R8G8B8A8를 사용 하 여 다중 샘플 리소스를 만들고 _ R8G8B8A8 UINT 형식의 렌더링 대상 뷰 리소스를 사용 하 여 렌더링 _ 한 다음 R8G8B8A8 _ unorm 데이터 형식을 사용 하 여 다른 리소스에 대 한 내용을 확인할 수 있습니다.For instance, you could create a multisample resource using R8G8B8A8_TYPELESS, render to it using a render-target-view resource with a R8G8B8A8_UINT format, then resolve the contents to another resource with a R8G8B8A8_UNORM data format.

하드웨어 지원Hardware Support

API는 품질 수준 수를 통해 다중 샘플링에 대 한 하드웨어 지원을 보고 합니다.The API reports hardware support for multisampling through the number of quality levels. 예를 들어 0 품질 수준은 하드웨어에서 다중 샘플링 (특정 형식 및 품질 수준)을 지원 하지 않음을 의미 합니다.For example, a 0 quality level means the hardware does not support multisampling (at a particular format and quality level). 품질 수준 3은 하드웨어가 세 가지 샘플 레이아웃 및/또는 확인 알고리즘을 지원함을 의미 합니다.A 3 for quality levels means that the hardware supports three different sample layouts and/or resolve algorithms. 다음을 가정할 수도 있습니다.You can also assume the following:

  • 다중 샘플링을 지 원하는 모든 형식은 해당 패밀리의 모든 형식에 대해 동일한 품질 수준을 지원 합니다.Any format that supports multisampling, supports the same number of quality levels for every format in that family.
  • 다중 샘플링을 지원 하 고 _ orm, _ SRGB, _ snorm 또는 FLOAT 형식을 포함 하는 모든 형식 _ 에서을 (를) 확인도 지원 합니다.Every format that supports multisampling, and has the _UNORM, _SRGB, _SNORM or _FLOAT formats, also supports resolving.

다중 샘플 앤티엘리어싱 인 경우 특성의 중심 샘플링Centroid Sampling of Attributes when Multisample Antialiasing

기본적으로 꼭 짓 점 특성은 다중 샘플 앤티엘리어싱 중에 픽셀 중심으로 보간됩니다. 픽셀 센터가 적용 되지 않는 경우 특성은 픽셀 추정 됩니다.By default, vertex attributes are interpolated to a pixel center during multisample antialiasing; if the pixel center is not covered, attributes are extrapolated to a pixel center. 중심 의미 체계가 포함 된 픽셀 셰이더 입력 (픽셀이 완전히 검사 되지 않는다고 가정)은 대상 샘플 위치 중 하나에서 해당 픽셀의 대상 영역 내에서 샘플링 됩니다.If a pixel shader input that contains the centroid semantic (assuming the pixel is not fully covered) will be sampled somewhere within the covered area of the pixel, possibly at one of the covered sample locations. 중심 계산 전에 래스터 라이저 상태로 지정 된 샘플 마스크를 적용 합니다.A sample mask (specified by the rasterizer state) is applied prior to centroid computation. 따라서 마스킹된 샘플은 중심 위치로 사용 되지 않습니다.Therefore, a sample that is masked out will not be used as a centroid location.

참조 래스터 라이저는 다음과 유사한 중심 샘플링에 대 한 샘플 위치를 선택 합니다.The reference rasterizer chooses a sample location for centroid sampling similar to this:

  • 샘플 마스크는 모든 샘플을 허용 합니다.The sample mask allows all samples. 픽셀이 적용 되는 경우 픽셀 중심을 사용 하 고, 포함 된 샘플이 없으면 픽셀 중심을 사용 합니다.Use a pixel center if the pixel is covered or if none of the samples are covered. 그렇지 않으면 첫 번째 검사 된 샘플이 픽셀 중심에서 시작 하 여 바깥쪽으로 이동 하 여 선택 됩니다.Otherwise, the first covered sample is chosen, starting from the pixel center and moving outward.
  • 샘플 마스크는 모든 샘플을 해제 하나 (일반적인 시나리오)를 해제 합니다.The sample mask turns off all samples but one (a common scenario). 응용 프로그램은 단일 비트 샘플 마스크 값을 순환 하 고 중심 샘플링을 사용 하 여 각 샘플에 대 한 장면을 다시 렌더링 하 여 multipass supersampling를 구현할 수 있습니다.An application can implement multipass supersampling by cycling through single-bit sample-mask values and re-rendering the scene for each sample using centroid sampling. 이렇게 하려면 응용 프로그램이 파생물을 조정 하 여 더 높은 질감 샘플링 밀도에 대해 적절 하 게 더 자세한 질감 mips를 선택 해야 합니다.This would require that an application adjust derivatives to select appropriately more detailed texture mips for the higher texture sampling density.

다중 샘플링 시 파생 계산Derivative Calculations When Multisampling

픽셀 셰이더는 항상 최소 2x2 픽셀 영역을 사용 하 여 파생 계산을 지원 하기 위해 항상 최소 2x2 픽셀 영역을 사용 하 여 계산 됩니다 .이는 인접 픽셀의 데이터 간에 델타를 사용 하 여 계산 됩니다. 각 픽셀의 데이터는 가로 또는 세로 단위로 샘플링 된 것으로 가정 합니다.Pixel shaders always run using a minimum 2x2 pixel area to support derivative calculations, which are calculated by taking deltas between data from adjacent pixels (making the assumption that the data in each pixel has been sampled with unit spacing horizontally or vertically). 이는 다중 샘플링의 영향을 받지 않습니다.This is unaffected by multisampling.

중심 샘플링 된 특성에서 파생물을 요청 하면 하드웨어 계산이 조정 되지 않으므로 부정확 한 파생이 발생할 수 있습니다.If derivatives are requested on an attribute that has been centroid sampled, the hardware calculation is not adjusted, which can cause inaccurate derivatives. 셰이더는 렌더링 대상 공간에서 단위 벡터를 필요로 하지만 다른 벡터 공간에 대해 unit이 아닌 벡터를 가져올 수 있습니다.A shader will expect a unit vector in render-target space but may get a non-unit vector with respect to some other vector space. 따라서 중심 샘플링 된 특성에서 파생물을 요청할 때에는 응용 프로그램의 책임입니다.Therefore, it is an application's responsibility to exhibit caution when requesting derivatives from attributes that are centroid sampled.

실제로 파생 된 샘플과 중심 샘플링을 결합 하지 않는 것이 좋습니다.In fact, it is recommended that you do not combine derivatives and centroid sampling. 중심 샘플링은 기본의 보간된 특성을 추정 하지 않는 상황에 유용할 수 있지만,이는 기본 가장자리가 LOD 파생 된 질감 샘플링 작업에서 사용할 수 없는 픽셀 (지속적으로 변경 되는 것이 아님) 또는 파생물을 교차 하는 위치를 이동 하는 것과 같은 장단점을 제공 합니다.Centroid sampling can be useful for situations where it is critical that a primitive's interpolated attributes are not extrapolated, but this comes with tradeoffs such as attributes that appear to jump where a primitive edge crosses a pixel (rather than change continuously) or derivatives that cannot be used by texture sampling operations that derive LOD.

관련 항목Related topics

부록Appendices

RS(래스터라이저) 단계Rasterizer (RS) stage