2014-03-25 2 views
1

멀티 샘플링에서 래스터 화하는 동안 각 픽셀에 둘 이상의 샘플 포인트가 있으며 샘플 포인트가 결정되어 프리미티브를 구성합니다.파이프 라인의 멀티 샘플링

픽셀의 각 샘플에 대해 동일한 속성이 있습니까? 색상 및 텍스처 값은 동일하지만 픽셀의 샘플에 대한 깊이 및 스텐실 값은 다릅니다. 그러나 조각 쉐이더가 각 샘플 포인트에 대해 실행될 때마다 달라야합니다.

또한 여러 샘플이 파이프 라인에서 해결되는 경우 프래그먼트 셰이더? 그리고 그것들은 선형 적으로 평균을 내고 있습니까?

답변

6

먼저 멀티 샘플링이 어떻게 작동하고 왜 생성되었는지 알아야합니다.

앤티 앨리어싱의 관점에서 멀티 샘플링 텍스처가 GL3에 도입 될 때까지 멀티 샘플링의 주요 사용 사례 였기 때문에 앤티 앨리어싱의 관점에서이 문제에 접근하려고합니다.

무언가가 멀티 샘플링되면 이는 각 샘플 포인트에 여러 개의 샘플이 있음을 의미합니다. 이 샘플들은 프리미티브가 상대적으로 균일 한 특성을 가지면 (예 : 모든 곳에서 동일한 깊이를 가짐) 스마트 GL/하드웨어 구현이 이러한 상황을 식별하고 공유 샘플을 지능적으로 읽거나 쓰는 방법으로 메모리 대역폭을 줄일 수 있다면 서로 동일 할 수 있습니다/깊이 버퍼 압축). 그러나 4x MSAA 프레임 버퍼에 필요한 저장 장치의 비용은 4x SSAA와 동일합니다. GL은 4 개 샘플 각각이 고유 한 최악의 시나리오를 수용해야하기 때문입니다.

픽셀의 각 샘플마다 어떤 속성이 동일합니까? 각 속성이 샘플링 될

등 색상, 텍스처 좌표보다는 4X 앨리어싱을 달성하기 위해 자주 프래그먼트 쉐이더 4X 호출과 같은 속성에 대한 복수의 샘플 포인트를 커버 할 수있다 각각의 단편을, 트릭 고안했다 단편 중심에서 (기본값 임) 커버 된 샘플 위치 각각에 단일 출력이 기록됩니다. 기본 동작은 조각의 중심이 실제 커버리지 영역의 일부가 아닌 상황에서 다소 부족합니다.이 경우 중심 점 샘플링이 도입되었습니다 ... 꼭지점 속성은 조각 내의 프리미티브 커버리지 영역의 중심에서 보간됩니다 조각 자체의 중심보다는 오히려.

나중에 프레임 버퍼에 색을 쓸 때가되면이 모든 샘플을 평균하여 단일 픽셀을 생성해야합니다. 우리는이 다중 샘플 분석을 호출합니다. 이는 일부 작업에는 적합하지만 조각 쉐이딩 중에 발생하는 앨리어싱 문제는 해결하지 못합니다.

프래그먼트 셰이더를 실행하는 동안 텍스처링이 발생합니다. 텍스처링을위한 샘플 빈도가 그대로 유지되므로 MSAA는 일반적으로 텍스처 앨리어싱을 지원하지 않습니다. 따라서 동안 supersample 앨리어싱은 일반적으로 만 감소 멀티 샘플링, 형상 엣지 텍스처/쉐이더 에일리어싱 (반사 하이라이트 같은 것)에 에일리어싱을 모두 향상 "계단 현상."

색상 및 질감 값은 동일하지만 픽셀의 샘플에 대한 심도 및 스텐실 값은 다릅니다.

즉, 조각 쉐이더에서 계산되는 모든 항목은 모든 대상 샘플에 대해 동일합니다. 결정될 수있는 것이 무엇이든 전에 쉐이딩 (예 : 깊이)이 다를 수 있습니다.

깊이/스텐실과 같은 조각 테스트가 각 하위 샘플에 대해 평가됩니다. 그러나 다중 샘플 깊이 버퍼에는 몇 가지 제한 사항이 있습니다. D3D 10.1까지 하드웨어는 멀티 샘플 깊이 텍스처를 지원할 필요가 없었으므로 멀티 샘플링 깊이 버퍼를 프래그먼트 셰이더에서 샘플링 할 수 없었습니다.

그러나 조각 쉐이더가 각 샘플 포인트에 대해 실행될 때마다 달라야합니다.

샘플 음영이라는 기능이 있는데, MSAA를 구현할 때 음영 처리 된 조각과 래스터 화 중에 생성 된 샘플 간의 비율을 향상시켜 SSAA와 유사한 기능을 수행 할 수 있습니다. 그러나 기본적으로 설명하는 동작은 멀티 샘플링이 아닙니다.

다중 샘플은 파이프 라인에서 언제 해결됩니까? 조각 셰이더? 그리고 그것들은 선형 적으로 평균을 내고 있습니까?

멀티 샘플 해상도는 후 조각 음영, 당신이 singlesampled 버퍼로 멀티 샘플링 버퍼의 내용을 작성해야 언제든지 발생합니다. 여기에는 glBlitFramebuffer (...)과 같은 내용이 포함됩니다. 멀티 샘플링 텍스처를 사용하는 경우 에서 프래그먼트 셰이더를 직접 수동으로 구현할 수도 있습니다.

마지막으로, 멀티 샘플 해상도에 사용되는 프로세스는 샘플 레이아웃과 마찬가지로 구현에 따라 다릅니다. 디스플레이 드라이버의 제어판을 열어 사용할 수있는 무수히 많은 앤티 앨리어싱 옵션을 살펴 본다면 샘플 레이아웃과 MSAA 해결 알고리즘에 대한 여러 옵션이 표시됩니다.


나는 당신이 this article을 살펴볼 것을 강력히 제안 할 것이다. D3D10 +와 OpenGL은 관련이 없지만 일반적인 규칙은 두 API에 모두 적용됩니다 (D3D9의 규칙은 약간 다릅니다). 다이어그램의 품질은 놀랍습니다. 특히

이 상태 삼각형에 대한 MSAA 래스터 규칙 섹션에 특별한주의를 지불 :

삼각형의 경우, 커버리지 테스트 (안 픽셀 센터) 각 샘플의 위치를 ​​수행한다. 둘 이상의 샘플 위치가 포함되는 경우 픽셀 쉐이더는 픽셀 중심에서 보간 된 속성을 사용하여 한 번 실행됩니다. 결과는 깊이/스텐실 테스트를 통과 한 픽셀의 각 대상 샘플 위치에 저장 (복제)됩니다.

관련 문제