한양과학기술고등학교

에듀테크 프로젝트 대시보드

안티에일리어싱 (Anti-Aliasing)

안티에일리어싱 (Anti-Aliasing)

화면은 정사각형 픽셀의 격자다. 매끈한 대각선·곡선을 이 격자에 억지로 담으면 계단(jaggies)이 생긴다. 안티에일리어싱은 픽셀이 도형에 얼마나 덮였는지(coverage)를 계산해 경계를 반투명하게 칠하는 기술이다.

계단 현상 = 표본화 부족. 도형은 연속적인 신호인데 픽셀은 그 신호를 격자 간격으로 띄엄띄엄 표본화한다. 간격보다 촘촘한 디테일(가는 선, 급한 경사)은 격자가 못 따라잡아 가짜 무늬(alias)로 나타난다. 푸리에 관점에서는 나이퀴스트 한계를 넘은 고주파가 저주파로 접혀 들어오는 것과 같은 현상이다.

1. 왜 계단이 보이나 — 1픽셀 = 1표본

가장 단순한 렌더링은 픽셀 중심점 한 곳만 검사한다. 그 점이 도형 안이면 100% 칠하고, 밖이면 0%. 중간이 없다. 그래서 경사가 완만한 선은 한동안 같은 행에 머물다가 한 칸씩 뚝 떨어지는 계단이 된다.

에일리어싱 — 중심 1점 검사 (0% 또는 100%)
안티에일리어싱 — 9점 평균 커버리지

두 캔버스 모두 72×72의 저해상도 격자를 크게 확대한 것이다(픽셀이 네모로 보이게 image-rendering: pixelated 적용). 왼쪽은 경계가 톱니처럼 튄다. 오른쪽은 경계 픽셀이 회색조로 부드럽게 이어진다 — 표본을 늘릴수록 더 매끈해진다.

2. 커버리지 = 픽셀이 도형에 덮인 비율

핵심 아이디어: 픽셀을 점이 아니라 작은 정사각형으로 보고, 그 정사각형 넓이 중 도형이 차지하는 비율 0.0 ~ 1.0을 알파값으로 쓴다. 넓이를 정확히 적분하기 어려우니 보통 픽셀 안을 여러 번 표본화해서 근사한다.

한 경계 픽셀 확대 — 표본점이 도형 안에 몇 개 들어왔나

파란 영역이 도형이고, 점은 서브픽셀 표본이다. 초록 점은 도형 안, 회색 점은 밖.

안에 든 표본: 7 / 16 → 커버리지 0.44

실제 넓이 비율: 0.42 — 표본이 많을수록 이 값에 가까워진다

# 픽셀 (px,py) 를 SS×SS 로 표본화해 커버리지 구하기 (SSAA)
def pixel_coverage(px, py, shape, SS):
    inside = 0
    for j in range(SS):
        for i in range(SS):
            # 픽셀 내부를 균일 격자로 나눠 각 칸의 중심을 표본
            sx = px + (i + 0.5) / SS
            sy = py + (j + 0.5) / SS
            if shape.contains(sx, sy):
                inside += 1
    return inside / (SS * SS)        # 0.0 ~ 1.0 → 픽셀 알파

3. SSAA vs MSAA vs FXAA

표본을 많이 찍으면 화질은 좋아지지만 그만큼 계산량도 늘어난다. 그래서 실무에서는 절충안을 쓴다.

기법동작 방식비용특징
SSAA
Supersampling
화면 전체를 2×~4× 큰 해상도로 렌더한 뒤 축소(박스 평균) 4×~16× 가장 깔끔. 텍스처·셰이더까지 다 슈퍼샘플 → 매우 무겁다
MSAA
Multisample
깊이·커버리지는 여러 표본, 픽셀 셰이더(색 계산)는 1번만 실행 1.3×~2× 도형 가장자리만 부드럽게. 내부 텍스처 경계·투명 컷아웃엔 효과 없음
FXAA
Fast approximate
렌더 후 완성된 이미지에서 대비가 큰 경계를 찾아 블러 처리 거의 0 매우 빠르고 어디에나 적용. 화면이 살짝 뭉개지고 얇은 선이 깜빡일 수 있음
TAA
Temporal
이전 프레임들을 조금씩 흔들어(jitter) 모은 뒤 시간축으로 평균 낮음 정지 화면 화질 최고. 빠르게 움직이면 잔상(ghosting) 발생 → 최신 게임 표준

SSAA 시연 — 4×4 로 렌더 후 축소

회전하는 얇은 바퀴살. SSAA ON — 켜면 내부적으로 4배 해상도로 그린 픽셀 16개를 평균해 한 픽셀을 만든다.

4. 시간축 에일리어싱 — 마차 바퀴 효과

같은 원리가 시간에도 적용된다. 영화는 초당 24프레임으로 세상을 표본화한다. 바퀴가 프레임 간격보다 빠르게 돌면, 우리 눈에는 느리게 돌거나 거꾸로 도는 것처럼 보인다(alias).

실제 바퀴 — 연속 회전
카메라에 찍힌 모습 — ?

회전 속도를 프레임레이트 근처로 올려 보라. 겉보기 속도가 0으로 멈췄다가 음수(역회전)가 된다. 영화에서 모션 블러를 넣는 이유가 이것 — 프레임 사이의 움직임을 번지게 해서 시간축 커버리지를 만든다.

5. 정리