E,AHRSS

안티에일리어싱

last modified: 2015-02-12 17:03:15 Contributors

안티에일리어싱.png
[PNG image (Unknown)]


Contents

1. 개요
2. FSAA
2.1. Down-Sampling
2.2. SGSSAA/OGSSAA
2.2.1. HSAA
3. Texture Filtering
4. MSAA
4.1. RSAA
4.2. QAA
4.3. CFAA
4.3.1. Tent Filter
4.3.2. Edge-Detect
4.4. CSAA/EQAA
4.5. 멀티GPU AA
5. AAA/TAA
6. TAA
7. FAA
8. MLAA
8.1. CMAA
9. FXAA
10. SMAA
11. TXAA


1. 개요

anti-aliasing

비등방성필터링과 함께 게임에서 주로 사용되는 그래픽 품질향상 기술이다.

렌더링된 컨텐츠를 재생할때, 픽셀조각이 튀는 현상을 Aliasing이라고 하며, 안티에일리어싱은 이를 해결하기 위한 기술이다. 3D그래픽 뿐만 아니라 2D그래픽, 디지탈 카메라의 사진, 디지탈 음원, 촬영된 필름, 디지탈 신호 심지어는 우리 눈에서도 매우 흔하게 일어난다.

Aliasing 발생을 최소화하기 위해서는 재생하는 기기 측의 샘플링 주파수가 원본의 샘플링 주파수의 2배 이상이어야 한다고 하나 우리에게 문제가 되는 벡터그래픽 및 3D그래픽에서 원본-즉 이상적 현실/개념 의 해상도는 무한대로 AA기술만으로는 이론상 해결이 안된다.(이상적인,개념으로 존재하는 직선,원 또는 현실의 물체가 가지는 해상도는 무한대이기에 이를 모니터/TV화면의 제한된 해상도로 출력하는 순간 Aliasing이 일어난다. 무한한 해상도를 가지는 벡터그래픽포멧으로 출력할때는 Aliasing이 일어나지 않지만 다시 제한된 해상도를가지는 디스플레이기기나 비트멥포멧으로 출력하면 결국 Aliasing이 일어난다.) 비트멥그래픽의 경우 원본의 해상도보다 해상도가 줄어들경우 - 다운스케일링 시에 심각한 Aliasing현상을 볼수 있으며 해상도가 증가하는 업스케일링시에도 Aliasing은 발생할수 있다.

3D 그래픽에서 나타나는 '계단 현상' 제거가 대표적이며 현재는 '서브픽셀문제' 제거로 포커스가 옮겨가고 있다.[1] 3D게임에서 필수적으로 쓰이고 있으며 콘솔, PC게임에서 유용하게 사용되고 있고, 성능한계상 제한적이지만 휴대용게임기, 모바일영역에서도 점차 영역이 확대되고 있다.
아래 그림은 5x5 비트맵 그래픽-붉은색 이 5x6 비트맵-파란색으로 업스케일링시 중앙부분에서 Aliasing(붉은색 직선이 파란색으로 비틀리고 있다)이 일어나는경우를 보여주고 있다.
upsampling_aliasing.jpg
[JPG image (Unknown)]


보통 PC 그래픽 드라이버 관리 프로그램에서 손쉽게 안티를 먹일 수 있는데 무리없이 돌아가더라도 그래픽카드 온도가 꽤나 올라가는걸 볼 수 있으니 모든 환경에서 남용하지는 않도록 하자.[2]

2. FSAA


full-scene anti-aliasing, 또는 Super sampling anti-aliasing (SSAA)라고 부르기도 한다. AA는 주변의 사물을 샘플링하는데 배수라는 개념이있는데 여기서 배수는 추출하는 샘플의 개수를 말한다.


x4 SSAA로 4개의 샘플을 추출하여 그곳의 색을 섞는것을 보여준다.

1920x1080 화면을 x4 SSAA를 준다면 3840x2160 해상도로 돌리는 부담을 기기에 주게 된다. 계산량과 메모리 사용량에서 실로 무식하기 짝이없다.

뛰어난 화질을 보여주지만 그에 걸맞는 성능과 메모리가 요구된다. 높은배수에서는 비등방성필터링과 같은 텍스쳐 필터링 효과까지 겸한다. 이는 근원적으로 원본의 정보가 증가하는 것이기 때문에 1/Root(SSAA 배수) 만큼의 거리에 있는것과 마찬가지가 되어버려서 배수가 증가할수록 확연한 체감변화를 가진다. 이러한 필터링 효과가 지나치는것을 막기 위하여 최선의 화질을 위하여는 SSAA사용시 추가적인 LOD의 조절이 필요하게 된다.

현재 최고의 효과를 보여주지만 항상 최선의 결과를 가져오는것은 아니다
수직/수평선에서 확연하게 구별되어야 할 경우에도 색이 섞이게 되어서 선명도가 저하되는것이 눈에 띄는경우가 존재한다. 이는 샘플의 개수를 추가한다고 하여 해결되는것이 아니며 근본적으로 Sampling AA의 한계이다.

대표적인 경우가 글자에 미관을 위하여 SSAA를 걸게 되는데 글자의 크기가 작아지면 가독성이 저하되는 경우이다. 따라서 글자체의 경우 SSAA효과를 줄때 가독성을 해치지 않도록 AA효과가 들어가야 하는 부분과 들어가서는 안되는 부분을 지정하게 되며 이를 힌팅이라고 한다.

