>> LOGIN
-이 웹사이트는 다음 플랫폼에서 동작이 확인되었습니다. : Internet Explorer Mozilla FireFox Google Chrome Apple Safari Android 2.2(Froyo) Android 2.3(GingerBread) Android 4.0(IceCreamSandwitch) Android 4.1(JellyBean)

CGCODE.net |

실시간 안티앨리어싱의 기술적 측면 - 기초

by Devil on Feb 19, 2011
첨부 '11'

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

 

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

 

 

1. 안티앨리어싱의 기초

 

원론적으로 Aliasing(앨리어싱) 이라고 하는 디지털 왜곡현상은, 우리가 흔히 생각하는 픽셀 경계면 왜곡현상보다 더 넓은 개념으로, 어떤 시각정보가 디지털장치로 이동되면서 주파수, 해상도등의 변경이 발생할때, 시각적으로 발생하는 여러가지 왜곡현상을 모두 가리키는 것이다. Anti-Aliasing 은 이러한 왜곡현상을 최소화 하는 모든 기술을 총괄하는 말이며, 흔히 알려진 것보다 더 많은 기술이 바탕되어 있다.

 

그러나, 이 강좌에서는, 시각장치의 픽셀이 사각형이기 때문에 야기되는, 일반인들이 흔히 알고있는, 사각형과 대칭되지 않는 선을 표현하면서, 울퉁불퉁하게 표현되는 물체의 계단현상 Aliasing 만을 다루고 있으며, 내용 역시, 3D Realtime Rendering 의 과정에서 Pipe-Line 의 Pixel Sampling 을 통한 AA 를 제거방식의 기술적 이해가 설명의 목적이다.

 

 

■ Aliasing 이 발생하는 이유와 그 해결책.

 

일반적으로 여러분이 사용하는 컴퓨터 모니터의 시각화 정보를 표시하는 가장 작은 단위는 픽셀(Pixel)이라고 불리는 정사각형의 디지털화 된 작은 점(dot)이다. 디지털화 된 주소를 기반으로 정보를 표시하는 것을 목적으로 제작되었기 때문에, 표시되는 정보의 대부분도 비트맵(bitmap) 혹은 픽스맵(pixmap) 이라고 불리는 디지털 영상방식이며, 이를 이미지로 표시한다면,

 

071010103956_029.jpg

이렇게 표시될 것이다. 수많은 정사각형의 집합.

 

흔히 말하는 모니터 해상도 라는 것은 결국 이런 조그만 사각형이 화면에 얼마나 많이 표시되느냐를 의미하는 것으로, 1024x768 의 해상도라고 하면, 가로로 1024 개의 픽셀, 세로로 768 개의 픽셀을 가지게 된다는 뜻이다. 총 픽셀수는 결국 가로 x 세로 로 산출될 수 있다. (표 1, 참조)

 

해상도

표시 픽셀.

1024x768

786,432

1280x1024

1,310,720

1600x1200

1,920,000

1920x1440

2,764,800

 

(표 1, 해상도에 따른 표시 픽셀수)

 

 

따라서, 만약 여러분의 모니터에, 정사각형 그림을 그려서 표시한다고 생각하면,

 

071010104008_048.jpg

이렇게 표시되게 된다.

 

하지만 조금만 생각해도, 컴퓨터 영상에서 실제로 사각형으로 이루어진 이미지가 얼마되지 않는다는 것을 쉽게 알 수 있다. 그렇다면, 사각형이 아닌 이미지를 어떻게 사각형의 픽셀에 표시한단 말인가? 해답은 간단하다. 사각형도 한없이 모이면, 곡선이 될 수 있는 법.

 

Parkoz 의 P 글자를 화면에 표시해보자.

 

071010105033_058.jpg

 

간단하다. 점을 적당히 비우고, 적당히 채워넣으면, 사각형을 조합해도 P 로 보이게 할 수 있는 것이다. 여러분이 보는 글자 하나하나, 그림 하나하나는 이런식으로 사각형의 무수한 조합속에서 여러가지 정보를 표시하는 것이고, 글자를 읽는데도 큰 무리가 없다.

 

하지만....

 

071010103949_011.jpg

조그만 원(동그라미)을 표시하려고 하니, 생각보다 외각이 울퉁불퉁하다.

 

사각형 픽셀의 조합으로 곡선을 표시하려면, 어떻게해서든 곡선을 사각형으로 만든뒤에 조합을 해야 한다.

그러다보니, 사각형이 부족할 수록 곡선이 울퉁불퉁하게 보이게 되는 것이다.

 

그렇다면, 해상도를 엄청나게 올려서, 화면에 엄청나게 많은 픽셀을 표시하면 될 것 아닌가?

그렇다. 사람의 눈으로 판단할 수 없을 정도로 미세하게 픽셀을 집적하는 것이 궁극적인 해결책이다.

 

