다음을 통해 공유


래스터화 규칙

래스터화 규칙은 벡터 데이터가 래스터 데이터에 매핑되는 방법을 정의합니다. 래스터 데이터는 정수 위치로 스냅된 다음, 픽셀 셰이더에 전달되기 전에 픽셀별 특성이 보간됩니다(최소 픽셀 수를 그리기 위해).

매핑되는 기본 형식과 데이터가 다중 샘플링을 사용하여 별칭을 줄이는지 여부에 따라 달라지는 몇 가지 유형의 규칙이 있습니다. 다음 그림에서는 코너 사례를 처리하는 방법을 보여 줍니다.

삼각형 래스터화 규칙(다중 샘플링 제외)

삼각형 안에 있는 모든 픽셀 중심이 그려집니다. 픽셀은 왼쪽 위 규칙을 통과하는 경우 내부에 있는 것으로 간주됩니다. 왼쪽 위 규칙은 삼각형의 위쪽 가장자리 또는 왼쪽 가장자리에 있는 경우 픽셀 중심이 삼각형 내부에 배치되도록 정의됩니다.

어디:

  • 위쪽 가장자리는 정확히 가로이고 다른 가장자리 위에 있는 가장자리입니다.
  • 왼쪽 가장자리는 정확히 가로가 아니고 삼각형의 왼쪽에 있는 가장자리입니다. 삼각형에는 하나 또는 두 개의 왼쪽 가장자리가 있을 수 있습니다.

왼쪽 위 규칙은 인접한 삼각형이 한 번 그려지도록 합니다.

이 그림에서는 삼각형 안에 있거나 왼쪽 위 규칙을 따르기 때문에 그려지는 픽셀의 예를 보여 줍니다.

왼쪽 위 삼각형 래스터화그림

픽셀의 밝은 회색 및 진한 회색 덮개는 픽셀의 그룹으로 표시되어 내부에 있는 삼각형을 나타냅니다.

선 래스터화 규칙(별칭, 다중 샘플링 제외)

선 래스터화 규칙은 다이아몬드 테스트 영역을 사용하여 선이 픽셀을 덮는지 여부를 확인합니다. x 주선(-1 <= 기울기 <= +1인 선)의 경우 다이아몬드 테스트 영역에는 왼쪽 아래 가장자리, 오른쪽 아래 가장자리 및 아래쪽 모서리가 포함됩니다(단색으로 표시됨). 다이아몬드는 왼쪽 위 가장자리, 오른쪽 위 가장자리, 위쪽 코더, 왼쪽 모서리 및 오른쪽 모서리를 제외합니다(점선으로 표시됨). y 주선은 x-주 선이 아닌 모든 선입니다. 테스트 다이아몬드 영역은 오른쪽 모서리도 포함되는 것을 제외하고 x-major 선에 대해 설명한 것과 동일합니다.

다이아몬드 영역이 지정된 경우 선이 처음부터 끝까지 선을 따라 이동할 때 픽셀의 다이아몬드 테스트 영역을 종료하면 선이 픽셀을 덮습니다. 선 스트립은 선 시퀀스로 그려지는 것과 동일하게 동작합니다.

다음 그림에서는 몇 가지 예를 보여 줍니다.

별칭이 지정된 선 래스터화그림

선 래스터화 규칙(앤티앨리어싱됨, 다중 샘플링 제외)

앤티앨리어싱된 선은 사각형인 것처럼 래스터화됩니다(너비 = 1). 사각형은 픽셀별 검사 값을 생성하는 렌더링 대상과 교차하며 픽셀 셰이더 출력 알파 구성 요소에 곱합니다. 다중 샘플링된 렌더링 대상에 선을 그릴 때 미리 형성된 앤티앨리어싱이 없습니다.

앤티앨리어싱된 라인 렌더링을 수행하는 단일 "최상의" 방법은 없는 것으로 간주됩니다. Direct3D 10은 다음 그림에 표시된 메서드를 지침으로 채택합니다. 이 메서드는 경험적으로 파생되어 바람직한 것으로 간주되는 여러 시각적 속성을 표시합니다. 하드웨어가 이 알고리즘과 정확히 일치할 필요는 없습니다. 이 참조에 대한 테스트에는 아래에 나열된 몇 가지 원칙에 따라 "합리적인" 허용 범위가 있어야 하며, 다양한 하드웨어 구현 및 필터 커널 크기를 허용합니다. 그러나 하드웨어 구현에서 허용되는 이러한 유연성은 단순히 선을 그리고 모양을 관찰/측정하는 것 이상으로 Direct3D 10을 통해 애플리케이션에 전달될 수 없습니다.

