9P by GN⁺ 7일전 | ★ favorite | 댓글 2개
  • GPU에서 Bézier 곡선 기반 폰트 렌더링을 수행하는 Slug 알고리듬은 텍스처 없이 직접 벡터 데이터를 렌더링하며, 게임·CAD·영상 편집·의료 장비 등 다양한 산업에서 사용됨
  • 독점권을 2026/3/17부로 포기하여 특허가 공공 도메인으로 완전 해제되어 누구나 자유롭게 사용가능해졌음
  • 최근 버전에서는 band split 최적화와 supersampling 제거, 이모지 렌더링 방식 단순화 등으로 성능과 코드 효율을 개선
  • 가장 큰 변화는 동적 팽창(dynamic dilation) 기능으로, 글리프 크기와 시점에 따라 자동으로 최적 경계 확장을 계산함
  • MIT 라이선스로 공개된 GitHub 레퍼런스 셰이더 코드를 통해 누구나 자유롭게 구현 가능

Slug 알고리듬의 개발과 확산

  • Slug 알고리듬은 2016년 가을에 개발되어 2017년 JCGT 논문으로 발표됨
    • 이후 Slug Library 1.0이 상용화되어 Activision, Blizzard, Ubisoft, Adobe 등 주요 기업에 라이선스 제공
    • 게임, 과학 시각화, CAD, 비디오 편집, 의료 장비, 플라네타리움 등 다양한 분야에서 사용됨
  • 원래는 C4 Engine의 고품질 텍스트 렌더링을 위해 개발되었으며, 이후 Radical Pie 수식 편집기에도 적용됨
    • 수식, 괄호, 화살표 등 벡터 그래픽 요소를 고해상도로 표현

렌더링 방식의 진화

  • Slug은 사전 계산된 텍스처 없이 Bézier 곡선 데이터를 GPU에서 직접 렌더링
    • 부동소수점 오차에도 강건하며, 매끄러운 곡선과 날카로운 모서리를 유지
  • band split 최적화는 대형 글리프에서 속도 향상이 있었으나, 작은 글꼴에서는 성능 저하와 복잡성 증가로 제거됨
    • 이로 인해 픽셀 셰이더 단순화 및 band 데이터 텍스처 크기 절반 감소
  • adaptive supersampling은 작은 글꼴의 앨리어싱 완화에 사용되었으나, 효과가 제한적이고 새로운 팽창 기법으로 대체되어 제거됨
  • 다중 색상 이모지 렌더링은 각 레이어를 독립 글리프로 처리하는 방식으로 변경되어 성능 향상 및 코드 단순화 달성

동적 팽창(Dynamic Dilation)

  • 기존에는 글리프 경계 확장을 고정 거리로 수동 지정해야 했음
    • 작은 글꼴에서는 경계 손실, 큰 글꼴에서는 불필요한 공간 낭비 발생
  • 동적 팽창은 버텍스 셰이더에서 자동 계산되어, 각 글리프 렌더링 시 최적 확장 거리 결정
    • MVP 행렬과 뷰포트 크기를 이용해 반 픽셀 단위로 경계 확장
    • 시점 변화에 따라 각 버텍스마다 다른 팽창 거리 적용 가능
  • 수학적으로는 뷰포트 공간에서 반 픽셀 확장 조건을 만족하는 거리 d를 구하는 2차 방정식으로 유도
    • 최종 해는 (d = \frac{s^3t \pm s^2\sqrt{u^2 + v^2}}{u^2 + v^2 - s^2t^2}) 형태
    • 양의 부호를 선택해 외곽 방향으로 이동
  • 글리프 크기를 유지하기 위해 em-space 좌표 보정도 수행하며, 각 버텍스에 역 Jacobian 행렬을 저장