힌팅의 적용 유무에 따른 AA효과에 의한 글자의 가독성



2.1. Down-Sampling


현재 컴퓨터 게임에서 가장 일반적이고 유일하게 진정한 SSAA의 구현방법.
샘플링 배수만큼 해상도를 확대 하여 화면을 만들어낸후 (x4 라면 총 4배, 가로2배/세로2배 해상도로) 만들어진 화면을 출력 해상도에 맞춰서 Down-Sampling한다(해상도를 줄여서 색을 섞는다). 이는 일정한 간격의 격자 모양으로 샘플링 하는것과 같은 원리가 되기때문에 OGSSAA 와 혼용하여 부르기도 한다.

Ordered-Grid는 AA용 샘플링 방식에서 가장 원시적인 위치선정이기 때문에 샘플링방식이 비효율적이고 따라서 결과물도 샘플개수에 비해 비효율적이다. 즉 x4 MSAA에서는 제대로 AA가 걸리는 외곽선에 x4 SSAA에서는 제대로 AA가 걸리지 않을수 있다.

화면을 45도 정도 회전시켜서 Down-Sampling SSAA를 준후 이를 다시 45도 회전시켜 원래대로 돌리는 방식으로 마치 Rotate-Sampling과 같은 효과를 주자는 퀄리티 주의자들도 있으나, 일단 품질저하를 최소화하는 회전의 연산량은 제외하더라도 화면을 45도 돌렸을때 들어가는 화면의 픽셀수는 2배이다. 지금도 연산량과 소요 메모리가 터무니 없이 많아서 아무도 안쓰는 SSAA에서 저 방법으로 x4의 효과를 위해서는 지금의 x8 수준의 연산량과 메모리가 들어간다. 덕분에 아무도 그런거 안만들어주고 있다.

Nvidia에서는 드라이버 단에서 쉽게 관련 설정이 가능하도록 하고 추가로 블러링필터를 더하여 DSR(Dynamic Super Resolution) 이라는 이름으로 발표하였다.

2.2. SGSSAA/OGSSAA


Sparse-Grid Supersampling Anti-Aliasing.
Ordered-Grid Supersampling Anti-Aliasing.

Ordered Grid란 모눈과 같이 일정한 간격을 가지는 격자를 말하며 Sparse Grid란 아래와 같이 외곽으로 갈수록 격자의 간격이 좁아지는것을 말한다.
sg.jpg
[JPG image (Unknown)]


구현방식은 샘플링 배수만큼 화면의 시점을 미묘하게 바꿔가며 미묘하게 여러 샘플화면을 만들어내고 최종적으로 이들을 모두 합쳐서 최종 결과물을 만들어낸다.

간단히 말해
x4 Down-Sampling SSAA 는 4배의 화면을 만들어서 하나로 줄이고
x4 SGSSAA / OGSSAA 는 4개의 화면을 만들어서 하나로 합친다.

문제는 구현방식을 읽어보듯 원래의 화면의 정보가 4배가 되는것이 아니라 엄밀히 말하면 서로 다른 4개의 화면을 합치는것이다. 따라서 픽셀경계선을 엄밀하게 만들어내지 못하면 옆 픽셀의 샘플이 들어오며 블러링이 발생한다. 이것을 위하여 사용되는것이 Sparse Grid와 Ordered Grid이다. 3D 상태에서는 중앙에서의 이동거리에 비하여 바깥으로 갈수록 이동거리가 길어지기에 Sparse Grid방식으로 제어할 필요가 있다. 2D 상태에서는 시점 중앙과 바깥의 이동거리가 같기에 Ordered Grid방식으로 제어할 필요가 있다. 이렇게 게임 엔진에 따라 Ordered Grid방식이 블러링이 더 심하거나 Sparse Grid방식이 블러링이 더 심할수 있다. 여기에 설상가상으로 3D 상태에 2D 상태가 부가되는경우 즉 HDR/디퍼드 렌더링과 같이 후처리가 이루어지는 경우 아예 블러링이 통제 불능상태가 될수있다. 또한 이러한 제어과정을 거치면서 프레임 버퍼처리가 호환되지 않는 엔진에서도 블러링이 통제 되지 않는다. 이에따라 블러링을 최소화 하기 위하여 게임 엔진별로 매우 복잡한 호환성과 관련된 옵션제어가 필요해진다. 시스템 사양이 넘쳐나면서 황금눈을 가진사람들은 성능을 위하여 품질을 희생한 SSAA라고 비아냥거린다.

2.2.1. HSAA


Hybrid Sampling Anti-Aliasing.

OGSSAA에 MSAA를 결합한것이다. OGSSAA파트가 독자 작동대신 쉐이더를 사용한다, 이 때문에 DX9에서는 MSAA와 같이 HDR/디퍼드 와 같은 후처리 형태와 상성문제가 생긴다.

3. Texture Filtering


Texture Filtering

Texture와 같이 이미 정해진 비트맵 그래픽을 단순히 거리를 바꾸고 형태를 비틀기만 할 경우 이때 일어나는 Aliasing 해결을 위하여 샘플링 AA를 사용하는것은 비 효율적이다. 이에 텍스쳐에 한하여 일어나는 Aliasing을 대응하는 기술이 Texture Filtering 이다.

하지만 이미 완성된 텍스쳐 그래픽 위에 추가적으로 효과를 입히는 기술들이 생겨나면서 Texture Filtering 만으로는 텍스쳐 내부의 Aliasing에 대하여 충분한 대응이 불가능해졌다.


