閱讀筆記|Slug 演算法十週年:從字型渲染到公開專利的關鍵進化

本篇文章更新時間:2026/03/18
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


Slug 演算法的十年:從高品質字型渲染到公開專利的重大里程碑

編輯前言:這篇文章出自 Eric Lengyel 的原文 A Decade of Slug。Slug 是近十年最具代表性的 GPU 字型渲染技術之一,這篇十週年回顧不只談演算法的演進,更宣布了一個相當震撼的決定:原始專利正式進入公領域。

核心觀點 (Key Takeaways)

  • Slug 演算法自 2016 年問世以來,已成為遊戲與專業圖形軟體的標準解法之一。
  • 基礎的 winding number、根判定等核心方法並未大改,但周邊優化經過大量調整與簡化。
  • 最大變革是加入 dynamic dilation(動態膨脹),自動解決邊界抗鋸齒與效率問題。
  • 作者宣布:Slug 專利已正式捐入公領域,任何人都可以免費實作。

深入解析

原文作者 Eric Lengyel 在 2016 年打造 Slug 演算法,是為了在遊戲引擎中直接從 Bézier 曲線在 GPU 上渲染字型,而不依賴預先生成的貼圖。這件事難度在於:

  • 如何避免浮點誤差造成的「掉像素、亮點、破線」等 artifacts
  • 如何讓畫面在 PS4、Xbox One 世代的效能下仍保持高速
  • 如何維持任意縮放、遠近、角度下的清晰度

原文提到 Slug 使用的核心原理至今仍然穩固。這使得 Slug 能在 Activision、Blizzard、id Software、Adobe 等公司廣泛落地,甚至被應用在科學視覺化、CAD、醫療設備與天文館等領域。

作者說:「Slug turned out to be the most successful software product I’ve ever made.」

接下來的內容則重點回顧 2017 後的重要改動與優化。

  • 移除 band split optimization:原本在大字型上能提升性能,但代價是 shader 變複雜,且對小字型反而可能拖慢。移除後資料量也能減半。
  • 移除 supersampling:原本用於非常小的文字,但效益有限;加入 dynamic dilation 後更顯多餘,移除後 shader 更簡潔。
  • 多色 Emoji 不再使用單個 shader loop:改成每層 glyph 分開畫,雖加大 vertex 資料,但效能更高、邏輯更乾淨。

Dynamic Dilation(動態膨脹):演算法的重大突破

這篇文章的重點無疑是 dynamic dilation。原本 Slug 需要使用者手動選擇一個「膨脹距離」,確保所有部分遮蓋的像素都能被 rasterizer 捕捉到。這造成兩個問題:

  • 距離設太小:小字型出現鋸齒或邊界抖動
  • 距離設太大:大字型浪費大量 GPU 工作區域

動態膨脹的核心精神是:

  • 以目前的 MVP matrix 與 viewport 尺寸
  • 讓 shader 自動計算每個頂點「剛好需要往外推多少」才能確保半個像素的安全邊界
  • 這個距離每個頂點都可能不同,特別是在透視投影下

作者在文中也首次公開完整推導,從 MVP、透視除法、viewport scaling 一路導出可用於 shader 的二次方程式,最後取得:

  • 往外移動多少距離 d
  • 如何用逆 Jacobian 調整 em-space

這部分數學細節較長,但我認為象徵著 Slug 從「實務上的最佳解」上升到可被其他開發者完全重現的工程方法。

筆者心得與啟發

讀完這篇文章,我最大的感受是:Slug 的成功不僅因為演算法本身,而是多年來的「持續簡化」。多數渲染技術的演進會越來越複雜,但 Slug 卻反其道而行,不斷移除 supersampling、移除 band split、移除不必要的 shader 迴圈。

動態膨脹的加入更像是將這一切推向極致:

  • 手動調整的參數不再需要
  • Shader 自動推算最佳值
  • 這代表 Slug 的「使用成本」被降到最低

最後,作者宣布專利公開,這點真的非常罕見。對許多想自製矢量字型渲染、希望避免 SDF 缺點、或正在打造 UI 系統的人來說,這幾乎是直接打開了一扇新的大門。

如果你從事遊戲開發、字型技術、UI 系統或需要高品質向量渲染的任何工作,我非常推薦你去看看作者提供的 GitHub shader 參考實作。這或許會成為新一代字型渲染的基礎。

來源:

  • 原文:A Decade of Slug
  • Journal of Computer Graphics Techniques, 2017.
  • Dynamic Glyph Dilation blog post, 2019.
  • Slug Algorithm Reference Shaders on GitHub.


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon