Skip to content 메뉴

CGCODE - 강좌와 팁 › 실시간 안티앨리어싱의 기술적 측면 - 샘플링

Devil 2011.02.19 12:04:22

이 강좌는 필자가 2007년에 파코즈하드웨어에 작성한 내용으로, 상대히 기술적이고 난해한 측면을 다루고 있으며, 실제로 작업에 도움이 되는 노하우가 아닌 이론적인 측면을 이야기하고 있다. 이러한 이론적인 이해는 실무에 필요없다고 생각하는 아티스트들이 간혹 있지만, 필자의 지론으로는 이러한 이해와 이론적 배경이야 말로 아티스트를 롱런할 수 있도록 해주는 측면이라고 생각한다.

 

실무를 단순히 기술적인 측면에서 접근하고자 하면 그것은 기술자일 뿐이며, 절대로 그 분야의 학자가 될 수는 없는 이치라고 하겠다.

 

 

 

 

 

1. 실시간 안티앨리어싱의 기술적 측면 - 중급 (샘플링)

 

 

 

■ 샘플링이란?

 

앞선 강좌의 3D 벡터관련 부분에서 보았듯이, 결론적으로 3D 기하학 수학정보의 계단현상을 없애기 위해서, 고민에 고민을 거듭한 결과 둥글둥글 픽셀만들기(블렌딩하기) 기술이 몇 가지 고안되는데, 여기서 언제나 나오는 이야기는, 샘플링(Sampling)이라는 용어로...

 

샘플링(Sampling)은 검사과정에서 어떤 것을 중심으로, 주변정보를 특정 혹은 임의로 조사하여 결과를 추정/예측하는 방식을 의미한다. AA샘플링이라면, 픽셀과 지오메트리를 중심으로 각점에서 주변의 픽셀과 지오메트리의 상관관계가 어떤지 혹은 픽셀자체가 어떤지를 조사하여, 적절한 필터링을 통해, 축소, 확대, 평균, 감산, 가산 등을 이루는 방식을 이야기 하는 것이다.

 

기본적으로 전혀 AA를 사용하지 않을때, 픽셀은 자기자신의 위치에 있는 샘플, 즉 자신의 위치에 있는 픽셀만 생각하고, 색상을 그리는데, 이것은 자기자신만을 고려해서 예측/추정하여 렌더링되기 때문에, 1x1 혹은 1x 샘플링이 된다. 따라서, 여러분이 AA를 사용하지 않는 상태, 즉, noAA 상태는 실제로는 1x1 AA상태라고 할 수 있다.

 

noAA 상태에서는 픽셀을 중심으로 다른 정보를 전혀 취합하지 않으며, 하나의 샘플(픽셀)을 중심으로, 주변의 2개 이상의 샘플(픽셀)을 분석해서, 픽셀을 둥글둥글(블렌딩)하게 만들어야만, 비로소 눈으로 확인가능한 AA가 발생하게 된다.

 

결국, 최소한 두개의 샘플(픽셀)을 가져야만 평균화를 할 수 있기 때문에, 그래픽드라이버 옵션설정에서 AA 2x 옵션이 시작점으로 정의되어 있다.

 

 

071010150256_024.jpg        071010150254_021.jpg       071010150254_019.jpg

그림) 샘플 a,b,c,d 가 중심픽셀에서 배열되는 샘플링의 예제들. (좌측부터 2x2, 2x1, 1x2)

 

위 그림처럼, 1,2,3,4의 중심픽셀이 있다고 할 때, 각 픽셀을 기점으로, 가로x세로에 대해 특정한 방법으로 a,b,c,d 의 인접한 위치에 있는 물체의 색상정보에 대한 샘플을 분석해보고, 현 픽셀이 어떤 색상으로 둥글둥글(블렌딩)되어야 하는지를 추정/예측하여, 최종적으로 결론을 내리게 되는 것이 AA샘플링의 과정이며, 모든 것이다

 

추정/예측을 위해 분석하는 샘플이 많을수록 더 정확한 평균화가 가능하지만, 연산작업이 늘어나기 때문에, AA옵션을 높일수록 그래픽성능이 저하된다.

 

 

 

 

■ 샘플링의 종류와 적용방식. 

 - AA 샘플링을 위해, 흔히 사용되는 두가지 방식으로는 슈퍼샘플링멀티샘플링이 있다.

 

1. 슈퍼샘플링(SuperSampling) AA

 