앤티앨리어스된 선 래스터화그림

이 알고리즘은 가변 가장자리 또는 브레이딩을 최소화하면서 균일한 강도로 비교적 부드러운 선을 생성합니다. 닫기 선에 대한 모이어 패턴화가 최소화됩니다. 종단 간 배치된 선 세그먼트 간의 접합에 대한 적절한 범위가 있습니다. 필터 커널은 가장자리 흐림의 양과 감마 보정으로 인한 강도 변화 사이의 적절한 절충입니다. 적용 범위 값은 출력 병합기 단계인 srcColor * srcAlpha + destColor * (1-srcAlpha)에 따라 다음 수식에 따라 픽셀 셰이더 o0.a(srcAlpha)로 곱합니다.

점 래스터화 규칙(다중 샘플링 제외)

점이 삼각형 래스터화 규칙을 사용하는 Z 패턴의 두 삼각형으로 구성된 것처럼 해석됩니다. 좌표는 1픽셀 너비 정사각형의 중심을 식별합니다. 포인트에 대한 컬링은 없습니다.

다음 그림에서는 몇 가지 예를 보여 줍니다.

점 래스터화그림

다중 샘플 앤티앨리어싱 래스터화 규칙

MSAA(다중 샘플링 앤티앨리어싱)는 여러 하위 샘플 위치에서 픽셀 검사 및 깊이 스텐실 테스트를 사용하여 기하 도형 별칭을 줄입니다. 성능을 향상시키기 위해 적용된 하위 픽셀 간에 셰이더 출력을 공유하여 각 적용된 픽셀에 대해 픽셀당 계산이 한 번 수행됩니다. 다중 샘플 앤티앨리어싱은 표면 별칭을 줄이지 않습니다. 샘플 위치 및 재구성 함수는 하드웨어 구현에 따라 달라집니다.

다음 그림에서는 몇 가지 예를 보여 줍니다.

다중 샘플 앤티앨리어 래스터화그림

샘플 위치 수는 다중 샘플링 모드에 따라 달라집니다. 꼭짓점 특성은 픽셀 셰이더가 호출되는 위치이기 때문에 픽셀 중심에서 보간됩니다(가운데가 적용되지 않으면 외삽이 됩니다). 특성은 픽셀 셰이더에서 중심 샘플링되도록 플래그를 지정할 수 있으며, 이로 인해 덮지 않은 픽셀이 픽셀 영역과 기본형의 교차점에서 특성을 보간합니다. 픽셀 셰이더는 각 2x2 픽셀 영역에 대해 실행되어 파생 계산(x 및 y 델타 사용)을 지원합니다. 즉, 셰이더 호출은 최소 2x2 퀀타(다중 샘플링과 독립적임)를 채우기 위해 표시된 것보다 더 많이 발생합니다. 셰이더 결과는 샘플별 깊이 스텐실 테스트를 통과하는 각 검사된 샘플에 대해 작성됩니다.

기본 형식에 대한 래스터화 규칙은 일반적으로 다음을 제외하고 다중 샘플링 앤티앨리어싱에 의해 변경되지 않습니다.

  • 삼각형의 경우 각 샘플 위치에 대해 검사 테스트가 수행됩니다(픽셀 중심이 아님). 둘 이상의 샘플 위치를 다루는 경우 픽셀 셰이더는 픽셀 중심에서 보간된 특성으로 한 번 실행됩니다. 결과는 깊이/스텐실 테스트를 통과하는 픽셀의 각 적용된 샘플 위치에 대해 저장(복제)됩니다.

    선은 두 개의 삼각형으로 구성된 사각형으로 처리되며 선 너비는 1.4입니다.

  • 지점의 경우 각 샘플 위치에 대해 검사 테스트가 수행됩니다(픽셀 중심이 아님).

많은 형식은 다중 샘플링을 지원합니다(direct3D 10 형식에 대한 하드웨어 지원참조) 일부 형식을 확인할 수 있습니다(ResolveSubresource; 다중 샘플링 형식을 샘플 크기 1로 다운샘플링). 다중 샘플링 형식은 셰이더에서 액세스하는 개별 샘플에 대한 확인이 필요하지 않으므로 로드사용하여 셰이더로 다시 읽을 수 있는 렌더링 대상에서 사용할 수 있습니다. 깊이 형식은 다중 샘플 리소스에 지원되지 않으므로 깊이 형식은 렌더링 대상으로만 제한됩니다.

