SDF vs. MSDF vs. Slug: GPU 텍스트 렌더링 비교

5 days ago 12

GPU 텍스트 렌더링은 미리 생성한 텍스처를 샘플링하는 방식과 윤곽선을 직접 처리하는 방식 사이에서 화질, 메모리, 연산 비용을 절충함 SDF는 픽셀 대신 경계까지의 거리를 저장해 확대 품질을 높이지만 모서리가 둥글어지고, MSDF는 RGB 세 채널로 모서리를 보존하되 고정 해상도 아틀라스의 한계는 남음 Slug는 베지어 윤곽선과 글리프별 가속 구조를 사용해 프래그먼트 셰이더에서 픽셀 커버리지를 계산하며, 비트맵 아틀라스와 매 프레임 테셀레이션 없이 크기와 원근 변화에 대응함 대문자 R의 극단적 확대 비교에서는 Slughorn과 Rive만 깨끗한 경계를 유지함. 다만 텍스처 기반 방식은 동일 해상도, 거리장은 기본 생성 설정을 사용했고, Rive는 매 프레임 다시 테셀레이션함 단일한 최적 방식은 없음. 고정 크기 UI, 제한된 하드웨어, 사전 생성 가능한 확장형 UI, 예측하기 어려운 3D 시점, 움직이는 벡터 아트에 따라 적합한 방식이 달라짐 글리프 렌더링이 어려운 이유 확장형 폰트의 글리프는 픽셀이 아니라 닫힌 윤곽선으로 저장됨 TrueType은 2차 베지어 곡선, CFF 기반 OpenType은 3차 베지어 곡선을 사용하며 직선 구간도 함께 포함함 보통 비영 와인딩 규칙(nonzero winding rule) 으로 내부를 결정함. 픽셀에서 광선을 쏘아 윤곽선 교차를 세고, 와인딩 수가 0이 아니면 내부로 판단함 렌더러는 내부 채우기, 안티앨리어싱, 크기와 시점 변화에 따른 선명도를 동시에 처리해야 함 메뉴의 8픽셀 글자부터 원근 회전된 화면 크기의 글자까지 대응해야 함 CPU에서는 목표 크기로 한 번 래스터화할 수 있지만, GPU에서는 매 프레임 수천 개의 글리프를 임의 배율로 그리면서 재래스터화를 피하는 것이 목표임 비트맵 아틀라스: 단순하고 빠르지만 크기에 종속됨 텍스처 아틀라스는 글리프를 특정 크기로 래스터화해 공유 텍스처에 저장하고, 각 문자를 해당 영역을 샘플링하는 사각형으로 그림 텍스처 유닛만 있으면 동작하므로 속도와 이식성이 뛰어나고 구현도 단순함 저장한 크기를 넘겨 확대하면 흐려지거나 픽셀이 드러나며, 축소 시에는 밉 레벨을 준비하지 않으면 깜박임과 획 손실이 발생함 선명하게 표시할 크기마다 별도 아틀라스가 필요함 중국어/일본어/한국어처럼 수만 개 글리프를 여러 크기로 저장하면 메모리 부담이 커짐 원근 투영된 3D 표면에서도 고정 픽셀 격자를 늘려 쓰기 때문에 글자가 부드럽게 흐려짐 SDF: ...

Read Entire Article