3D 기하학모형은 크게 상관이 없다.

 

모든 픽셀을 가로 A, 세로 B 만큼 픽셀을 "뻥튀기"샘플링해서, 그것을 원하는 최종크기로 축소하는 방식이다. 샘플링 공식자체는 AxB 라는 형식으로 표시되며, 3D 그래픽 옵션에서 1x2, 2x1, 2x2, 4x4 표현의 AA 방식은 모두 슈퍼샘플링.

 

    그림으로 설명하자면, 2x2 SuperSampling 의 경우,

 

071010150251_011.jpg

 

기하모형이 픽셀을 지나거나 말거나, 이미지의 1,2,3,4 번 픽셀을 모두 픽셀을 가로로 2배, 세로로 2배 뻥튀기 샘플링하고 있다. 결론적으로, 슈퍼샘플링은 원하는 해상도보다 훨씬 크게 렌더링해서 이미지 자체를 마지막에 축소해버리는 것이다. 

 

예를 들어 800x600의 해상도로 설정된 그래픽에서 2x2 AA를 활성화 하는 순간, 그래픽카드는 1600x1200 으로 렌더링을 하는 것과 똑같은 성능을 필요로 하게된다. 파이프라인의 마지막 과정에서 800x600 으로 축소해서 표시할 뿐이므로, 모든 픽셀을 2x2만큼 크게 샘플링 한다는 말은, 슈퍼샘플링을 켜는 순간, 게임의 가속성능이 극단적으로 2배, 4배, 8배, 16배 감소한다는 말과 동일하다.

 

SSAA는 이처럼, 지오메트리와 상관없이, 모든 픽셀을 뻥튀기(샘플링 블렌딩)하므로, 화면의 전체적인 퀄리티가 좋아지지만, 원하는 최종해상도보다 AxB 만큼 더 크게 샘플링(엄밀하게 렌더링과 다르다..)하는 이유로, 성능저하가 매우 심하고, 메모리 요구량도 AxB 만큼 증가한다.

 

원하는 해상도에 4x4, 8x8 을 곱해서 계산해보라. 

 

여러분이 800x600 의 해상도에 4x4 슈퍼샘플링 AA 를 켰다고 생각해보자. 그래픽카드는 3200x2400 의 해상도로 픽셀을 샘플링해서 버퍼에 정보를 저장한다.. 8x8 이 되면, 무려 6400x4800 이다. 만약 800x600 의 해상도에 16x16 AA를 적용하면, 그래픽카드는 무려 12800x9600의 픽셀을 계산하게 된다.

 

그래서, SSAA는 옵션을 올리면 올릴수록 성능이 극단적으로 떨어질 수 밖에 없다.

 

  SuperSampling 정리표.

요소

효과

처리방식

가로 x 세로 (AxB) 샘플링.

3D 오브젝트 경계면

△ 둥글둥글 향상

텍스쳐 화질

△ 둥글둥글 향상

특수효과 화질

△ 둥글둥글 향상

가속 속도

▽▽▽ 극단적으로 감소

메모리 요구량

△△△ 극단적으로 증가


장점

전체적인 화질이 향상된다.

 

텍스쳐, 특수효과등의 부가적 3D 요소까지 파이프라인에서 샘플링된 상태에서 최종해상도로 만들어지기 때문에, 텍스쳐나 특수효과의 화질역시 향상된다.

단점

가로/세로를 AxB 만큼 더 큰 해상도로 렌더링 하는것과 똑같은 성능을 요구하기 때문에, 극단적으로 가속성능이 떨어진다. 메모리의 요구량 역시 수직상승한다.






 

 

 

2. 멀티샘플링(MultiSampling) AA

 

슈퍼샘플링의 성능저하를 해결하기 위해 고안된 방식으로, 3D 기하학모형과 픽셀의 경계부분을 분석하여, 기하모형(Polygon)의 외각경계면의 픽셀만을 샘플링한다.

 

외각경계(폴리곤에지)가 지나가는 픽셀만 Ax만큼 샘플링해서, 원래의 픽셀로 필터링하는 방식을 사용한다. 필요한 외각 경계부분의 픽셀만 뻥튀기해서 둥글둥글하게 만들기 때문에, 성능저하가 적고, 외각경계가 아름답게 표현되는 일석이조의 효과를 발휘한다.

 

일반적으로, Ax 라는 형식으로 표현되며, 그래픽옵션에서 2x, 4x, 8x 하는식으로 표시되는 것은 멀티샘플링을 한다는 이야기.

 