예를 들어 R8G8B8A8_TYPELESS 형식은 리소스 뷰가 다양한 방식으로 데이터를 해석할 수 있도록 다중 샘플링을 지원합니다. 예를 들어 R8G8B8A8_TYPELESS 사용하여 다중 샘플 리소스를 만들고, R8G8B8A8_UINT 형식의 렌더링 대상 보기 리소스를 사용하여 렌더링한 다음, R8G8B8A8_UNORM 데이터 형식으로 콘텐츠를 다른 리소스로 확인할 수 있습니다.

하드웨어 지원

API는 품질 수준 수를 통해 다중 샘플링에 대한 하드웨어 지원을 보고합니다. 예를 들어 0 품질 수준은 하드웨어가 다중 샘플링을 지원하지 않음을 의미합니다(특정 형식 및 품질 수준). 품질 수준 3은 하드웨어가 세 가지 샘플 레이아웃 및/또는 해결 알고리즘을 지원한다는 것을 의미합니다. 다음을 가정할 수도 있습니다.

  • 다중 샘플링을 지원하는 모든 형식은 해당 패밀리의 모든 형식에 대해 동일한 수의 품질 수준을 지원합니다.
  • 다중 샘플링을 지원하고 _UNORM, _SRGB, _SNORM 또는 _FLOAT 형식을 포함하는 모든 형식도 해결을 지원합니다.

다중 샘플링 앤티앨리어싱 시 특성의 중심 샘플링

기본적으로 꼭짓점 특성은 다중 샘플링 앤티앨리어싱 중에 픽셀 중심으로 보간됩니다. 픽셀 중심이 적용되지 않으면 특성이 픽셀 가운데로 추정됩니다. 중심 의미 체계를 포함하는 픽셀 셰이더 입력(픽셀이 완전히 덮이지 않았다고 가정)이 픽셀의 덮인 영역 내 어딘가에 샘플링되는 경우 적용된 샘플 위치 중 하나에서 샘플링될 수 있습니다. 샘플 마스크(래스터라이저 상태로 지정됨)는 중심 계산 전에 적용됩니다. 따라서 마스킹된 샘플은 중심 위치로 사용되지 않습니다.

참조 래스터라이저는 다음과 유사한 중심 샘플링의 샘플 위치를 선택합니다.

  • 샘플 마스크는 모든 샘플을 허용합니다. 픽셀을 덮거나 샘플이 적용되지 않는 경우 픽셀 중심을 사용합니다. 그렇지 않으면 픽셀 중심에서 시작하여 바깥쪽으로 이동하는 첫 번째 적용된 샘플이 선택됩니다.
  • 샘플 마스크는 샘플을 제외한 모든 샘플을 해제합니다(일반적인 시나리오). 애플리케이션은 단일 비트 샘플 마스크 값을 순환하고 중심 샘플링을 사용하여 각 샘플의 장면을 다시 렌더링하여 멀티패스 슈퍼 샘플링을 구현할 수 있습니다. 이렇게 하려면 애플리케이션이 파생 항목을 조정하여 더 높은 텍스처 샘플링 밀도를 위해 적절하게 더 자세한 텍스처 밉을 선택해야 합니다.

다중 샘플링 시 파생 계산

픽셀 셰이더는 항상 최소 2x2 픽셀 영역을 사용하여 실행하여 파생 계산을 지원합니다. 이 계산은 인접 픽셀의 데이터 간에 델타를 가져와 계산됩니다(각 픽셀의 데이터가 가로 또는 세로 단위 간격으로 샘플링되었다고 가정). 다중 샘플링의 영향을 받지 않습니다.

중심 샘플링된 특성에서 파생상품이 요청되면 하드웨어 계산이 조정되지 않으므로 부정확한 파생상품이 발생할 수 있습니다. 셰이더는 렌더링 대상 공간에서 단위 벡터를 예상하지만 다른 벡터 공간과 관련하여 단위가 아닌 벡터를 가져올 수 있습니다. 따라서 중심 샘플링된 특성에서 파생 항목을 요청할 때 주의해야 하는 것은 애플리케이션의 책임입니다. 실제로 파생상품과 중심 샘플링을 결합하지 않는 것이 좋습니다. 중심 샘플링은 기본 형식의 보간된 특성이 추정되지 않는 것이 중요한 경우에 유용할 수 있지만, 기본 가장자리가 픽셀을 교차하는 위치로 이동하는 것처럼 보이는 특성 또는 LOD를 파생시키는 텍스처 샘플링 작업에서 사용할 수 없는 파생 항목과 같은 장단점이 함께 제공됩니다.

래스터라이저 스테이지