
2026/03/18 3:59
**スラグの十年**
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳
要約
Slug アルゴリズムのライブラリは十周年を迎え、パブリックドメインに移行しました。これにより開発者はライセンス費用から解放され、強力な GPU‑direct テキストレンダリングが提供されます。2016 年秋に開発され、2017 年中頃に JCGT に論文が掲載され、その直後に Slug ライブラリのバージョン 1.0 が公開されました。
主要な技術的進歩
- ダイナミック拡張(Dynamic Dilation):MVP 行列とビューポート寸法を用いて頂点シェーダで半ピクセル外側に自動拡張を計算します(式 (d = \frac{s^3t + s^2\sqrt{u^2+v^2}}{u^2+v^2-s^2t^2}))。これにより不要なパディングが排除され、エッジは鮮明に保たれます。
- バンド分割最適化の削除:ピクセルシェーダを簡素化し、バンドデータサイズを 4 つの 16‑bit コンポーネントから 2 に半減します。
- アダプティブスーパーサンプリングの廃止:ダイナミック拡張がエイリアシングを処理するため、追加コードはほぼ読み取り可能な文字だけに効果がありました。
- 絵文字レンダリングの簡素化:レイヤーごとのループから独立したグリフレイヤリングへ切り替え、頂点数オーバーヘッドを削減しました。
これらの変更は、2016 年代のコンソールでの頑健性と高速化、高品質なアンチエイリアス出力(任意のスケールやパースペクティブ)を実現し、新しい GPU への保守性も向上させることを目的としていました。
業界採用
Slug は C4 Engine のテキストエンジン、後に Radical Pie 方程式エディタで活用されました。Activision、Blizzard、id Software、2K Games、Ubisoft、Warner Brothers、Insomniac、Zenimax などの主要ゲームスタジオや、Adobe などの非ゲーム企業もライブラリを使用しています。
パブリックドメイン状態
特許 #10 373 352(2019 年に付与)は 2026 年 3 月 17 日からパブリックドメインへ譲渡されました。USPTO に Form SB/43 が提出され、料金が支払われたため、すべてのコードが自由に利用可能です。参照用頂点シェーダとピクセルシェーダは GitHub 上で MIT ライセンスされています。
影響
開発者は Slug の GPU‑direct レンダリングとダイナミック拡張を、ゲーム、アプリケーション、あるいは任意のグラフィックスソフトウェアにライセンス料なしで統合できます。簡素化されたシェーダは開発時間とリソース消費を削減し、パブリックドメイン公開によりコミュニティによる貢献が促進され、技術のさらなる洗練が期待されます。
本文
Eric Lengyel • 2026年3月17日
GPU上でビーズ曲線から直接フォントを描画する「Slug アルゴリズム」として現在知られている手法は、2016年秋に開発されました。今年でその創設から10周年となります。私は2017年中頃に JCGT にこの技術についての論文を掲載し、その直後に Slug ライブラリ v1.0 の最初のライセンスを販売しました。それ以来、Slug はビデオゲーム業界だけでなく、科学可視化、CAD、映像編集、医療機器、さらにはプラネタリウムなど、多岐にわたる企業で広くライセンスされています。クライアントは Activision、Blizzard、id Software、2K Games、Ubisoft、Warner Brothers、Insomniac、Zenimax、Adobe など多くの大手企業です。Slug は私が作り上げた中で最も成功したソフトウェア製品となりました。
当初、私は C4 Engine のテキストレンダリングを改善するために Slug を開発しました。このエンジンでは GUI だけでなく、ゲームレベル内でも非常に大きく表示される文字が斜め角度から見られる場合があります。最近では、Radical Pie 方程式エディタの構築にも Slug を使用しており、ここでも極めて高品質なフォントレンダリングと括弧・ルート記号・矢印・ハイライトなどのベクトルグラフィックスが求められます。Slug はまた、メイン編集ウィンドウ内の全ユーザーインターフェイスやすべてのダイアログボックスの描画にも利用されています。
本稿では、2017年に論文が発表され Slug ライブラリが初めてリリースされた時点から現在までのレンダリング手法の変化を概説し、自身のプロジェクトでアルゴリズムを実装したい方へ向けたエキサイティングな発表で締めくくります。
レンダリングの進化
Slug は GPU 上でビーズ曲線データから直接テキストとベクトルグラフィックスを描画し、事前計算済みまたはキャッシュされた画像を含むテクスチャマップを使用しません。浮動小数点誤差に対処しつつ、堅牢性・高速性・高品質という三拍子を同時に実現するのは容易ではありません。堅牢性とは、ピクセルが落ちたり、スパークルやストリークといったアーティファクトが絶対に出ないこと(証明付き)です。速度は、2016 年代のゲームコンソール上で妥当な量のテキストを描画してもフレームレートに大きく影響しないようにする必要があります。そして高品質とは、任意のスケールと視点でも滑らかな曲線と鋭い角がある、抗エイリアシングされた文字を意味します。
Slug のレンダリングアルゴリズムがこれらを実現する原理は、以下の図(PDF 版はこちら)にまとめられています。
コアアルゴリズム
- 根点の適格性判定と巻き数計算(堅牢性担当)は 2017 年から本質的には変わっていません。
- 論文で説明したその他の描画コード部分は年々変更されています。小規模な変更を簡潔に触れた後、動的拡張 (dynamic dilation) と呼ばれる主要追加機能について述べます。
バンド分割最適化
元論文では、大きい文字サイズで描画する際に有効になる「バンド分割最適化」が紹介されていました。これは大文字の速度を向上させる一方、ピクセルシェーダーで分岐が発生し小さいテキストではパフォーマンスをわずかに低下させました。また、各バンドに交差する曲線リストを 2 回(1方向のレイ用にソートしたものと逆方向)保持する必要がありました。速度向上は限定的だったため、この最適化は削除しました。これによりピクセルシェーダーの複雑さが減り、バンドデータテクスチャは 4 コンポーネントから 2 コンポーネントへと半分に縮小されました。
スーパーサンプリング
拡張セクションでスーパーサンプリングについて触れられていました。極端に小さいサイズの文字を描く際のアンチエイリアシングを改善するため、適応型スーパーサンプリングが早期に実装されましたが、以下の理由で削除しました。
- 文字が読みやすい程度にまで小さかった場合のみ意味があった。
- 小文字のアンチエイリアシングは動的拡張によって既に緩和された。
スーパーサンプリングを外すことでピクセルシェーダーは大幅に簡素化されました。
マルチカラー絵文字
マルチカラー絵文字(色が異なる複数のレイヤーから成る)を描画するためにループを追加した試みは、各レイヤーが全体領域のごく一部しかカバーしないにも関わらず、フルバウンディングポリゴン上で計算されていたため非効率でした。代わりに重ね合わせる形で独立したグリフを描画する方が高速であり、レイヤーごとにバウンディングポリゴンを持つようになりました。
動的拡張
Slug ライブラリ導入以降の最大の改良は 動的拡張 です。これ以前はユーザーが固定距離を指定し、すべてのグリフバウンディングポリゴンをその距離だけ拡張して部分的に被覆されたピクセルを必ず描画させる必要がありました。この手法では以下の問題が生じます。
- 距離が小さいと特定サイズ以下のグリフでアンチエイリアシングアーティファクトが発生。
- 距離が大きいと大きなグリフに対して不要なパディングが増え、GPU リソースを浪費。
動的拡張では、各描画時に頂点シェーダーで最適な拡張量を自動計算します。現在のモデルビュー投影行列(MVP)とビューポート寸法を用いて、オブジェクト空間の頂点が正規化ベクトル方向にどれだけ移動すればビューポート空間で 0.5 ピクセル分拡張できるかを求めます。これにより過剰なパディングなしに部分的に被覆されたピクセルを必ず描画できます。
以下は簡略化した公式の導出です(読みやすさ重視):
- (s = m_{30}p_x + m_{31}p_y + m_{33}) および (t = m_{30}\hat n_x + m_{31}\hat n_y) を計算。
- [ u = w\bigl(s(m_{00}\hat n_x+m_{01}\hat n_y)-t(m_{00}p_x+m_{01}p_y+m_{03})\bigr) ] [ v = h\bigl(s(m_{10}\hat n_x+m_{11}\hat n_y)-t(m_{10}p_x+m_{11}p_y+m_{13})\bigr) ]
- 二次方程式
[ (u^2+v^2-s^2t^2)d^2-2s^3td-s^4=0 ]
を解き、外側へ移動する符号を選んで [ d=\frac{s^3t+;s^2\sqrt{u^2+v^2}}{,u^2+v^2-s^2t^2,} ]
を得る。
拡張後のグリフは、逆ヤコビ行列(2×2)を用いてオリジナルサイズで描画されます。
特許発表
私は 2019 年に Slug アルゴリズムの特許を取得し、2038 年まで独占権を保持しています。しかし長期保有は誰にも利益をもたらさないと考え、本日(2026年3月17日)より Slug 特許をパブリックドメインに永続的に寄贈します。誰でもライセンスなしでアルゴリズムを自由に実装できます。(私の会社は USPTO に SB/43 フォームを提出し、特許 #10,373,352 の残存期間終結手数料を支払いました。)
実装をサポートするため、Slug ライブラリで使用されている実際のコードに基づく参照頂点シェーダーとピクセルシェーダー(MIT ライセンス)を新しい GitHub リポジトリに公開しました。ピクセルシェーダーは JCGT 論文で示されたものよりも大幅に改良されており、頂点シェーダーには動的拡張が組み込まれています。
関連リンク
- GPU‑Centered Font Rendering Directly from Glyph Outlines, Journal of Computer Graphics Techniques, 2017.
- Slug アルゴリズムの参照シェーダー(GitHub)。
- Dynamic Glyph Dilation ブログ記事、2019。
- Slug Library Web サイト。