하지만, 기술이라는것이 무한대를 허용하던가? 조그만 픽셀을 제한된 공간에 무한대로 집어넣으려면, 모니터에 픽셀을 무한대로 집어넣어야 하고, 그러한 무한대의 디지털주소(픽셀)의 정보를 처리하는 프로세서도 무한대의 처리연산이 가능해져야 하는데, 이는 외계의 선진기술을 가득 담은 UFO가 추락하지 않는 한, 현실적으로 불가능하다.

 

그래서....

 

071010103949_010.jpg

누군가, 표시하고자 하는 모형의 외각선에 인접한 픽셀에, 중간색상을 넣어서 번진것 처럼 보이게 하자는 생각을 해내고야 말았다. 정말 참신한 아이디어다. Aliasing 이 감쪽같이 사라지고 부드럽고 아름다운 동그라미가 만들어지고야 말았으니..

 

이것이 우리가 찾고자 하는 Anti-Aliasing 의 핵심이다. 

 

Multi-Pixel Filtering, SuperSampling, Single-Pixel, Non-Sampling 등 방법이야 여러가지가 있지만, 결과적으론 여러 알고리즘(공식)을 통해서, 중심픽셀 주변의 픽셀들의 색상을 가져와서 두~세 픽셀의 중간에 있는 픽셀에 중간값을 할당하고, 둥글둥글하게 픽셀의 색상을 혼합(블렌딩)하면, 사각형으로도 충분히 부드러운 물체를 표현이 가능한 것이다. 확대를 하면, 외각선이 흐릿하게 뭉게져버린 것 처럼 보이지만, 픽셀단위의 작은 점들이 뭉게지는 것을 사람의 눈은 부드럽다고 인식하기 때문에, 이 방식을 통해서 외각선에 인접한 픽셀을 모두 둥글둥글(?)하게 만들어 버리면, 그것이 바로 AA,

 

Mission Accomplished!

 

 

 

 

 

 

 

■ 필터링 방식.

 

일반적으로 둥글둥글하게 픽셀을 뭉게는 방식으로는 필터링이 사용되는데, 2D 의 경우에는 하드웨어 필터링보다, High-End Graphic 구현을 위해서 사용되는 Software 필터링이 더 많이 사용된다. OS 같이 가벼워야 하는 경우에는 하드웨어적이거나 단순한 필터링 방식을 사용하지만, 포토샵같은 이미지 편집 프로그램이나, 동영상프로그램들의 경우에는 Multi-Pixel Filtering 을 선호하며, 필요에 따라서는 모든 픽셀에 필터링을 적용하는 경우가 많다.

 

필터링에는 주변의 픽셀을 빌려오는 NN 필터부터, 박스, 큐빅, 가우시안, 미첼등이 있으며, 수학적으로 표현하자면,

 

071010103953_020.jpg

 

이런 가우시안 함수라거나...

 

071010103953_021.jpg

 

이런 미첼 필터링 함수를 예로 들 수 있겠다.

 

현대의 프로세서의 연산능력으로는 순식간에 뚝딱하고 끝낼 수 있는 간단한 수식으로 보이지만, 모든 픽셀을 연산한다고 생각해보라. 만약 1920x1440 해상도의 이미지를 필터링한다면, 2,764,800 번, 이러한 수학 연산을 적용해야 한다는 말이된다. 생각만큼 그렇게 간단한 처리가 아니다. (물론 현대의 CPU 는 몇초이내에 뚝딱하고 끝낼 수 있는 수준의 연산이지만..)

 

3D AA 의 경우에는 이후 설명할 샘플링이라는 별도의 하드웨어 AA 방식을 통해서 충분한 샘플을 취합하기 때문에, 복잡한 필터링을 다시 적용할 필요가 없다. 물론 Multi-Pixel Filtering 을 적용할수도 있지만, 실시간을 위한 하드웨어 파이프라인 가속이 우선시되는 상황에서 3D AA 에 꼭 멀티픽셀링을 또 취합할 이유가 없다고 할 수 있다.

 

 

 

 

 

 

2. 벡터 그래픽의 문제점

 

앞의 챕터에서 밝혔듯이, 모니터에 표시되는 정보는 픽셀로 표시되어야 하고, 이는 어떤 정보든 비트맵처럼 0/1 의 픽셀 사각형 정보로 제공되어야 한다는 것을 의미한다. 3D 화면도 궁극적으로는 2D 의 픽셀로 모니터에 표시되는 것이고 보면, 둥글둥글(블렌딩)이 자연스럽게 표현되면 좋을텐데..

 

 

그러나...

 

여러분이 학창시절(혹은 현재) 수학시간에 배운, 기하학 모형, 원뿔, 사면체, 육면체 등을 생각해보자. 기하학 모형을 그릴때, 꼭지점 좌표만 찾아서, 꼭지점을 이어주면, 입체모형으로 이루어지지 않던가? 꼭지점을 잊는 선분을 그리기위해서 연필심의 흑연분자가 어떻게 종이에 떨어지건, 얼마나 많은 흑연분자가 들어가건, 그런것은 계산할 필요도 없고, 알지도 못하고, 계산해 본 사람도 없다.

 

