- Der Slug-Algorithmus für Bezierkurven-basiertes Font-Rendering auf der GPU rendert Vektordaten direkt ohne Texturen und wird in vielen Branchen eingesetzt, darunter Spiele, CAD, Videoschnitt und Medizintechnik
- Auf die Exklusivrechte wird zum 17.03.2026 verzichtet, wodurch das Patent vollständig in die Public Domain übergeht und von allen frei genutzt werden kann
- In der aktuellen Version wurden Leistung und Code-Effizienz durch Entfernung der
band split-Optimierung und von Supersampling sowie durch Vereinfachung des Emoji-Renderings verbessert
- Die größte Änderung ist die Funktion Dynamic Dilation, die die optimale Grenzerweiterung abhängig von Glyphengröße und Blickwinkel automatisch berechnet
- Mit dem unter MIT-Lizenz veröffentlichten GitHub-Referenz-Shader-Code kann jeder die Technik frei implementieren
Entwicklung und Verbreitung des Slug-Algorithmus
- Der Slug-Algorithmus wurde im Herbst 2016 entwickelt und 2017 in einem JCGT-Paper vorgestellt
- Danach wurde die Slug Library 1.0 kommerzialisiert und an große Unternehmen wie Activision, Blizzard, Ubisoft und Adobe lizenziert
- Sie wird in vielen Bereichen eingesetzt, darunter Spiele, wissenschaftliche Visualisierung, CAD, Videoschnitt, Medizintechnik und Planetarien
- Ursprünglich wurde er für hochwertiges Text-Rendering in der C4 Engine entwickelt und später auch im Radical Pie Formel-Editor eingesetzt
- Damit lassen sich Formeln, Klammern, Pfeile und andere Vektorgrafik-Elemente in hoher Auflösung darstellen
Die Entwicklung des Rendering-Verfahrens
- Slug rendert Bezierkurven-Daten direkt auf der GPU ohne vorab berechnete Texturen
- Das Verfahren ist robust gegenüber Gleitkommafehlern und bewahrt glatte Kurven sowie scharfe Kanten
- Die
band split-Optimierung brachte bei großen Glyphen Geschwindigkeitsvorteile, wurde aber wegen Leistungsnachteilen bei kleinen Schriften und höherer Komplexität entfernt
- Dadurch wurde der Pixel-Shader vereinfacht und die Größe der
band-Datentextur halbiert
- Adaptive Supersampling wurde verwendet, um Aliasing bei kleinen Schriftgrößen zu reduzieren, hatte aber nur begrenzte Wirkung und wurde durch das neue Dilatationsverfahren ersetzt
- Das mehrfarbige Emoji-Rendering wurde so umgestellt, dass jede Ebene als unabhängige Glyphe behandelt wird, was Leistung steigert und den Code vereinfacht
Dynamische Dilatation (Dynamic Dilation)
- Bisher musste die Erweiterung der Glyphengrenzen manuell mit einer festen Distanz angegeben werden
- Bei kleinen Schriftgrößen gingen dadurch Randbereiche verloren, bei großen Schriftgrößen wurde unnötig Platz verschwendet
- Dynamic Dilation wird automatisch im Vertex-Shader berechnet und bestimmt beim Rendern jeder Glyphe die optimale Erweiterungsdistanz
- Mithilfe von MVP-Matrix und Viewport-Größe werden die Grenzen um einen halben Pixel erweitert
- Je nach Blickwinkel kann auf jeden Vertex eine unterschiedliche Dilatationsdistanz angewendet werden
- Mathematisch wird dies als quadratische Gleichung hergeleitet, die die Bedingung einer Halbpixel-Erweiterung im Viewport-Raum für die Distanz d erfüllt
- Die endgültige Lösung hat die Form (d = \frac{s^3t \pm s^2\sqrt{u^2 + v^2}}{u^2 + v^2 - s^2t^2})
- Es wird das positive Vorzeichen gewählt, um sich nach außen zu bewegen
- Um die Glyphengröße beizubehalten, wird außerdem eine Korrektur der em-space-Koordinaten durchgeführt, wobei für jeden Vertex die inverse Jacobian-Matrix gespeichert wird
Patentfreigabe und Offenlegung
- Der Slug-Algorithmus erhielt 2019 das US-Patent (US10373352B1), doch auf die Exklusivrechte bis 2038 wird mit Wirkung zum 17. März 2026 verzichtet
- Durch Einreichung des Formulars SB/43 beim USPTO und Zahlung der Gebühr wurde die verbleibende Patentlaufzeit offiziell aufgegeben
- Damit kann jeder den Slug-Algorithmus frei implementieren und verwenden
- Sowohl kommerzielle als auch nichtkommerzielle Nutzung ist erlaubt, ohne Sorge vor Verletzungen von Schutzrechten
- Als Referenz für reale Implementierungen wurde das GitHub-Repository (https://github.com/EricLengyel/Slug) veröffentlicht
- Es steht unter der MIT-Lizenz und enthält gegenüber dem JCGT-Paper verbesserte Pixel-Shader sowie einen Vertex-Shader mit Dynamic Dilation
Bedeutung von Slug
- Slug hat sich als prägende Implementierung für GPU-basiertes Vektor-Font-Rendering etabliert
- Über zehn Jahre hinweg wurden Leistung, Einfachheit und Qualität zugleich verbessert
- Durch die Patentfreigabe ist der Weg für freie Übernahme und Weiterentwicklung in der gesamten Industrie offen
2 Kommentare
Das sind wirklich großartige Neuigkeiten.
Hacker-News-Kommentare
Dass er ihn nun nach einer gewissen Zeit der Public Domain gewidmet hat, ist sehr dankenswert. Falls ich irgendwann einmal einen Terminal-Emulator baue, würde ich diesen Algorithmus allein wegen seiner ästhetischen Code-Qualitäten gern ausprobieren
Ein professioneller Formeleditor für Windows 10/11, der Slug als Rendering-Engine verwendet und 60 Dollar kostet. Vermutlich nutzt er das auch beim Schreiben des FGED-Buchs
Trotzdem ist es ein großartiger Ersatz für MathType, und die OLE-Integration wirkt beeindruckend, weil es sich gut in Word einfügen lässt
Für mich ein Höhepunkt des Software Engineering. Danke an den Autor, dass er es der Public Domain gespendet hat
Davon sollte es mehr geben
Übrigens läuft auch Microsofts Loop-Blinn-Patent (für kubische Kurven) bald aus, was die Landschaft des Text-Renderings stark verändern könnte
Damals wurde ein Ansatz verwendet, bei dem Kurven durch Dreiecke angenähert wurden; ich weiß nicht, ob das immer noch so ist
Die früheren Texture-Atlas- oder SDF-Ansätze wirkten immer wie Behelfslösungen, und bei anderer Skalierung ließ die Qualität nach
Jetzt, da Slug offen ist, hoffe ich, dass wichtige Bibliotheken und Game Engines stärker auf höherwertige Rendering-Verfahren setzen
Mir war gar nicht klar, dass er in diesem Bereich immer noch so aktiv ist