Tip : AA에서 멀티샘플링은 오브젝트의 경계만을 블렌딩 하지만, 프로그램적으로 구현한다면 다양한 방식의 필터링을 만들어 낼 수 있다. 모션블러가 대표적.

 

 

071010150254_022.jpg

 

위의 예제는 2x ordered grid 샘플링 방식으로, 기하모형의 외각선이 지나는 1,4 픽셀만 뻥튀기 하고 있다. 기하모형의 외각선이 지나지 않는, 2,3 번 픽셀은, 뻥튀기를 하지 않는다. 이런식으로 멀티샘플링은 기하모형의 외각선과 만나지 않는 부분의 픽셀은 전혀 샘플링 계산하지 않는다.

 

MSAA는, 블렌딩이 필요치 않은 픽셀에 대한 계산(샘플링)을 포기해버림으로서, 슈퍼샘플링보다 몇배나 높은 성능대비 효과를 기대할 수가 있다. 하지만, MSAA는 샘플의 수가 적으면, 효과가 떨어질 수 있다. 극단적으로 말도 안되는 예제이기는 하나, 만약...

 

 

071010150256_026.jpg

 

이런식으로 좁은 영역에 여러개의 복잡한 기하도형이 겹치게 되면 어떨까? 이런 괴이한 물체가 화면에 가득하다면, 두개정도의 샘플만 가져와서는 픽셀을 어느쪽에 붙여야 할지, 알수 없는 딜레마가 발생하게 된다. 따라서, 복잡한 화면을 정확히 평균화하려면, 최소한 4개 정도의 샘플을 취해야만 적절히 필터링이 가능하게 될 것이다. (4x 멀티샘플링)

 

 071010150256_025.jpg

(복잡한 기하도형의 4x 멀티샘플링 처리과정 예제.)

  

 MultiSampling 정리표. 

요소

효과

처리방식

폴리곤의 경계와 만나는 픽셀에 대해서만 Ax 만큼 샘플링. 일반적으로 Ax 라는 형식으로 표현된다. (ex:2x,4x,8x)

3D 오브젝트 경계면

△ 둥글둥글 향상

텍스쳐 화질

 ─ 향상 없다.

특수효과 화질

─ 향상 없다.

가속 속도

▽ 적당히 감소

메모리 요구량

△ 적당히 증가



장점

높은 성능대비 폴리곤 외각부분 둥글둥글 효과를 표현한다. 화질향상을 가져온다.

단점

샘플이 부족하면, 정확한 샘플링이 불가능할 수 있다. 오브젝트의 외각부분만 샘플링하기 때문에, 파이프라인의 부가요소인 텍스쳐, 특수효과등은 화질향상이 없다.

 

약간의 성능감소가 발생한다.





2-A. Transparency Anti-Aliasing (Adaptive Anti-Aliasing)

 

멀티샘플링과 슈퍼샘플링에 모두 적용할 수 있지만, 일반적으로 멀티샘플링의 단점을 해결하기 위한 방식으로 사용된다. 멀티샘플링이 오브젝트의 외각부만 샘플링 함으로서, 텍스쳐의 알파채널(텍스처)을 통한, 투명한 오브젝트면에 대한 AA를 적용하지 못함으로서 발생하는 화질의 열화(?)를 해결하기 위한 AA 방식이다.

 

nVidia 에서는 Transparency Anti-Aliasing(TAA), ATi 에서는 Adaptive Anti-Aliasing(AAA) 라고 부른다.

 

 

2-A. Gamma-corrected Anti-Aliasing (GAA, GCAA)

 

nVidia 의 7x 시리즈의 그래픽카드부터 도입된 AA 방식으로, AA 가 발생하는 부분의 감마(음영)가 이미지의 전반적인 밝기와 차이를 보이지 않도록, 픽셀의 컬러 레벨을 조종하는 옵션이다. 성능저하가 거의 없고, 시각적으로도 크게 눈에 띄지는 않는다.

 

2-A. Coverage Sample Anti-Aliasing (CSAA)

 

