안티앨리어싱

편집 역사 토론
컴퓨터 그래픽스 게임 개발 마지막 수정: 2026-07-23 04:20:33

1. 개요[편집]

안티앨리어싱(anti-aliasing, AA)은 연속적인 도형을 이산적인 픽셀 격자 위에 표본화(sampling)할 때 생기는 계단 현상(jaggies)을 완화하는 기법의 총칭이다. 핵심은 그래픽스 문제라기보다 신호 표본화 문제다. 화면에 선명한 기하학적 모서리를 그린다는 것은 값이 뚝 끊기는 계단 함수(step function)를 픽셀 간격이라는 유한한 표본율로 찍어내는 일인데, 계단 함수는 주파수 성분이 무한대까지 뻗어 있어서 어떤 유한한 표본율로도 온전히 담을 수 없다. 즉 모서리는 원리적으로 저표본화(undersampling) 상태이고, 나이퀴스트율(Nyquist rate)을 넘는 고주파 성분이 낮은 주파수로 접혀 들어오면서 톱니 모양으로 위장(alias)한다. 이 위장이 곧 앨리어싱이다.1

결국 완벽한 제거는 불가능하고, 표본을 더 뽑거나 미리 저역통과 필터를 걸어 눈에 덜 거슬리게 만드는 것이 목표다. 실시간 그래픽스에서는 실시간 렌더링의 프레임 예산 안에서 이 타협을 어떻게 싸게 하느냐가 관건이라, 시대별로 서로 다른 유파가 등장했다.

2. 신호 표본화로 본 앨리어싱[편집]

1차원으로 단순화하면, 화면 밝기는 위치에 대한 함수이고 픽셀은 일정 간격의 표본점이다. 표본 간격 Δx\Delta x로 담을 수 있는 최대 주파수는 나이퀴스트 주파수

fN=12Δxf_N = \frac{1}{2\,\Delta x}

까지다. 모서리처럼 f>fNf > f_N 성분이 존재하면, 그 성분은 fNf_N을 기준으로 반사되어 f2fN|f - 2 f_N| 같은 가짜 저주파로 나타난다. 화면에서는 이것이 사선 모서리의 규칙적인 톱니, 얇은 난간의 반짝임(shimmering), 멀리 있는 체크무늬 바닥의 모아레로 보인다. 따라서 근본 처방은 두 가지뿐이다. (1) Δx\Delta x를 줄여 fNf_N을 올린다(=표본을 더 뽑는다), (2) 표본화 전에 고주파를 미리 깎는 저역통과 필터를 건다. AA 기법들은 결국 이 둘의 조합을 어디서, 얼마나 싸게 하느냐로 갈린다.

3. 슈퍼샘플링 (SSAA)[편집]

가장 정직한 방법. 화면 해상도의 정수배(예: 2×22\times2, 4×44\times4)로 렌더링한 뒤, 여러 서브픽셀 값을 상자 필터(box filter)로 평균 내 최종 픽셀 하나로 축소(downsample)한다. 한 픽셀이 모서리에 절반 걸치면 그 안의 서브표본 중 절반만 도형 색을 갖고, 평균값이 자연스러운 중간 계조(coverage gradient)를 만든다. 품질은 거의 참값에 가깝지만, 화소 셰이딩까지 전부 N2N^2배로 돌리므로 비용이 그대로 N2N^2배다. 실시간에서는 사치라, 스크린샷·오프라인 렌더나 고성능 여유가 있을 때 쓰인다.

4. 멀티샘플링 (MSAA)[편집]