4. MSAA


Multi Sampling Anti-Aliasing.
SSAA가 지나치게 무식한 성능과 메모리를 요구해서 만들어진 개량법.
폴리곤 외곽선이 지나가는 곳만 Sampling AA효과를 준다.
Coverage Sample-폴리곤 외곽선이 지나가는가를 테스트하는 샘플을 먼저 추출하고(추출된 샘플들이 모두 같은 면 위에 있지 않다면 이건 외곽선이 지나가는 점이다.) 외곽선이 지나갈경우 이 Coverage Sample의 위치에서 Color Sample을 추출하여 이들을 섞는다
만족할만한 화면품질과 성능저하로 오랫동안 AA기술의 표준으로 자리잡았다. 하지만 시간이 지나면서 AA에 대한 욕구증대에 반하여 기기성능이 제한(메모리와 연산량)되는 문제가 크게 다가옴에 따라 후처리AA들에게 많은 자리를 내주고 있다.


2.jpg
[JPG image (Unknown)]


사물로부터 정사각형 모양의 네 방향으로부터 샘플을 채취하는 기본적인 방식으로
Voodoo, GeForceFX가 대표적으로 이 방법을 사용했다.

SSAA에 비하여 훌륭한 향상(엄청난 연산량 감소와 대비되는 작은 품질저하)을 보여주지만 이론상 폴리곤 외곽선만 적용되어 텍스쳐 내부에는 전혀 대응이 안된다. 또 SSAA보다 낫다고는 하지만 사용되는 메모리와 계산량은 상당하다.

또한 그래픽이 완성된 후 후처리가 이루어지는 방식 즉 HDR이나 디퍼드 렌더링의 경우 MSAA가 걸린이후 후처리가 이루어지게 되고 이 경우 완성된 AA이후 이루어지는 후처리는 AA효과를 크게 해치게 되어 DX9에서는 HDR/디퍼드 렌더링과의 상성이 매우 안좋다. 구현은 가능하지만 실질적으로 성능요구가 지나치게 올라가는 경우가 많다. DX10 이후에서는 셰이더 자체를 손볼수 있도록 구조가 변경되면서 MSAA의 Color Sample을 추출하여 섞는 과정을 후처리 이후로 미루도록 만들수 있기때문에 성능문제 없이 해결할수 있다.

참고로 XBOX 360PS3에 성능차가 발생하는것도 AA이 쉽게 걸릴수있느냐에 따라 달라졌는데 같은 작품에도 성능차가 발생하는 멀티작의 경우 360쪽은 EDRAM을 공짜로 주어지는 반면 PS3에는 주어지지 않는다. 따라서 프레임버퍼의 대역폭과 연산문제가 발생할수밖에없고 플삼쪽이 같은 장면을 표현할때 360보다 더 많은 리소스를 필요케하여 베요네타레드 데드 리뎀션과 같이 성능차이가 발생하게되는 것이다.

4.1. RSAA


Rotated Sampling Anti-Aliasing.
기본MSAA의 격자형 대신 샘플 추출을 돌려서 하는것

3.jpg
[JPG image (Unknown)]


샘플링 방향을 살짝 비틀었는데 화질이 더 나아진다. 일반적으로 3D 영상에서 Aliasing이 일어나는 경우는 수직/수평선이 아닌 비스듬한 선이기 때문에 이에 잘대응할수 있는형태(외곽선을 잘 판별할수 있고 Aliasing발생시 적당한 색비율로 샘플이 분포될수 있는 형태)로 Sample을 돌린것이다. 화질이 좋아지기 때문에 현재의 MSAA들은 아래에 보듯 자신들의 노하우에 따라 적당하게 샘플링 하는 위치를 일정간격의 격자모양이 아닌 형태로 비틀어 픽셀내부에 적당한 위치로 분포시켜 배치한다.(이 샘플을 배치하는 위치가 MSAA의 품질을 결정하는 핵심 기술이다.)

msaas.jpg
[JPG image (Unknown)]




4.2. QAA


Quincunx Anti-Aliasing.

1001.jpg
[JPG image (Unknown)]


MSAA와 마찬가지로 샘플을 채취한후 그것을 주변 픽셀들의 샘플들과 엮어서 블렌딩한다. 따라서 MSAA와 같은 수의 샘플을 잡더라도 주변의 샘플을 추가하므로 더 많은 샘플을 추출한것과 같은 효과를 보여줄수 있다. 문제는 주변 샘플이 들어오는 과정에서 상당한 블러링현상이 일어나게된다. 선명도가 지나치게 저하되어 대차게 까이기도 하였다. 특히 UBI에서 주로 이방식을 많이 사용했다.

4.3. CFAA


Custom Filter Anti-Aliasing

QAA와 비슷하게 추가 샘플을 잡지않고 픽셀 주변의 기존 샘플을 가져와서 AA에 추가하는 AMD의 기술.


4.3.1. Tent Filter


QAA로 Nvidia가 삽질을 하는동안 ATI에서 한 삽질


Narrow/Wide 등과 같이 가져오는 거리를 조절할수 있어 상황에 따른 블러링을 통제할수 있다. (정확히는 아예 샘플링 개수를 크게 잡는다고 가정하고 만든 기술) 하지만 주변 샘플을 가져오지 않으면 MSAA와 다를것이 없고 주변 샘플을 가져오면 블러링이 일어난다. 삽질이기는 마찬가지

4.3.2. Edge-Detect


