Slug rendert Text direkt aus der Outline – ganz ohne Atlas

SDF vs. MSDF vs. Slug: GPU Text Rendering

Slug rendert Text direkt aus der Outline – ganz ohne Atlas

GPU-Textrendering steht vor der Wahl: Texture Atlas, SDF, MSDF, Tessellation oder Slug. Der Artikel erklärt jede Methode und ihre Kompromisse. Slug, 2017 von Eric Lengyel entwickelt und 2026 gemeinfrei gegeben, umgeht den Atlas komplett und berechnet die Abdeckung pro Pixel im Fragment-Shader – gestochen scharf bei jeder Größe und unter jeder 3D-Transformation, ideal für AR, VR und CAD.

Slug berechnet die Abdeckung analytisch, pro Pixel, nach der Transformation, sodass sie exakt bleibt, egal wie nah, wie fern oder wie schräg der Betrachter steht – nichts wird vorab gebacken, keine Obergrenze wird erreicht.
  1. YuechenLi

    Dieser Artikel enthält einige ungenaue Informationen, da ein MSDF-Atlas nicht statisch gebacken werden muss, sodass das Argument "CJK-Zeichen bedeutet riesiger Atlas" nicht wirklich ein Problem darstellt, wenn man sie asynchron in den Atlas hochladen kann. (Asynchrone Outline-Extraktion ist für C-Bibliotheken etwas schwieriger, weshalb die Pipeline größtenteils auf Atlas-Upload beschränkt ist).

    Die andere Sache ist, dass MSDF-Rendering ziemlich günstig ist und leicht auf der CPU ohne GPU-Shader durchgeführt werden kann; die Atlas-Generierung/-Upload ist der teure Teil, aber es ist ein einmaliger Aufwand pro Zeichen pro Schriftart, da der Atlas nur eine normale Bitmap-Texturdatei ist. MSDF-Text hat bei den meisten Zoom-Auflösungen scharfe Kanten, und kleiner Text wird sowieso besser mit einfachem CPU-Raster umgegangen.

    Ich konnte wirklich keinen signifikanten Vorteil darin erkennen, Slug anstelle von MSDF + Raster-Fallback für kleine Schriftgrößen zu verwenden. Es ist definitiv exakter, aber ich bin mir nicht sicher, ob der marginale Auflösungsvorteil die viel kompliziertere GPU-abhängige Darstellung wert ist. Deshalb würde ich es wirklich gerne selbst testen, wenn ich Zeit habe, anstatt mich auf das Wort eines offensichtlich von KI geschriebenen Artikels zu verlassen.

  2. exDM69

    Als Hobbyprojekt habe ich einen Font-Rasterizer-Algorithmus geschrieben (eigentlich zwei Algorithmen), der pixelgenaue, kantengeglättete Bilder (wie Slug) mit einem ähnlichen, aber anderen Algorithmus erzeugt. Anstatt Slugs cleveren Wurzelklassifizierer für Bezier-Kurven zu verwenden, unterteile ich Bezier-Kurven in monotone Abschnitte, in denen die Auswertung der Windungszahl viel einfacher ist und für eine Gruppe von Pixeln parallel durchgeführt werden kann. Es funktioniert gut auf der GPU mit Warp/Wave/Subgroup-Operationen und auf der CPU mit SIMD.

    Auf den ersten Blick klingt das Unterteilen der Bezier-Kurven nach einer schlechten Idee (mehr Beziers zum Rastern), aber es eröffnet Türen für etwas Parallelität, und die meisten Bezier-Kurven, die in Schriftarten vorkommen, sind ohnehin monoton (also ist der Zuwachs sehr bescheiden). Dies wurde von diesem unterhaltsamen, aber nicht sehr ernsthaften Video über Font-Rasterisierung inspiriert [0].

    Die erste Parallelisierungsoptimierung besteht darin, die Begrenzungsbox der Kurve gegen einen rechteckigen (im UV-Raum) Pixelbereich zu prüfen, wodurch schnell festgestellt werden kann, ob die Bezier-Kurve überhaupt ausgewertet werden muss. Dies kann pro GPU-Warp durchgeführt werden.

    Die zweite Optimierung funktioniert nur für rektilineare Transformation (keine Rotation, Scherung oder Perspektive). Das Lösen der quadratischen Gleichung beinhaltet eine Quadratwurzel und eine Division (die allein >30 % der Berechnung ausmachen), die für jede Zeile und Spalte von Pixeln anstelle für jedes Pixel berechnet werden können (2n statt n^2).

    Beide Optimierungen beruhen auf mathematischen Invarianten der Monotonie, d. h. die Ableitung der Bezier-Kurve muss […]

  3. GuB-42

    Ich habe einmal SDF-Textrendering implementiert. Was mir an dieser Technik am besten gefallen hat, ist, wie einfach es ist, Effekte obendrauf hinzuzufügen. Mit ein paar Zeilen Shader-Code hatte ich Umrisse und eine Weichzeichnung der Kanten (Antialiasing). Ich habe die MSDF-Variante nicht ausprobiert, da es mir egal war, dass Ecken beim Vergrößern nicht scharf sind, also weiß ich nicht, ob diese Effekte bei MSDF kaputtgehen.

    Slug scheint nichts davon zu unterstützen, es ist nur "für einen gegebenen Punkt, bin ich drin oder draußen?", aber es sagt dir nicht, um wie viel, was auf wirklich hochauflösenden Displays und bei großen Größen großartig ist, aber du verlierst die Fähigkeit, die Art von Effekten zu erzielen, die mit SDFs möglich sind, und musst dich separat um Antialiasing kümmern.

  4. jdanford

    Mann, ich bin unglaublich müde davon, LLM-generierte Texte zu lesen

  5. mattdesl

    Ich habe auch an einem GPU-Kurvenrenderer gearbeitet, Windfoil, basierend auf einer Formulierung, die Fable 5 ursprünglich während einer gerichteten Suche vorgeschlagen hat [1]. Es ähnelt in mancher Hinsicht Slug, ist nicht immer so schnell, verwendet aber weniger Shader-Speicher (einzelnes Band statt zwei) und erzeugt eine höhere Antialiasing-Qualität, d. h. näher an einer box-gefilterten Ground Truth.

    Das könnte für einige Game-/Grafikentwickler hier interessant sein...

    [1] https://github.com/texel-org/windfoil-algorithm

Mehr von diesem Tag

2026-09-30