nVidia 의 8x 시리즈에서 핵심기술로 발표한 AA 방식으로, 멀티샘플링 방식에만 적용된다. 동일옵션의 멀티샘플링 방식보다 컬러에 대한 샘플을 2배 더 샘플링하면서, 다른 샘플은 4x 수준으로만 취한다. 메모리 요구량과 성능저하의 폭을 이전 멀티샘플링 옵션으로 유지하면서, 보다 높은 퀄리티를 구현하는 방식. 8xQ, 16xQ 처럼 뒤에 Q 가 붙을 경우에는 샘플을 8x 샘플링하며, 여기에 컬러 샘플을 추가적으로 더 샘플링한다.

 

여분의 샘플을 통해서, 주변 텍스쳐의 화질증가라는 부가적 효과도 약간 발생한다. 퀄리티대비, 성능저하가 적다는 장점을 내세우고 있으나, 고급형 이상의 그래픽카드가 아니라면, 애초에 8x 의 멀티샘플링을 사용하는 것만으로도 성능저하가 심하기 때문에, 실제로 사용하는 사람이 얼마나 될지는 의문.

 

 

3. Quincunx Anti-Aliasing(QAA)

 

멀티샘플링에 가깝다고 할 수 있는 nVidia 고유의 샘플링 방식. 과거 nVidia 카드에서 흔히 2xQ 라고 Q 가 붙은 샘플링 방식으로 표현되었으나, 여기서의 Q는 Quality 를 말하는 것이 아니라, Quincunx라고 하는 AA 방식이다. 그러나 실질적으로는 가짜 혹은 싸구려 AA 라고 알려져 사장되어 버렸다.

 

Quincunx(오망점)이라는 단어처럼, 중심픽셀을 기준으로 총 5개의 샘플을 생성하나, 실제로는 하나의 픽셀을 중심으로 개별적인 Ax샘플을 취하는 것이 아니라, 인접한 픽셀과 샘플을 공유한다. 따라서, 최소 3개 이상의 샘플을 두개 이상의 픽셀에 재사용되며, 적은 샘플링으로 높은 퀄리티를 뽑을 수 있다는 주장(?)을 내세우며 화려하게 Geforce3 와 함께 등장했다.

 

허나, 자신의 샘플이 아닌, 공유된 샘플을 비슷한 비율로 사용하다보니, 정확한 이미지를 얻지 못하고, 모든 이미지가 흐리멍텅(둥글둥글이 아님!)하게 블러효과를 내면서, 퀄리티가 극단적으로 떨어지는 문제를 양산하는 관계로 현재는 거의 사용되지 않는다.

 

 

071010150303_040.jpg

nVidia 의 기술문서의, QuincunxAA 의 메모리사용량

 

메모리 사용량은 2xAA 와 동일하나, nVidia 에서는 4xAA 의 성능을 표현할 수 있다고 주장하였다. 자세한 벤치마킹 정보는 http://www.nvnews.net/previews/geforce3/quincunx.shtml 에서 읽어볼 수 있으나, Geforce3 이후로 거의 사장되었기 때문에, 현재는 별로 의미가 없다.

 

장점

성능저하가 매우 적게 발생한다.

단점

오브젝트, 이미지 뿐만이 아니라 글자등도 모두 흐리멍텅해진다. 더 이상 사용되지 않는다.



4. Fragment Anti-Aliasing(FAA)

 

Matrox 파헬리아 그래픽카드와 함께 Matrox 에서 발표한 샘플링 방식, MSAA 와 SSAA 방식의 장점만을 취했다고 주장했으며, 오브젝트의 전체적인 경계선을 우선적으로 분석해서 부분적으로 각 부분(fragment)에 맞는 적절한 샘플링을 취하는 방식. 필자의 개인적 견해로는 멀티샘플링을 약간 고쳐놓고, 마케팅적인 의미로 FAA 라고 명명한 것이 아닌가 생각된다. 파헬리아 시리즈 이후로 Matrox 의 그래픽카드가 3D 가속성능을 거의 포기해 버렸기 때문에, 당연히 이제는 기억하는 사람도 거의 없다.

 

 

071010150259_029.jpg

Matrox의 FAA 기술문서.

 

지금까지 살펴본, SSAA, MSAA, QAA, FAA 가 실질적인 샘플링의 4가지 형태라고 할 수 있다. 물론 QAA 와 FAA 는 거의 사용되지 않으므로, SSAA 와 MSAA 가 가장 중요하다.

 

장점

사용해보지 못해서 필자도 모른다.

단점

파헬리아 이후로 matrox 도 포기한 것이 아닐까...



5. Combined Mode.

 