추가적인 샘플을 잡는 방식중 가장 성공한 기술.


주변의 샘플을 가져올때 외곽선을 판별하여 외곽선을 넘나드는 샘플은 덜 가져오고 주로 외곽선을 따라 샘플을 주변에서 가져오는 방식.
블러링을 최소화 하면서 추가적인 샘플 추출 없이 효과를 얻을수 있다. 다만 추가연산없이 더 많은 샘플을 추출한것과 같은 효과를 낸다는 초기 이념은 이미 사라졌다. 외곽선 판단과정에서 추가 연산이 들어가고 CFAA자체가 확실한 품질 향상을 보기 위해서는 샘플의 개수 자체를 크게 잡아야 하기 때문에 훌륭하다는 평가와 동시에 잊혀졌다.

4.4. CSAA/EQAA


Coverage Sample Anti-Aliasing.
Enhanced Quality Anti-Aliasing.

MSAA에 Coverage Sample만을 추가로 잡아서 AA에 적용하는 방법이다.
CSAA는 Nvidia의, EQAA는 AMD의 이름으로 AMD쪽은 배수뒤에 EQ를 붙여서 MSAA와 구별한다.
각각 잡는 개수는 아래와 같다.

추가 Coverage Sample 기본 Coverage Sample+Color Sample
CSAA 2x 0 2 MSAA 2x
EQAA 2x 2 2
CSAA 4x 0 4 MSAA 4x
EQAA 4x, CSAA 8x 4 4
CSAA 16x 12 4
CSAA 8xQ 0 8 MSAA 8x
CSAA 16xQ, EQAA 8x 8 8
CSAA 32x 24 8
0 16 MSAA 16x

Coverage Sample의 수를 늘려서 퀄리티 향상을 꾀하기는 하지만 성능저하도 별로 없고 동시에 품질 향상도 별로 없다. 추가 Coverage Sample을 늘리는것보다 기본 Coverage Smaple+Color Sample의 수를 늘리는게 확실한 품질향상을 가져온다.


4.5. 멀티GPU AA


멀티GPU 환경에서 생성되는 프레임수의 증가를 추구하는 대신 화면 품질향상을 추구하여 같은 화면을 생성한후 AA샘플 위치만 서로 다르게 잡아 합치고 화면 생성시 서로 빚겨가도록 만듬으로서 더 높은 효과를 달성하고자 했다. Nvidia 에서 SLI AA 를 먼저 발표하였고 이후 ATI 에서는 Super AA라는 이름으로 나왔다.
멀티GPU 환경 자체가 일반적으로 FPS증가에 초점이 맞춰지기 때문에 널리 사용되지 않고 있다.



5. AAA/TAA


Adaptive Anti-Alising/Transparency Anti-Aliasing.

AAA는 AMD에서 TAA는 Nvidia에서 부르는 이름이다.
MSAA기술이 텍스쳐 내부의 Aliasing에 전혀 무력한 상황에서 가장 텍스쳐 Aliasing이 눈에 띄는 투명한 부분이 존재하는 텍스쳐에 대응하기 위하여 만들어졌다.
대표적으로 나뭇잎/철조망의 표현등에서 효과가 매우 훌륭하다.

알파 테스팅-내부에 투명부분이 존재하는 텍스쳐를 판단하여 이 텍스쳐들을 제외하고 MSAA를 건후 이 텍스쳐들만 SSAA를 걸어서 두 결과를 합쳐준다.

일반적인 상황에서는 적은 연산량 추가로 나뭇잎등에서 대단히 훌륭한 결과를 보여주지만 일부 특수한 상황에서는 SSAA수준까지 연산량이 폭증할수 있는 문제가 있다

6. TAA


Temporal Anti-Aliasing.

기존의 공간축선의 AA가 아닌 시간축선의 AA.
이전의 프레임버퍼를 보관해뒀다가 이번 프레임버퍼와 합쳐서 새로운 화면을 만드는 방법. 간단히 말해 이전 이미지와 이번 이미지의 중간이미지를 보여주는 방식. 즉 정지 화면에서는 AA가 걸리지않지만 움직이게 되면 AA효과가 나타난다.(움직이는 화면에서 나타나는 Aliasing에 대응하기 위한 기술이니 당연하면 당연한 일이다). TAA의 장점은 프레임에 가해진 MSAA를 TAA의 샘플 개수만큼 증폭시키는 효과를 추가적인 연산량이 거의 없이 가진다는 것이다. 즉 4x MSAA와 2x TAA가 합쳐질경우 8x 의 효과를 추가적인 연산이 거의 없이 가진다.

TAA를 기본적으로 게임 그래픽에서 AA의 배수 증폭효과를 위하여 사용하기 위하여는 정지된 화면에서도 효과를 얻는것이 중요하다.

이에 과거 콘솔에서 탈 기어 솔리드 4, 헤일로 리치, 빌 메이 크라이4등에서 매 프레임을 반 픽셀씩 서로 빚겨가게 렌더링 한후 이 과정에서 얻어지는 동일 샘플링 패턴의 MSAA의 다른 결과를 가지는 프레임을 섞는 방식을 택했다. 하지만 항상 높은 FPS를 꾸준히 내준다고 장담할수 없는 상황에서 프레임간의 변화가 커지면 심한 고스트 현상이 생기게 되는 TAA 특성상 이를 방지하기 위하여 움직임이 크다고 판단될때는 TAA를 끄도록 설계하였다.(이것이 TAA가 정지화면에서 AA효과가 나타나고 움직이면 AA효과가 사라진다고 알려진 이유이다. 즉 정지화면에서도 AA효과가 나타나도록 꼼수를 쓰고 정작 움직일때는 AA 자체를 꺼버린것.)

