본문 바로가기

그래픽스

Anti Aliasing 기법( MSAA, SSAA, FXAA, SMAA )

컴퓨터 공학에서의

Aliasing 이란 정보를 디지털화 과정에서
필연적으로 일어나는 현상이다.

 

이미지를 처리할때는 Aliasing 이 일어나면 계단현상이 일어나게 되는데

빛 계산이 있는등 인접 필셀과 색 차이가 심할 수록 더 두드러지게 확인된다.

이미지 Aliasing

이런 현상을 개선 하기 위한 기본적인 방법은

경계에 위치한 픽셀에서 인접한 픽셀들의 중간값을 보여줌으로 해서 완화 할 수 있다. 

AA 기본 원리

상황애 따른 많은 AA 방식들이 있지만 게임과 유니티에서 사용 할 수 있는 AA 기법들의 차이점에 대해서 간단히 포스팅 하려고 한다.

 

1.  SSAA ( Super Sampling Anti Aliasing )

 가장 기본적인 AA 기법으로 사실상 가장 품질이 좋다고 할 수 있지만 가장 연산량이 많은 AA 기법이라고 할 수 있다.

가로 세로 2배의 이미지를 렌더링 한 뒤 다시 원본 크기의 이미지로 그려주면서 인접 픽셀을 보간 한다고 생각하면 이해하기 편하다.

샘플링 하는 숫자를 키우면 더 좋은 품질을 얻을 수 있다.

SSAA
SSAA

 

2. MSAA( Multi Sampling AA )
 SSAA가 너무 많은 연산량을 필요로 하기 때문에 연산량을 줄이는게 목적

폴리곤의 경계에 대해서만 여러번 샘플링 한다는 아이디어인데, 이를 위해서 폴리곤 경계를 추출하는 단계가 필요하다.

4번의 샘플링을 통해 모두가 같은 폴리곤 위에 위치하는지 다른 폴리곤에 위치하는지를 판단한다.

다른 폴리곤에 위치한다면 경계에 해당하므로 SuperSampling 한다.

단점은 폴리곤 경계만 추출하다보니 물체내에 있는 텍스쳐에 대해서는 AA가 되지 않는다.

 

단점에도 불구하고 빠른성능 때문에 게임에서 많이 사용하다보니

그래픽카드에서 하드웨어적으로 지원되는 경우가 많다.

유니티에서 기본적으로 제공한다.

MSAA
URP Quality Setting 창에서 MSAA

 

 

3. FXAA ( Fast Approximation Anti Aliasing )

 가장 성능이 좋은 AA 기법, 모든 렌더링이 끝난 뒤 이미지를 기반으로 AA하는 방식이다.

성능 저하가 거의 없기때문에 모바일 게임에서 추천.

 

먼저 이미지 상에서 물체의 경계에 해당하는 부분들을 추출( Edge Detection )해서 해당 부분들에 대한 처리가 이루어 진다.

가장 빠르지만 급격히 변하는 지역에 대해서 정확한 처리가 되지 않는다는 단점이 있다.

 

보통 글자에서 뭉개지는 현상이 크게 일어나기 떄문에 UI나 글자가 많이 나오는 화면에서는 적용하지 않는 것을 추천.

URP를 사용하는 버전의 유니티를 사용한다면 기본적으로 기능을 제공한다.

 

FXAA
유니티 Camera FXAA

4. SMAA( Subpixel Morpholigical AA )

FXAA를 사용 할때 원치 않게 흐려지는 현상을 개선하기 위한 방법

여러개의 필터를 미리 만들어 두고 형태에 맞게 덮어서 효과를 주는 방식

역시 카메라 렌더링이 끝난 이미지 상에서 처리하는 기법이기 때문에

유니티 URP 에서 Camera 컴포넌트에서 설정 할 수 있다.

 

SMAA

 

 

유니티에서 AA 방법들을 적용 할 때 주의할 점은

 

MSAA 와 같은 전역적인 기법과

카메라 컴포넌트에서 설정하는 FXAA, SMAA 가 중복해서 처리 되지 않도록 하는 것이다.

 

MSAA 를 통해 전반적인 AA를 하는게 가장 품질이 좋지만 성능을 생각하면 FxAA를 추천한다.

FxAA를 적용 할때는 UI Camera와 게임화면 Camera를 구분해서 적용하는 것을 추천 ( UI Camera는 Fxaa 적용 x )