Slug 특허 퍼블릭 도메인 공개 후 GPU 텍스트 렌더링 기법 비교: 텍스처 아틀라스, SDF, MSDF, Slug
- Eric Lengyel이 2017년 발표한 Slug는 텍스처 아틀라스나 프레임별 테셀레이션 없이 프래그먼트 셰이더에서 글리프 외곽선을 직접 렌더링하며, 2019년 등록한 특허를 2026년 3월 17일 퍼블릭 도메인으로 넘김
- Valve의 2007년 SIGGRAPH 논문(Chris Green)이 도입한 SDF는 작은 텍스처 하나로 크게 확대해도 가장자리가 깨끗하지만, 코너가 bilinear 보간에서 뭉개지고 필드가 몇 텍셀 폭으로 작아지면 얇은 줄기가 끊김
- MSDF는 빅토르 흘룸스키의 11년 전 석사논문 msdfgen이 사실상 유일한 구현이라 생태계 전체가 그 한 프로그램에 묶여 있음
- 텍스처 아틀라스는 빠르고 이식성이 좋지만 크기를 키우면 흐려지고, CJK처럼 글리프가 수만 개인 문자는 여러 크기로 굽는 순간 메모리가 감당이 안 됨
- AlphaPixel은 Slug 기법을 C++20으로 구현한 Slughorn을 공개했고, 댓글에서는 폰트 외곽선을 함께 배포해야 하는 라이선스 문제와 밴드 두 개를 쓰는 Slug의 안티앨리어싱 방식이 쟁점으로 올라옴
Hacker News 의견들
첫 예제만 보면 MSDF가 Slug보다 낫더라. 근데 원근 변환 걸린 텍스트는 Slug가 눈에 더 좋음. 나는 WebGL 취미 게임에 MSDF 쓰고 있고, 시간 나면 소스 공개할 생각임.
나도 MSDF 쓰는데 텍스트 에디터급이 아니면 충분함. 벡터 외곽선에서 직접 그리는 방식은 폰트 외곽선 자체를 배포해야 하는데 라이선스가 없을 수도 있음. 아틀라스 방식은 렌더된 이미지를 배포하면 됨.
LLM이 쓴 글 읽는 거 이제 지긋지긋함.
작성자가 자기 글도 안 읽어본 것 같음.
뭐가 LLM 티임? 나는 이런 거 잘 못 알아채겠던데.
Slug 인상적임. 내가 만든 걸로 제일 알려진 건 MSDF 셰이더에 블룸 패스 붙인 거고 니즈는 100% 충족함. 근데 MSDF는 다들 빅토르 흘룸스키 석사논문 msdfgen 하나만 씀. 그래픽 기법이 딱 한 번 구현되고 11년째 그대로 쓰이는 건 이상함. XKCD 2347 좀 깨야 함.
흘룸스키 논문 전에도 Valve TF2 텍스트 렌더링 논문 덕에 이 기법을 아는 사람 많았음. 그 PDF는 단순 SDF만 다루고 마지막에 여러 SDF로 해결한다고만 언급해서 다들 역설계해서 각자 구현했음. 나도 그중 하나임.
글 잘 썼고 인용도 정확함. Eric Lengyel은 레전드임.
sokol_gfx.h 위에 Slug 렌더링 예제 올려놨음. WebGPU랑 WebGL2 백엔드 둘 다 됨. stb_truetype으로 TTF 커브를 런타임 포맷으로 바꾸는데 이런 건 오프라인 파이프라인으로 가야 함. 커닝, RTL, 셰이핑은 다 빠져 있음.
OSD만 필요하면 OS 라이브러리로 텍스처 굽는 게 제일 편함. 근데 Slug에서 밴드 두 개 쓰는 이유가 뭔지 궁금함. winding count만 하는데 그렇게 마법 같진 않은데.
MSDF 코너가 작은 크기에서 문제였는데 distance range 올리니까 해결됨.
나도 Windfoil이라는 GPU 커브 렌더러 만드는 중임. Slug랑 비슷한데 밴드 하나만 써서 셰이더 저장공간을 덜 먹고, 박스 필터 ground truth에 더 가까운 AA가 나옴.
AA는 어떻게 함? Slug가 밴드 두 개 쓰는 게 AA 때문임. 가로 광선 하나, 세로 광선 하나 추적하는데 가로 광선이 가로 엣지랑 평행하면 교차값이 아예 안 나옴. 그래서 둘 다 쏘고 블렌딩함. 밴드는 그냥 가속 구조임. 진짜 ground truth는 한 픽셀 안에서 여러 번 점 판정하는 슈퍼샘플링임.
특허를 공개 도메인으로 준 건 좋은데, 2017년에 발표한 걸 2019년에 특허 낼 수는 없음. 아마 발표 전에 출원했고 '2019년에 특허 받음'으로 써야 맞음. AI가 쓴 글이라 일관성 기대하기도 뭐함.
자세한 건 Eric 블로그에 있음. 타임라인은 대체로 맞고 특허청 처리가 1년 넘게 걸린 것뿐일 수도 있음.
2017년 발표 후 2018년 2월 1일에 출원했음. 그게 특허 시스템에서 뭐가 문제임?
Eric이 Slug를 공개 도메인으로 풀자마자 OpenSlug류가 수백 개 쏟아질 줄 알았음. 어느 구현이 살아남을지 궁금함.
깃허브 저장소는 그렇게 엉망은 아님. 몇 달치 커밋 기록이 규칙적이고, LLM 도움은 파이썬 바인딩 정도임.
비교에서 빠진 기법이 있음. Rook & Possum의 Scanline Sweeper임. Sean Barrett이 같은 아이디어를 CPU로 독자 구현해서 stb_truetype에 넣었음.