PC 에서 Nvidia / ATI 양사가 각기 MFAA(2014년) / TAA(2004년) 의 이름으로 드라이버에 추가하였다. 구현요체는 MSAA의 샘플 위치를 ROM이 아닌 RAM에 저장하여 변경가능하게 만들어 매 프레임마다 다른 샘플 위치를 잡는다. 다만 고스팅 효과에 의한 품질저하문제로 인하여 ATI는 60FPS 미만에서는 기능이 꺼지도록 하였고 Nvidia에서는 화이트리스트 제도로 특정게임에서만 기능이 동작하도록 만들었다.
하기 이미지는 각기 ATI TAA 와 Nvidia MFAA 의 개념을 보여준다.
1002.jpg
[JPG image (Unknown)]



TAA의 치명적인 단점은 서로 다른 화면을 섞는 과정에서 필연적으로 외곽선이 붕괴되고 하나의 상이 흐릿하게 분열되어 여러상이 맺히는 고스트 현상이 일어난다는 것이다. 이는 두개의 프레임이 각각 하나의 시간을 의미하는 화면이 아닌, 일정 길이의 시간동안 을 대표하는 화면으로 섞여지기 때문이다.(직관적인 형태로 단순한 알고리즘을 구현할경우 결과적으로 Linear하게 - Box필터 방식으로 구현된다.)

아래 그림에서 하나의 프레임이 시간상 어느정도의 영향을 미치는가에 따른 필터링 방식을 보여준다. 위로 올라갈수록 Temporal Aliasing에 대한 대응능력 즉 품질이 좋아진다.

taa2.jpg
[JPG image (Unknown)]


각 필터링 방식에서 고스트 현상이 일어나는것을 보여준다.
a 와 같은 형태의 원본을 위, 아래로 흔든 상태이다.

a: Comb Filter
b: Box Filter
c: Triangle Filter
d: Gaussian Filter
taa1.jpg
[JPG image (Unknown)]



b의 영상을 확대하여 보여준다. 아래와 같이 특정 주파수에서 흑/백이 역전되었다가 재역전되는 패턴이 나타나게 되며 이것이 외곽선 붕괴로 나타난다.

taa3.jpg
[JPG image (Unknown)]


그렇다면 필터링에 따른 품질 향상이란 무었인가를 보여주는 사진이다.
Temopral AA는 Temporal Aliasing즉 눈의 깜빡임에 의하여 자동차 바퀴나 선풍기 날개의 회전방향과 속도가 비 정상적으로 관측되거나 하는 현상을 해결하기 위하여 만들어졌다.
아래 그림에서 a~e는 Box Filter의 TAA를 준것으로 각기 속도 0,1,2,3,5로 이동한것이다. c와 비교해보면 d,e에서 Temporal Aliasing-이동속도와 방향이 비정상적으로 보이는것이 일어난것을 알수 있다. f는 d를 Gaussian Filter로 TAA한것으로 Temporal Aliasing이 해결되는것을 볼수 있다.

taa4.jpg
[JPG image (Unknown)]



현재 TXAA/SMAA에서 사용되고 있는 TAA부분에서는 이 고스트 현상을 해결하기 위하여 프레임간에 물체의 위치 변화를 분석하여 움직이는 속도와 방향 즉 움직임 벡터를 계산하여 이를 기반으로 움직이는 부분에 대하여 프레임간의 가중치를 주어 다음 프레임에 이전 프레임을 투사하는 방식으로 단일상을 만들어내어 고스트 현상을 해결하였다. 이 구현방식은 사실상 Motion Blur 에 가깝게 동작하기 때문에 추가적인 블러링이 생긴다. 정지된 상에서도 AA샘플의 증폭효과를 위하여 프레임간에 Pixel을 미세하게 위상차를 주어 같은 샘플의 MSAA의 다른 결과를 만들어 내고 있다.


7. FAA


Fragment Anti-Aliasing.

Matrox에서 발표한 AA기술. 후처리 AA기술들의 아이디어-"완성된 화면의 외곽선 만으로 충분하다" 를 처음 고안하여 이용한 기술. FAA발표당시가 2002년이었고 MLAA가 2009년에 발표되었으니 선구자라 부를만 하다.


화면의 각 픽셀을 4x4, 16개의 작은 점으로 분해 체크하여 외곽선을 검출한후 외곽선 픽셀들만을 추출하여 이 외곽선픽셀들을 적절한 삼각형 형태로 만들어 색상을 섞어서 AA효과를 준다.
MSAA와 후처리AA의 과도기적인 기술로 외곽선 검출에서는 MSAA에 가깝고 AA효과가 들어가는방식 자체로는 후처리AA에 가깝다. 제대로 AA가 들어가면 매우 훌륭한 결과물을 보여준다.

하지만 일단 외곽선 검출 방식 자체가 세련되지 못하여 비효율적이고 AA효과가 오직 외곽선으로 판별된 픽셀에만 주어지므로 효과가 매우 제한된다, 그 결과 그림자나 셰이더 효과들에 적절하게 대응하지 못하며 AA효과가 제대로 들어가지 않거나 아예 들어가지도 않는 경우가 다발하고 성능향상 또한 지금의 후처리AA만큼 좋지 못했다. 사실상 염가 MSAA x16처럼 동작한다.(MSAA x16보다 낮은 연산량 낮은 품질)