특허 해제 및 공개 선언

  • Slug 알고리듬은 2019년 미국 특허(US10373352B1) 를 취득했으나, 2038년까지의 독점권을 2026년 3월 17일부로 포기
    • USPTO에 SB/43 양식 제출 및 수수료 납부로 특허의 잔여 기간을 공식 포기
  • 이에 따라 누구나 Slug 알고리듬을 자유롭게 구현 및 사용 가능
    • 상업적·비상업적 목적 모두 허용, 지식재산권 침해 우려 없음
  • 실제 구현 참고용으로 GitHub 저장소(https://github.com/EricLengyel/Slug) 공개
    • MIT 라이선스로 제공되며, JCGT 논문보다 개선된 픽셀 셰이더와 동적 팽창 포함 버텍스 셰이더 포함

Slug의 의의

  • Slug은 GPU 기반 벡터 폰트 렌더링의 대표적 구현체로 자리잡음
  • 10년간의 발전을 통해 성능, 단순성, 품질을 모두 향상
  • 특허 해제로 인해 산업 전반에서 자유로운 채택과 확장 가능성 확보

너무 훌륭한 소식이네요.

Hacker News 의견들
  • 정말 멋진 소식임. 예전에 이 알고리즘의 우아함에 감탄했지만, 특허 때문에 FOSS에서는 쓸 수 없어 아쉬웠음
    이제 일정 기간 후 공개 도메인으로 헌정했다니 감사한 일임. 언젠가 터미널 에뮬레이터를 만들게 되면, 코드의 미학적 매력 때문에 이 알고리즘을 써보고 싶음
    • 작성자가 직접 밝히길, 2019년에 Slug 알고리즘 특허를 받았지만 2038년까지 독점권을 유지하는 건 너무 길다고 생각했음. 그래서 오늘부로 Slug 특허를 영구히 공개 도메인에 헌정함
    • 소프트웨어 특허가 8년 정도만 유효하다면 찬성할 만하다고 생각함
  • 그의 최신 프로젝트는 RadicalPie
    Windows 10/11용 전문 수식 편집기로, Slug를 렌더링 엔진으로 사용하며 가격은 60달러임. 아마도 FGED 책을 쓰는 데 이걸 활용하고 있을 것 같음
    • 25년 전이었다면 정말 반가웠을 것 같음. 하지만 요즘은 이런 작업을 Windows에서 하는 사람을 거의 못 봄
      그래도 MathType의 훌륭한 대체재이고, OLE 통합으로 Word에 잘 삽입된다는 점은 인상적임
  • 예전 직장에서 Slug를 사용했는데, 정말 예술적으로 설계된 라이브러리였음
    소프트웨어 공학의 정점이라 생각함. 이를 공개 도메인으로 기부한 작성자에게 감사함
  • Eric에게 감사함. 그의 접근법을 Vello 같은 프로젝트와 비교하면 어떤 차이가 있을지 궁금함
  • 복잡하면서도 유용한 소프트웨어를 만든 사람이 정당한 보상을 받는 이야기를 보는 게 너무 좋음
    이런 사례가 더 많아졌으면 함
  • 놀라운 소식임. Eric에게 감사함
    참고로 Microsoft의 Loop-Blinn 특허(입방 곡선용) 도 곧 만료될 예정이라, 텍스트 렌더링 환경이 크게 바뀔 수도 있음
  • 정말 멋짐. 예전에 Ruffle이 GPU 가속 벡터 그래픽을 비슷하게 구현할 수 있을까 궁금했었음
    당시에는 곡선을 삼각형으로 근사하는 방식을 썼는데, 지금도 그런지 모르겠음
  • 훌륭한 소식임. 요즘 하드웨어 속도를 생각하면, Bezier 곡선에서 직접 글리프를 렌더링하지 못할 이유가 없음
    과거의 텍스처 아틀라스나 SDF 방식은 임시방편 같았고, 스케일이 달라지면 품질이 떨어졌음
    Slug가 공개되면서 주요 라이브러리나 게임 엔진들이 더 고품질 렌더링 방식을 채택하길 바람
  • 예전에 저자의 게임 엔진 C4로 작업했었는데, 벌써 20년 전임
    아직도 이 분야에서 활발히 활동 중이라는 걸 몰랐음
  • 혹시 ShaderToy에 올라왔는지 궁금함 😄