Direct3D 11.3 보수적 래스터화
보수적인 래스터화는 픽셀 렌더링에 몇 가지 확실성을 추가하며, 이는 특히 충돌 감지 알고리즘에 유용합니다.
개요
보수적 래스터화는 렌더링된 기본 형식으로 적어도 부분적으로 적용되는 모든 픽셀이 래스터화됨을 의미하며, 이는 픽셀 셰이더가 호출됨을 의미합니다. 일반적인 동작은 샘플링이며, 보수적인 래스터화를 사용하는 경우 사용되지 않습니다.
보수적 래스터화는 충돌 감지, 폐색 컬링 및 가시성 검색의 확실성을 포함하여 다양한 상황에서 유용합니다.
예를 들어 다음 그림에서는 보수적인 래스터화를 사용하여 렌더링된 녹색 삼각형을 보여 있습니다. 갈색 영역은 "불확실성 지역"으로 알려져 있습니다 - 반올림 오류 및 기타 문제가 삼각형의 정확한 크기에 약간의 불확실성을 추가하는 지역입니다. 각 꼭짓점의 빨간색 삼각형은 불확실성 영역이 계산되는 방식을 보여 줍니다. 큰 회색 정사각형은 렌더링될 픽셀을 보여 줍니다. 분홍색 사각형은 삼각형의 가장자리가 픽셀의 가장자리를 교차할 때 재생되는 "왼쪽 위 규칙"을 사용하여 렌더링된 픽셀을 표시합니다. 시스템에서 항상은 아니지만 정상적으로 선별하는 거짓 긍정(존재하지 않았어야 하는 픽셀 세트)이 있을 수 있습니다.
파이프라인과 상호 작용
보수적 래스터화가 그래픽 파이프라인과 상호 작용하는 방법에 대한 자세한 내용은 D3D12 보수적 래스터화를 참조하세요.
구현 세부 정보
Direct3D 12에서 지원되는 래스터화 유형을 "과대 평가된 보수적 래스터화"라고도 합니다. "과소 평가된 보수적 래스터화"라는 개념도 있습니다. 즉, 렌더링된 기본 형식으로 완전히 덮인 픽셀만 래스터화됩니다. 과소 평가된 보수적 래스터화 정보는 입력 검사 데이터를 사용하여 픽셀 셰이더를 통해 사용할 수 있으며, 과대 평가된 보수적 래스터화만 래스터화 모드로 사용할 수 있습니다.
기본형의 일부가 픽셀과 겹치면 해당 픽셀이 검사되는 것으로 간주되어 래스터화됩니다. 기본형의 가장자리 또는 모서리가 픽셀의 가장자리 또는 모서리를 따라 떨어지면 구현에 따라 "왼쪽 위 규칙"이 다르게 적용됩니다. 그러나 퇴화 삼각형을 지원하는 구현의 경우 가장자리 또는 모서리를 따르는 퇴화 삼각형은 하나 이상의 픽셀을 검사해야 합니다.
보수적인 래스터화 구현은 다양한 하드웨어에 따라 달라질 수 있으며 가양성이 생성되므로 픽셀이 적용되도록 잘못 결정할 수 있습니다. 이는 래스터화에 사용되는 고정 소수점 꼭짓점 좌표에 내재된 기본형 증가 또는 스냅 오류와 같은 구현별 세부 정보로 인해 발생할 수 있습니다. 고정 소수점 꼭짓점 좌표와 관련하여 거짓 긍정이 유효한 이유는 구현에서 스냅 후 꼭짓점(즉, 부동 소수점에서 래스터라이저에 사용되는 16.8 고정 소수점으로 변환된 꼭짓점 좌표)에 대한 검사 평가를 수행하지만 원래의 부동 소수점 꼭짓점 좌표에서 생성된 검사를 사용할 수 있도록 허용하는 데 약간의 거짓 긍정이 필요하기 때문입니다.
보수적인 래스터화 구현은 비제너화 후 스냅 기본 요소에 대한 부동 소수점 꼭짓점 좌표와 관련하여 가음성이 생성되지 않습니다. 기본 형식의 일부가 픽셀의 일부와 겹치면 해당 픽셀이 래스터화됩니다.
퇴화 삼각형(인덱스 버퍼의 인덱스 중복 또는 3D의 공선형) 또는 고정 소수점 변환 이후의 퇴화 삼각형(래스터라이저의 공선형 꼭짓점)은 선별되거나 선별되지 않을 수 있으며, 둘 다 유효한 동작입니다. 퇴화 삼각형은 뒷면으로 간주해야 하므로 애플리케이션에 특정 동작이 필요한 경우 뒷면 선별을 사용하거나 앞면을 테스트할 수 있습니다. 퇴화 삼각형은 모든 보간 값에 대해 0 꼭짓점에 할당된 값을 사용합니다.
하드웨어에서 이 기능을 지원하지 않을 가능성 외에도 세 가지 계층의 하드웨어 지원이 있습니다.
- 계층 1은 1/2픽셀 불확실성 영역을 지원하며 스냅 후 퇴화되지 않습니다. 타일식 렌더링, 텍스처 아틀라스, 조명 맵 생성 및 하위 픽셀 섀도 맵에 적합합니다.
- 계층 2는 스냅 후 퇴화 및 1/256 불확실성 영역을 추가합니다. 또한 CPU 기반 알고리즘 가속(예: 복셀화)에 대한 지원을 추가합니다.
- 계층 3은 1/512 불확실성 영역, 내부 입력 범위를 추가하고 폐색 컬링을 지원합니다. 입력 범위는 HLSL(High Level Shading Language)에 새 값을
SV_InnerCoverage
추가합니다. 이는 픽셀 셰이더에 대한 입력 시 지정할 수 있는 32비트 스칼라 정수이며, 과소 평가된 보수적 래스터화 정보(즉, 픽셀이 완전히 커버되도록 보장되는지 여부)를 나타냅니다.
API 요약
다음 메서드, 구조체, 열거형 및 도우미 클래스는 보수적 래스터화를 참조합니다.
- D3D11_RASTERIZER_DESC2 : 래스터라이저 설명을 만들기 위한 CD3D12_RASTERIZER_DESC2 도우미 클래스를 가리키는 래스터라이저 설명을 포함하는 구조체입니다.
- D3D11_CONSERVATIVE_RASTERIZATION_MODE : 모드의 열거형 값(켜기 또는 끄기)입니다.
- D3D11_FEATURE_DATA_D3D11_OPTIONS2 : 지원 계층을 보유하는 구조체입니다.
- D3D11_CONSERVATIVE_RASTERIZATION_TIER : 하드웨어에서 지원하는 각 계층의 열거형 값입니다.
- ID3D11Device::CheckFeatureSupport : 지원되는 기능에 액세스하는 메서드입니다.