더구나 당시 기술과 동시에 발매한 카드 파헬리아512 의 가격은 일반 게이머 용도라기 너무 지나쳤고 3D가속 성능은 또한 지나치게 낮았다. 여기에 얼마 안 있어 Matrox회사 자체가 게이밍용 그래픽카드시장에서 손을 털고 일반인이 아닌 방송/비디오편집가들을 위한 전문시장에만 주력하게 됨으로써 이 아이디어는 오랫동안 잠자게 된다.

8. MLAA


Morphological Anti-Aliasing.

PS3에서의 사용례



2009년 SIGGRAPH에서 최초로 발표된 AA기법으로 주로 PS3환경에서 주로 사용되고 있다. 인텔에서 개발하였다. PS3갓 오브 워에 적용하면서 유명세를 탄 기술이다. MLAA는 x4~x16 SSAA수준의 AA효과를 x2 SSAA수준의 성능 하락으로 제공하는 것으로 명성을 올린바 있다. 하지만 이러한 성능향상 효과는 해상도 증가에 따라 급격히 줄어들기 때문에 낮은 해상도에 기반한 콘솔게임들에 특화되었다고 할수 있다.

1003.jpg
[JPG image (Unknown)]


이미 완성된 NO AA이미지에 후처리 형식으로 외곽선의 형태를 파악하여 원래의 형태를 예측, 거기에 적절한 중간색을 넣어 외곽선에 일어나는 계단을 완화시키는 방식이다. MLAA는 별도의 프레임버퍼용량은 잡아먹지 않지만 형태 분석을 위한 연산량이 엄청나게 된다. PS3의 VRAM이 모자라고 대신 SPU가 남아도는 환경에 적합한 AA인 것이다. AMD에서는 이 연산을 CPU대신 자사의 GPU로 가속하는 방식으로 드라이버에 추가하여 AMD의 대표적인 AA로서 알려졌다.


MLAA로 인한 이점은 다음과 같다.
- 메모리 절약
2배수 MSAA를 적용시 G버퍼(게임 화면 정보)용량은 약 14MB 정도에 달하게 되는데, MLAA 를 쓰게된다면 이 용량이 절반으로 줄어 7MB 가 절감되어 메모리 확보에 획기적이다.

- 대역폭 절약
G버퍼의 용량이 줄었다는 것은 대역폭이 그만큼 확보되는 것을 의미하고 대역이 늘어난 만큼 광원등 추가 효과를 넣어 줄수 있게 된다.

- 필레이트 절약
필레이트 가 절감된다는 것은 반투명 효과를 처리할수있는 리소스가 늘어나는 것을 의미한다.

- 텍스쳐에 대한 AA효과
기존의 MSAA가 폴리곤 외곽에 대하여만 적용되었던데 반하여 SSAA와 같이 화면 전체에 걸리게 되므로 대응하지 못하던 폴리곤 내부의 텍스쳐에서 일어나는 Aliasing에 대응할수 있게 되었다(다만 텍스쳐의 복잡도가 높아져 버릴경우 알고리즘상 문제로 인하여 텍스쳐에 원하는 형태로 AA가 걸리지 않는다. 즉 텍스쳐에 블러링이 생겨버린다.)

- 강력한 호환성
PC환경에서 강제로 AA를 줄경우 게임엔진등과의 상성문제로 인하여 AA를 강제설정하여도 AA가 적용되지 않는 경우가 매우 흔하게 발생하였으나, MLAA의 경우 최종 이미지에 후처리를 가하는 후처리AA이기 때문에 적용되지 않는 경우 없이 완벽한 적용가능 호환성을 보여주었다. 이는 하기 FXAA에서 어느엔진에나 쉽고 빠르게 포팅 가능한 장점으로 나타나게 된다.

하지만 문제점도 있다.
MLAA는 후처리로 완성된 화면을 분석할 뿐이니 렌더링 단계에서 생겨나는 왜곡은 극복할수없다. 전선등 표현되는 그래픽의 내용이 화면의 점 하나보다 적어지는 상태 - 서브픽셀 문제에 대하여 이미 완성된 화면에서 분석하기 때문에 전혀 대응이 불가능하다. 그리고 철조망등 분석하는 형태가 지나치게 복잡한 경우 - 즉 밀도가 지나치게 높아서 최종 결과물의 정보만으로 원상태를 예상하기 힘든경우 형태분석결과가 매우 안좋게 된다. 또한 반투명 오브젝트가 알파 커버로 처리된 경우, 디더링 현상(제한된 색을 이용하여 음영이나 색을 나타내는 것이며, 여러 컬러의 색을 최대한 맞추는 과정)이 일어나는 부분의 아티팩트가 심하게 증폭된다.



확대된 사각형에서 보여주듯 서브픽셀 Aliasing이 일어나고 있다. 이것은 근본적으로 샘플링 AA를 거치지 않고서는 해결되지 않는데 애초에 PS3는 MSAA에 취약한 구조를 지니고 있고 MSAA의 대안책으로 MLAA를 개발한것이다.

1004.jpg
[JPG image (Unknown)]


SSAA 16x와 비교하여 MLAA의 서브픽셀문제를 보여준다.