멀티샘플링과 슈퍼샘플링을 동시에 적용하여, 두가지 방식의 단점을 상호보완적으로 적용하는 샘플링 모드. 일반적으로 4xS, 8xS, 16xS 등으로 AxS 라는 형태로 표현되며, 4xS 와 8xS 에서는 1x2 SS 에 2x MS 와 4x MS 를 혼합하는 방식을 사용하고, nVidia 를 기준으로 16xS 가 되면, 2x2 SS 에, 4x MS Rotated Grid 가 혼합되어 적용된다.

 



■ 샘플의 배열형태.

 

6. Ordered Grid 와 Rotated Grid.

 

OG 와 RG 는, 샘플링 방식이 아니라, 샘플링을 위해 샘플을 어떻게 배치하는가 하는 샘플배치방식이라고 할 수 있다. 과거 nVidia 와 ATi 가 평형적인 샘플이냐, 회전형 샘플이냐로 경쟁하던 시절이 기억나는 사람이 있는지 모르겠지만, 이것은 실질적으로 Ordered Grid(OG)를 선호하던 nVidia 와 Rotated Grid(RG)를 선호하던 ATi 의 알력다툼이었다고 할 수 있다.

 

아래의 이미지를 보자.

 

071010150304_041.jpg

 

기본적인 샘플의 배열방식인, 2x2 를 취하고 있는 SS 샘플 배열로, 샘플이 중심을 기준으로, 사방으로 평형적으로 정렬되어 있어서, Ordered Grid 라고 부른다. 가장 보편적인 형태로,

 

071010150254_019.jpg

 

071010150254_021.jpg

 

픽셀의 중심을 기준으로 평형적인 배치를 하고 있는 것이 일반적이다.

 

그러나, 만약

 

071010150304_042.jpg  

 

이렇게, 샘플과 차이가 많이 나는 오브젝트 면이 자주 겹친다고 생각해보면, 픽셀의 평균화에 어려움이 발생할 가능성이 있으므로, 그렇다면, 샘플을 살짝 회전시켜 두면 어떨까 하는 생각으로 발전한 것이 Rotated Grid.

 

071010150304_043.jpg

 

Ordered Grid Super Sampling 샘플의 배치와, Rotated Grid Super Sampling 배치를 비교해보면, 정렬방식의 차이가 있음을 알수있다. 두가지 모두 그리드 방식의 사각배치를 기반으로 하고 있지만, 샘플을 평형적으로 배치하느냐, 혹은 픽셀을 중심으로 회전형으로 배치하느냐의 차이가 있는 것이다.

 

과거에는 nVidia 에서는 OG 방식을 ATi 에서는 RG 방식을 선호했으나, 현재는 옵션에 따라 두 가지 배열방식을 혼합하여 사용하고 있다.




7. 기타배열방식.

 

▷ SmoothVision

ATi 에서는 9x 시리즈와 함께, SmoothVision 이라는 새로운 AA 방식을 선보였는데, SmoothVision 에서 눈에 띄는 점은 Programmable 이라는 단어였다. 즉, 정형화된 샘플배치가 아니라 프로그래밍을 통해서 다양한 샘플을 배열할 수 있다는 점이다.

 

071010150304_044.jpg  

이러식으로, grid 형태가 아닌 다른 형태의 샘플을 배치할 수 있다.

 

▷ Random

그냥 무작위로 샘플을 배열하는 방식.

 

 

▷ Flip-Tri

기존의 짝수배열이 아닌, 픽셀의 근접점에 2개, 먼곳에 한개 처럼, 3개의 샘플을 배열하는 방식이다.

발전된 형태로는 RG 와 매우 유사한 배열방식을 가진 Flip-Quad 가 있다.  

 

071010150303_036.jpg

Flip-Tri 기술문서에 설명된 샘플배치 방식.

 

  

 

■ 최종정리.

 

슈퍼샘플링 / 멀티샘플링 비교표

 

 

슈퍼샘플링

멀티샘플링

성능감소

극단적 감소

적당히 감소

전체화질

큰 폭으로 좋아짐

적당히 좋아짐

텍스쳐화질

증가

영향없음

처리방식

전체화면

경계면등 일부만

메모리요구량

극단적으로 증가

적당히 증가

옵션표시방식

2x1

1x2

2x2

4x4

8x8

16x16

2x

4x

8x

16x

8xQ (nvidia)

16xQ (nvidia)

시각적 만족도

좋음

적당함

첨부 [15]

Copyleft © The Sketch Book Since 2001. by hikaru100