게임에서 사용하는 3D 모형도 마찬가지.

 

071010104009_056.jpg

 

사각형을 그리려면, 이렇게 꼭지점을 4개 찾아서, 꼭지점을 이어주고.

 

071010104008_050.jpg

 

이렇게 면을 색칠해주면, 끝이다.

 

평면 사각형을 약간 더 발전 시켜서, 꼭지점을 4개 더 찾아, 입체공간에 넣어주면..

 

071010104008_049.jpg

 

육면체로 완성, 꼭지점을 잊는 선분에 픽셀이 몇개 들어가건, 어떻게 들어가건,

꼭지점(vertex) 입장에서는 내알바 아니올시다. 라고 할 수 있다.

 

이렇게, 수학적으로 어떤 시각정보를 다루는 것을 벡터그래픽(Vector graphics) 라고 부른다. 벡터그래픽의 정보는 꼭지점 혹은 어떤 중심점의 좌표와 크기, 방향등의 수식이 중요할 뿐, 그 중간을 채우는 정보는 언제든지 수정/보정 될 수 있으므로, 큰 의미를 가지지도 않고, 필요한 경우에 얼마든지 재생성 될 수 있다.

 

이러한 벡터로 이루어진 3D 그래픽 물체(오브젝트/지오메트리)를 비트맵의 그래픽(픽셀)로 바꾸는 과정에서 생겨나는 현상이 3D 그래픽 계단현상으로, 위의 그림에서 보듯이, 그냥 꼭지점을 잊고, 면을 채워서 수학정보를 픽셀장치로 보내려고 하다보니, 얼래? 픽셀들이 "우리는 대각선은 표현못하는데, 이게 뭐야?" 라며 투덜투덜거리는 문제가 생길 수 밖에 없는 것 아닌가..

 

못하는 걸 하라고 했으니, 대충 들러붙어서 빠질 픽셀은 빠지고, 붙을 픽셀은 붙어서 대각선을 표시하면, 어떻게든 표시는 할 수 있지만, 역시 기초에서 본 동그라미 처럼 아름답지 못하다. 어떻게든 기초에서 보았던 동그라미 처럼 둥글둥글(블렌딩)하게 만들어야 겠는데, 2D 가 아니라 3D 수식으로 기하학 모형을 만들어 놓고는, 픽셀에게 둥글둥글(블렌딩) 해보세요. 라고 요구하는건 너무한 처사가 아닌가? 

 

또 다른 이유는, 하나의 픽셀위에 여러가지의 기하학 모형이 지나가는 경우를 생각해 볼 수 있다. 하나의 픽셀은 하나의 오브젝트에만 들러붙어야 할텐데, 여러가지 기하학모형이 하나의 픽셀위에서 겹쳐버린다면, 픽셀의 입장에서는 여기 붙어야 할지, 저기 붙어야 할지 알수가 없다. 결국 아무곳이나 한군데만 들러붙어 버리면, 픽셀이 들러붙지 않은 오브젝트의 경우는 외각선이 제대로 표현될수가 없는 것이다.

 

결국 픽셀은..

 

3D 기하학모형은 계속 넘어와서, 어디에 붙어야 할지도 잘 모르겠고..

고심끝에 여기에 들러붙으면, 외각선이 부실하다며, 항의가 빗발치고.. 픽셀입장에서는 하나(싱글샘플링)의 일밖에 못하겠는데,

여러가지 일이 밀려오면, 어떻게든 취사선택 하는 최악의 상황에 빠질 수 밖에 없다.

 

이런 불쌍한 픽셀들을 위해서,

3D 기술자들이 기하학 모형에 들러붙는 픽셀을 둥글둥글하게 만들 방법을 생각해낸것이

3D AA 샘플링 방식.

 

 

 

중급편에서 계속..

 


Designed by hikaru100

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

SketchBook5,스케치북5

SketchBook5,스케치북5

SketchBook5,스케치북5

SketchBook5,스케치북5

CGCODE.net의 모든 게시물 및 자료의 저작권은 CGCODE.net과 김진우에게 있습니다. 합법적 허가 및 출처의 명시없이 이를 도용,복사,사용하는 경우에는 관련 법령에 의거하여 처벌될 수 있습니다.
Since 2003. CGCODE and Devil.Genius all rights reserved. In the U.S, Korea(Republic of), and/or other countries. All information on CGCODE.net is developed by JinwooKIM.
All contents are protected by the copytight laws. Visitors are not supposed to use or edit any contents in this website without the authorization or permission.
CGCODE.net 
Ver 3.57 - Released Beta stage. WebMaster : geniusione@gmail.com