
GPU テキスト レンダリング手法の比較:SDF、MSDF、Slug、Rive
TL;DR: AlphaPixelは、Eric LengyelがSlugアルゴリズムの特許を2026年3月17日にパブリックドメインに献上したことを受け、C++20実装「Slughorn」を開発。テクスチャアトラス、SDF、MSDF、テッセレーション、Slugの5つのGPU テキスト レンダリング手法の長所と短所を解説している。
AlphaPixelが公開した技術解説では、GPU上でのテキスト レンダリングにおける5つの主要なアルゴリズムの特徴と使い分けが説明されている。テクスチャベース手法から解析的な描画手法まで、それぞれが異なる要件に対応する設計となっている。
![]()
Slug アルゴリズムの登場と特許公開
Eric Lengyelは2017年に『Journal of Computer Graphics Techniques』vol. 6, no. 2 において Slug アルゴリズムを発表した。このアルゴリズムはテクスチャアトラスとフレームごとのテッセレーションを排除し、フラグメントシェーダーで直接グリフの輪郭からテキストをレンダリングする。Lengyelは2019年にこの技術を特許化し、2026年3月17日にその特許をパブリックドメインに献上した。AlphaPixelはこれを受けて、Slug技術のC++20実装である「Slughorn」を開発した。
Slughornの実装では、グリフは二次ベジェ曲線と直線セグメントとしてGPUバッファに保存され、水平バンドに分割する加速構造が構築される。OpenGL、Vulkan、WebGPU、DirectXをターゲットとしており、PythonバインディングをC++ APIと並行して提供する。SVG、FreeType フォント、Blend2D、Cairo、Skiaからのパスを入力可能である。
各レンダリング手法の比較
![]()
テクスチャアトラスは複数のグリフを事前にラスタライズして1枚のテクスチャに配置し、メモリ効率と描画速度に優れる。しかし拡大時にぼやけ、斜め角度で分解能が低下する。
符号付き距離フィールド(SDF)はChris Greenが2007年のSIGGRAPHで「Improved Alpha-Tested Magnification for Vector Textures and Special Effects」を発表した手法である。距離値を保存することで、スケール変更に対応できるが、コーナー部の精度に課題がある。
![]()
複数チャネル符号付き距離フィールド(MSDF)はViktor Chlumsky の2015年の論文と2018年の「Improved Corners with Multi-Channel Signed Distance Fields」に基づく手法で、3つのチャネルを使用することでコーナー保存性を向上させた。
![]()
Rive レンダラーは2024年にオープンソース化され、アニメーションベクトルアート向けに最適化されており、120 fps のパフォーマンスを実現する。
Slug の利点と性能特性
![]()
Slug は解析的にカバレッジを計算するため、トランスフォーメーション後にピクセル単位で正確な結果を得られる。テクスチャにベイク済み解像度がないため、6 ピクセルから6000 ピクセルまでの任意のサイズで鮮明さを保つ。テクスチャアトラスのように拡大時にぼやけず、SDFやMSDFのようにコーナーが丸まったりぼやけたりしない。
テクスチャベース手法に64 テクセル/em の解像度予算が与えられる場合、Slug はスケールに関わらず正確な描画を提供する。斜め角度での表示時もアリアシングの影響を受けない。
フォント形式との関連性
テキストレンダリングに用いられるフォント形式として、TrueTypeは二次ベジェ曲線を、OpenTypeのCFF形式は三次曲線を採用している。Slughornはこれらの形式に対応する設計となっている。
この記事は元記事の事実のみに基づいて自動生成されました。
筆者の見立て
- AlphaPixelの見解によると、Slugは「GPU上での正確で解像度非依存のテキストの正しい基盤」である(意見)
- 「テキストが任意のスケールと角度で鮮明である必要がある場合、SlugはMSDFより優位」と論じている(解釈)
出典
AlphaPixel Software Development『SDF vs MSDF vs Slug vs Rive vs Texture Atlas: GPU Text Rendering Explained』https://alphapixeldev.com/sdf-vs-msdf-vs-slug-vs-rive-gpu-text-rendering/