AMD에서는 자사 드라이버에 구현된 MLAA의 FXAA에 대한 상대적인 연산시간 과다를 해결하기 위하여 7xxx 카드 대응으로 MLAA 2.0을 내놓게 된다. AA를 위한 연산시간의 엄청난 감소- 연산량 대폭 절감 - FPS 증가를 이루어냈고 동시에 화질향상또한 이루었다.(후처리계의 최대 단점으로 지목된 텍스쳐왜곡-블러링 현상을 크게 완화했다.) 하지만 내부적 렌더링 과정의 정보를 이용하는 과정에서 메모리 사용량이 증가하고, 호환성 문제 - 즉 엔진에 따라 적용되지 않는 경우가 생겨버렸다. (MLAA 2.0의 경우 FXAA에 비해 약간더 시간이 걸리지만 MLAA/FXAA의 공통적인 최대 약점인 텍스쳐 블러링과 문자 왜곡현상이 크게 줄어서 FXAA보다 조금더 성능을 요구하고 품질하락이 조금 덜한 기술 이라고 인식되지만 이경우 차라리 MLAA 2.0보다 조금더 성능을 요구하면서 좀더 품질이 좋고 GPU를 가리지 않는 SMAA 1x라는 선택지가 있다.)


8.1. CMAA


Conservative Morphological Anti-Aliasing

MLAA 의 가장 최근 발전형.
인텔에서는 후처리 AA에 있어 가장 심각하게 제기된 문제인 원본을 해친다는 점(블러링의 발생, 특히 디테일한 부분의 파괴)의 개선과 MLAA의 문제인 높은 계산량을 동시에 해결하는 방법으로서 CMAA를 발표한다.

MLAA와 같이 외곽선을 검출하되 MLAA가 외곽선 전체를 분석 예측하려는것과 달리 문제가 될만한 외곽선만을 판별하고 나머지는 손대지 않는다. 이를통하여 분석해야 하는 양을 줄이면서 제대로 예측되지 않은 AA효과가 들어감으로서 파괴되는 디테일한 부분을 상당히 보존할수 있게 된다.

같은 MLAA의 발전선에 있는 SMAA 1x과 비교하여 좀더 빠르고 외곽선에 의한 원본 예측이 극히 어려운 상황(글자나 극히 작은 디테일)에 있어서 나은 효과를 보여주지만 전체적인 이미지의 품질은 떨어진다.

인텔에서 CMAA발표에서 비교한 후처리 AA별 이미지 품질


9. FXAA


Fast Approximate Anti-Aliasing.

NVIDIA의 직원 티머시 로티스(Timothy Lottes)가 고안하여 공개한 후처리 AA기술.
FXAA는 전통적인 MSAA와 같은 종류의 고성능 근삿값을 제공한다. 일종의 픽셀 셰이더로서 MLAA와 마찬가지로 목표 게임의 렌더링 파이프라인 이후에 이루어지는 후처리 단계이다. 하지만 AMD의 MLAA와 같이 다이렉트 컴퓨트를 사용하는 것이 아니라 단순한 후처리 셰이더를 사용하고, 어떤 GPU 계산 API에도 의존하지 않도록 고안되었다. 따라서 FXAA는 특별히 그래픽카드를 선호하지 않으며, 어떠한 그래픽엔진에도 매우 쉽고 빠르게 적용될 수 있다.

MSAA와 비교하여 FXAA의 목표는 더 빠르고 메모리 점유율이 더 낮으며, 픽셀이 흐릿해지는 현상이 일어나지 않는다는 장점이 있다.

FXAA는 화면의 밝깃값을 분석하여 이것이 급격히 바뀌는 곳을 기반으로 외곽선을 추출하고, 이 외곽선에 90도 방향으로 AA효과를 넣는 방식으로 되어있다. 따라서 이 외곽선의 길이가 충분히 확보되지 않을 경우 효과를 특정하기 힘들어지며 이는 복잡하게 변화하는 구조, 특히 문자 등에서 심각하게 문제가 된다. 전반적으로 고해상도 텍스쳐 등 세밀한 표현이 일어나는 곳에서 심한 블러링 효과가 일어난다.

FXAA는 현재 3.11 까지 공개되어있으며 콘솔용으로 최적화된 FXAA 3.11 Console 과 PC용의 FXAA 3.11 Quality가 있다. Nvidia의 프리젠테이션에서 FXAA Quality 기본 프리셋에서 1080p화면이 GTX580 에서 0.39 ms/frame, GTX460에서 0.88 ms/frame이 걸리는 것으로 나타나고 있다. 콘솔용으로 최적화된 FXAA Coonsole의 경우 720p 화면이 XBOX360 에서 1 ms/frame, PS3에서 1.2 ms/frame이 걸리는것으로 나타나고 있다.

현재 범용적으로 사용되는 AA기술중에서 가장 성능저하가 적으면서 준수한 품질을 보여주는 기술로 인정받고 있다. (다르게 말하면 실용적인 AA기술들 중에서 가장 빠르면서 가장 품질이 나쁘다고 할 수 있다.)

티머시 로티스의 실험적 진행방향은 서브픽셀문제와 충분한 외곽선 확보를 동시에 얻기 위하여 내부적으로 SSAA와 유사한 방식과 결합하는 방법을 고안중인 것으로 보였다.(화면 자체를 1.5배정도 확대 생성하여 FXAA를 걸고 다시 다운샘플링-축소 하는 방식.)

10. SMAA


Subpixel Morphological AntiAliasing.

SMAA2.jpg
[JPG image (Unknown)]


