---
title: "Skia의 폰트 래스터라이제이션 3대 핵(Hack) 해부"
published: 2025-12-31T22:58:51.000Z
canonical: https://jeff.news/article/770
---
# Skia의 폰트 래스터라이제이션 3대 핵(Hack) 해부

Chrome의 2D 그래픽 엔진 Skia에서 폰트를 화면에 렌더링할 때 사용하는 세 가지 보정 기법(감마 핵, 옵티컬 사이징 핵, 콘트라스트 핵)을 심층 분석한 기술 문서.

Skia(Chrome의 2D 그래픽 엔진)에서 폰트를 화면에 찍을 때 사용하는 세 가지 핵심 보정 기법을 깊이 있게 다룬 기술 문서임. "The Raster Tragedy at Low-Resolution Revisited"의 연장선상에 있음.

## 감마 핵 (Gamma Hack)

- 비선형 색공간에서 선형 블렌딩을 그냥 적용하면 서브픽셀 안티앨리어싱 시 색번짐(color fringing)이 발생함
- Skia는 목적지 색공간으로 변환 후 선형 블렌드를 하되, 비선형 인코딩 위에서 직접 블렌딩하는 방식을 택함. 기존 시스템과의 호환성 때문
- 감마 핵의 핵심 아이디어: 글리프 마스크 생성 시 소스 색상과 전달 함수를 알고 있으므로, 비선형 인코딩에서 선형 블렌드한 결과가 "올바른 선형 블렌딩"과 동일하게 보이도록 커버리지 값을 미리 보정함
- 검정 위 흰색(다크 모드) 시 블루밍 현상을 줄이기 위해 밝은 소스에서는 보정을 줄이는 추가 조정도 들어감. macOS에서는 CoreText와 매칭하기 위해 이 부분을 따로 튜닝함
- 서브픽셀 AA에서는 채널별 보정이 가능해서 잘 작동하지만, 풀픽셀 AA에서는 단일 채널로만 소통하므로 회색 근사가 되어 결과가 좋지 않음

## 옵티컬 사이징 핵 (Optical Sizing Hack)

- 금속활자 시대에는 작은 크기의 활자를 디자이너와 펀치 커터가 수작업으로 더 굵게 만들었음. 선형 축소하면 가늘어 보이는 문제를 보정한 것
- 디지털 폰트에서는 가변 폰트의 `opsz` 축이 이 역할을 하지만, 모든 폰트에 `opsz`가 있는 것은 아님
- `opsz` 없이 자동 보정하는 방법들:
  - **힌팅**: 수동/자동 힌팅이 사실상 무의식적으로 옵티컬 사이징을 내포함. 작은 픽셀 크기에서 대비를 높이고 무게를 늘리는 효과
  - **자동 엠볼드닝**: CoreText가 사용하는 방식. 요청된 명목 크기에 따라 외곽선 자체를 살짝 두껍게 만듦. Fake-bold와 비슷하지만 크기 기반이라 Ultra Bold보다 두꺼워지는 문제는 없음
  - **엣지 오버커버링**: 안티앨리어싱 시 모든 엣지를 약간 더 덮어서 작은 피처가 사라지는 걸 방지. Skia의 "contrast hack"이 이 방식
- 주의할 점: 옵티컬 크기는 명목/광학 크기 기준이고 최종 픽셀 크기와는 다름. SkCanvas에 스케일 변환이 있어도 옵티컬 크기는 변환에 영향받지 않음

## 콘트라스트 핵 (Contrast Hack)

- 1픽셀 폭의 획이 정확히 반픽셀 경계에 걸리면 2개 픽셀에 걸쳐 퍼지면서 동일 광자량이 두 배 면적에 분산됨. 시각적으로 획이 옅어 보이는 현상
- 이론상 ~400ppi(8K 20인치 모니터) 이상이면 문제없지만, 현재 일반 디스플레이에서는 부족함. RGB 서브픽셀 AA가 100dpi를 300dpi로 올려주긴 하지만 여전히 약간 모자람
- 해결 방법: 부분 커버된 픽셀의 커버리지를 시각적으로 나아 보일 때까지 올려줌. 사용자의 시력, 화면 거리, 디스플레이 밀도 등에 따라 달라져서 보통 사용자가 직접 "제일 나아 보이는" 설정을 고르게 함
- 정밀한 구현은 수평/수직 방향으로 연속된 부분 커버 픽셀을 찾아 커버리지를 높이는 것이지만, 계산 비용이 큼
- Skia의 현재 근사 방식은 모든 커버리지를 일괄 부스트하는 것. 획뿐 아니라 글리프 외곽 엣지도 두꺼워지는데, 이것 자체가 옵티컬 사이징 효과를 겸함
- 밝은 색상을 그릴 때는 보정을 줄여서 흰색에 가까워질수록 콘트라스트 보정이 0으로 수렴함. 감마 핵과 마찬가지로 블루밍 방지 목적

## 핵심 포인트

- 감마 핵: 비선형 색공간에서 서브픽셀 AA 시 색번짐 방지를 위해 커버리지를 사전 보정
- 옵티컬 사이징 핵: 작은 크기에서 글리프가 옅어지는 문제를 opsz 축, 자동 엠볼드닝, 엣지 오버커버링으로 보정
- 콘트라스트 핵: 반픽셀 경계에 걸린 획이 옅어 보이는 현상을 커버리지 부스트로 보정
- 금속활자 시대의 광학 보정 원리가 디지털 폰트에도 여전히 필요함

## 인사이트

디스플레이 해상도가 400ppi 이상이 되면 이런 핵들이 불필요해지지만, 현재 대부분의 모니터에서는 여전히 필수적인 보정임. 결국 물리적 한계를 소프트웨어로 메우는 작업