SSAA의 비용을 도려낸 절충안. 관찰은 이렇다 — 앨리어싱이 실제로 거슬리는 곳은 기하 모서리이지, 폴리곤 내부의 텍스처·조명이 아니다. 그래서 MSAA는 픽셀당 셰이딩은 한 번만 하되(픽셀 중심에서 색 계산), 커버리지(coverage)와 깊이 판정만 픽셀 안 여러 서브표본 위치에서 수행한다. 한 픽셀이 삼각형에 k/4k/4만큼 덮이면 그 셰이딩 색을 k/4k/4 가중치로 반영하는 식이다. 곱해지는 건 커버리지·깊이 표본 수뿐이고 값비싼 픽셀 셰이더 실행 횟수가 아니라서, 같은 표본 수의 SSAA보다 훨씬 싸다. 대신 이 방식은 서브표본별 커버리지와 깊이를 저장할 수 있는 깊이 버퍼/멀티표본 버퍼 machinery를 요구하며, 폴리곤 내부의 앨리어싱(예: 알파 텍스처 가장자리, 스페큘러 반짝임)에는 손을 못 댄다.

5. 후처리·시간적 AA (FXAA·TAA)[편집]

디퍼드 셰이딩이 보편화되면서 MSAA의 궁합이 나빠지자, 완성된 이미지를 사후에 손보는 유파가 떴다.

  • FXAA(Fast Approximate AA): 최종 컬러 버퍼에서 밝기 대비로 모서리를 검출해 그 방향으로만 흐리는 순수 후처리 필터. 기하 정보 없이 이미지만 보므로 매우 싸고 어디에나 붙지만, 실제 모서리가 아닌 텍스처 경계까지 뭉개고 전반적으로 약간 흐릿해진다.
  • TAA(Temporal AA): 오늘날 실시간 엔진의 사실상 표준. 프레임마다 카메라를 서브픽셀만큼 조금씩 흔들어(jitter) 표본 위치를 바꾸고, 모션 벡터(motion vector)로 이전 프레임을 현재 화면에 재투영해 시간에 걸쳐 표본을 누적한다. 여러 프레임을 합치면 사실상 공짜 SSAA에 가까운 표본 수를 얻는다. 대신 물체가 빠르게 움직이거나 재투영이 실패하면 잔상(ghosting)과 흐림이 생겨, 이를 억제하는 히스토리 클램핑·이웃 클리핑 같은 보정이 필수다.2

6. 트레이드오프[편집]

세 축 사이의 줄다리기다 — 품질, 성능, 아티팩트. SSAA는 품질 최상·성능 최악, MSAA는 기하 모서리에 한해 가성비 최상, FXAA는 최저 비용·흐릿함, TAA는 이동 표본 누적으로 저비용 고품질이지만 잔상·흐림이라는 새 아티팩트를 데려온다. 그래서 현대 엔진은 흔히 TAA를 기본으로 깔고, 정지 화면 품질이 중요하면 그 위에 슈퍼샘플링이나 업스케일러를 얹는 식으로 섞어 쓴다.3

왼쪽은 픽셀당 표본 1개 — 사선 모서리가 저표본화되어 계단(jaggies)이 그대로 드러난다. 오른쪽은 슬라이더로 N×N 슈퍼샘플링(1~4)을 켠 것으로, 서브픽셀 커버리지를 실제로 계산해 상자 필터로 평균 낸 진짜 계조 모서리다(가짜 블러가 아니다). N을 올릴수록 모서리의 중간 계조가 촘촘해진다.

7. 관련 문서[편집]

8. Footnotes[편집]

  1. 이름부터가 “가짜 이름(alias)“이다. 고주파가 저주파 행세를 하며 원래 신원을 숨긴다는 뜻. 오디오에서도 표본율을 넘는 소리가 엉뚱한 음으로 접혀 들리는 똑같은 현상이 있다. 그림이든 소리든 표본화의 세계에선 나이퀴스트를 어기면 반드시 대가를 치른다.

  2. TAA의 잔상은 “지난 프레임이 현생을 못 놓아주는” 현상으로 요약된다. 모션 벡터가 가리키는 과거 표본이 실제로는 다른 물체였을 때 히스토리를 그대로 믿으면 유령이 따라붙는다. 그래서 이웃 픽셀 색 범위로 히스토리를 강제로 클램핑해 과거의 미련을 끊는다.

  3. “완벽한 AA는 없다”가 이 바닥의 국룰. 나이퀴스트가 원리적으로 막아둔 벽이라, 남은 건 어느 아티팩트를 덜 미워하느냐의 취향 싸움이다.