슈퍼샘플링 supersampling
컴퓨터 모니터의 픽셀수는 한정적이기 때문에 선을 완벽하게 표현할 수 없다.
따라서 선이 픽셀단위로 깨져서 계단처럼 보이는 계단 현상(stair-step effect) 또는 앨리어싱(aliasing)이 발생한다.
그림판에서 직선을 그으면 자연스럽지 않고 깨져 보이는 예를 떠올릴 수 있다.
모니터의 해상도를 높이지 않고 이러한 문제를 해결할 수 없을까?
이를 해결하는 안티앨리어싱(antialiasing) 기법 중 하나가 슈퍼샘플링(supersampling)이다.
슈퍼샘플링은 후면 버퍼와 깊이 버퍼를 화면 해상도의 4배로 만드는 것이다.
4배 높은 해상도의 후면 버퍼에 렌더링한 후, 화면에 제시할(present) 때에는 4개의 서브픽셀들을 평균한 색상이 한 픽셀의 최종 색상으로 결정된다.
멀티샘플링 multisampling
슈퍼샘플링은 픽셀 처리량과 메모리 사용량이 4배이므로 비용이 크기 때문에 Direct3D에서는 멀티샘플링(multisampling)이라는 절충적인 안티앨리어싱 기법을 제공한다.
멀티샘플링에서도 후면 버퍼와 깊이 버퍼의 픽셀수를 4배로 늘리지만, 슈퍼샘플링에서는 4개의 서브픽셀 각각에 대해 색상을 따로 계산한다면 멀티샘플링에서는 픽셀당 한 번만 계산한다는 차이가 있다.
서브픽셀마다 depth/stencil 테스트를 하고, 서브픽셀의 중심이 도형의 내부에 덮여 있는지 여부를 이용해 픽셀의 최종 색상을 결정한다.
위의 그림은 다각형의 한 변에 위치한 픽셀에 대해 멀티샘플링이 일어나는 것을 보여준다.
중앙이 다각형의 내부에 덮여있는 3개의 서브픽셀에 픽셀 중심에서의 색상이 저장된다.
이후 네 서브픽셀의 색상을 평균하여 픽셀의 색상이 결정된다.
다각형의 변에서 좀더 연한 색상으로 그려지면서 비교적 매끄러운 형태가 된다.
Direct3D에서 멀티샘플링
멀티샘플링을 위해서 swap chain과 depth buffer에 대해 DXGI_SAMPLE_DESC를 채워야 한다.
typedef struct DXGI_SAMPLE_DESC {
UINT Count;
UINT Quality;
} DXGI_SAMPLE_DESC, *LPDXGI_SAMPLE_DESC;
Count는 픽셀당 지정할 샘플의 수이고, Quality는 원하는 품질 수준(quality level)을 지정하는데 사용된다.
높은 count나 높은 quality는 비용이 많이 들기 때문에 양과 속도 사이에서 tradeoff를 찾아야 한다.
'그래픽스(DirectX)' 카테고리의 다른 글
[DirectX11] 렌더링 파이프라인 (0) | 2023.05.16 |
---|---|
[Graphics] Ray와 물체의 충돌 판정 알고리즘(AABB/OBB) (0) | 2023.05.14 |
[DirectX11] Direct3D 장치 초기화 (1) | 2023.05.10 |
[DirectX11] Ray와 물체의 충돌 판정 (Intersection) (0) | 2023.05.01 |
[DirectX11] 2D화면 클릭해서 3D물체 선택하기(picking ray) (0) | 2023.04.29 |
댓글