유로그래픽포럼2011에서 크라이엔진3로 처음 SMAA를 시연해보였다.
기존의 MLAA을 진보시킨 것으로 기본적으로는 MLAA의 엄청난 연산량을 해결하기 위하여 형태 분석을 실시간으로 연산하지 않고 적당한 형태에 맞는 필터들을 미리 생성해놓고 형태에 맞게 덮어서 효과를 주는 방식으로 연산량문제를 크게 해결하였으며, 문자에서의 문제해결및 급격히 형태가 변하는 모서리에 대한 대응, 외곽선에서 일어나는 그라데이션을 위한 외곽선 판별알고리즘의 개선등 특정상황들에 맞춰 화질 향상을 위한 상황대응기능들을 추가하였다.

또 여기에 추가적으로 후처리 AA의 최대단점으로 지적되었던 서브픽셀문제를 해결하기 위하여 TAA, MSAA와 결합하는 방식을 추가하였다.

SMAA 1x : MLAA의 개량형 후처리 AA
SMAA S2x = MSAA 2x + SMAA 1x
SMAA T2x = TAA 2x + SMAA 1x
SMAA 4x = MSAA 2x + TAA 2x + SMAA 1x

하지만 샘플링 AA들이 가지는 메모리 소요와 연산량 소요 그리고 구현을 위한 기술등의 문제로 인하여 서드파티 Injector 툴을 통한 SMAA 1x만이 유저들사이에서 후처리AA로서 널리 사용된다. (SMAA을 발표측 자료에 의하면 FXAA 3.1이 default preset에서 0.62ms 걸릴때 SMAA 1x는 1.02ms 로 경쟁 가능 범주지만 4x에서는 2.34ms에 달한다. 더구나 이때 메모리 사용량은 FXAA의 4배에 달한다.)

크라이시스3 에서 최초로 게임에서 1x이상의 SMAA 가 구현되었다. (SMAA T2x/4x)


자세한것은 http://iryoku.com/smaa/ 을 참조.

11. TXAA


NVIDIA의 6xx에서 새로 적용될 수 있도록 추가된 AA기술.
영화와 같은 화면을 만드는것을 목표로 하였다.

기본적으로 MSAA+TAA+블러링필터로 이루어진다.
(헐리우드 영화에서는 액션신에서 자연스러움을 위하여 블러링 필터를 사용하는것이 당연하며 실제 정지화면의 선명도는 떨어지지만 움직임은 자연스러워진다는 것이 관계자의 변명설명이었다.)

TXAA 2x = MSAA 2x + TAA 2x + 블러링필터
TXAA 4x = MSAA 4x + TAA 2x + 블러링필터

(SMAA 4x와 비교해 보면 그 유사점이 보인다.)

블러링 필터는 CFAA에 사용되는방법과 유사한것으로 추정되며
자신들의 그래픽카드에 전문적으로 적용되도록 만드는 과정에서 MSAA파트에 HDR등 후처리 문제를 해결할수 있도록 만들었다.
또한 TAA의 고스트 문제는 화면 물체의 움직임 벡터를 계산하여 이를 적용하여 적절한 위치에 단일상이 맺히도록 하여 해결하였다.

서브 픽셀에 강력한 대응이 가능하고, 액션 영화와 같이 움직임과정에 부드러움을 느낄수 있다고 주장하였으나 실제 결과물에 있어 FXAA를 능가하는 블러링 효과 때문에 많은 지탄을 받았다. 심한 블러링을 제거 하기 위해서는 블러링필터의 크기와 효과를 줄이면 되지만 이 경우 사실상 MSAA+TAA가 되어버려서 품질적으로 경쟁기술에 비하여 메리트가 없어진다.(경쟁기술 SMAA 4x 와 대비해보라.)
AA효과를 위하여 블러링 필터를 키우면 블러링이 심해지고 심한 블러링을 줄이기 위해 블러링 필터를 줄이면 AA효과가 줄어드는. CFAA에서 AMD가 한 삽질을 그대로 재현한 기술이라 할수있다.

Timothy의 블로그에 의하면 이러한 문제로 인하여 블러링 필터 없이 화면 해상도를 낮추고 SSAA와의 결합하여 성능저하를 견디면서 블러링문제를 없에고자 하는 시도들을 하고있었다.(논란이 이어진 탓인지 결국 Timothy씨의 블로그에서 관련한 내용들이 완전히 삭제되었다. 당시 MSAA는 의미가 없으며 해상도를 낮추는 한이 있더라도 무조건 SSAA를 주는 형태로 방향을 잡아야 한다는등 논란의 여지가 큰 방향으로 흘러가고 있었다.)
----
  • [1] 클리어타입은 이를 이용한 꼼수.
  • [2] 실제 눈으로 Aliasing을 구별할수 없게 되는 정도가 PC환경-모니터와 거리 60cm 정도에서 500~600ppi 라고한다.(스마트폰 환경 30cm 에서 1000~1200ppi) 30인치 4k 모니터가 150ppi, 우리가 사용하는 일반 모니터들이 100ppi 안밖에 불과 하다. 즉 AA를 통하여 Aliasing을 완전히 해결하려면 SSAA x16은 넘어야 한다. 참고로 일반적인 상황에서 SSAA x8을 걸 경우 FPS의 변화는 AA걸지 않은 상태 대비 1/5 수준이 된다고 본다. SSAA x16은 FPS가 10분의 1이하로 감소한다는것. 그냥 눈에 비치는 그대로 완전한 해결따위는 포기하는것이 속편하다.