DirectX12

[DirectX12] 안티 앨리어싱

wnstjd 2024. 1. 27. 17:16

앨리어싱 효과(계단 현상)

모니터의 픽셀의 크기는 무한히 작을 수 없기 때문에 모니터 화면에 선을 출력할 때 완벽한 선을 출력할 수는 없다. 

https://lipcoder.tistory.com/22

이러한 것을 앨리어싱 효과(계단 현상)이라고 한다.

그리고 이 문제를 해결하기 위한 기법들을 안티 앨리어싱이라고 한다.  

 

 

MSAA

MASS는 멀티 샘플링이라는 DirextX에서 지원하는 안티 앨리어싱의 한 기법이다. 

 

MSAA은 우선 후면 버퍼에 화면의 4배 크기(가로 2배, 세로 2배)로 렌더링을 하고 화면에 랜더링을 할 때 다운 샘플링을 거쳐 원래 크기로 렌더링 하는 방법이다.

 

후면 버퍼에 화면의 4배 크기로 렌더링을 하면 하나의 픽셀에 4개의 서브 픽셀이 생기는 것과 같은데 이 4개의 픽셀의 색의 평균값을 이용하여 화면에 렌더링될 하나의 픽셀의 색을 정하는 방법을 다운 샘플링이라고 한다.

 

MSAA에서는 아래 그림과 같이 서브 픽셀이 렌더링하는 도형 안에 있다면 색을 칠하고 아니면 색을 칠하지 않는 것으로 서브 픽셀의 색을 정하고  다운 샘플링을 커쳐 최종적으로 렌더링 될 픽섹의 색을 정한다.

https://velog.io/@meong9090/DirectX-%EC%95%88%ED%8B%B0%EC%97%98%EB%A6%AC%EC%96%B4%EC%8B%B1%EC%9D%98-%EA%B8%B0%EB%B2%95-%EB%8B%A4%EC%A4%91%ED%91%9C%EB%B3%B8%ED%99%94Multi-Sampling-%EC%B4%88%EA%B3%BC%ED%91%9C%EB%B3%B8%ED%99%94SuperSampling

 

 

생성

DirectX에서 MASS를 사용하기 위해서는 D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS구조체를 생성하면 된다.

그리고 해당 구조체를 사용하여 디바이스의 CheckFeatureSupport를 통해 품질 수준을 구할 수 있다. 

사용할 수 있는 품질 수준은 0 ~ (NumQuialityLevels - 1)이다. 

 

샘플 개수를 1, 수준을 0으로 설정하면 안티 앨리어싱을 사용하지 않을 수 있다.