GPUs und Text-Rendering-Techniken.
Die Fähigkeit moderner Grafikprozessoren (GPUs), komplexe mathematische Berechnungen effizient und parallel durchzuführen, hat den Bereich der Computergrafik verändert und erlaubt heute die schnelle und originalgetreue Darstellung von Text in hoher Qualität.
Das Rendern von Text – also dessen Aufbau auf der Basis einer konturgestützten, skalierbaren Font-Software – ist ein wichtiger Baustein bei der Gestaltung von Drucksachen, grafischen Benutzeroberflächen (GUIs) und digitalen Medien. Mit der steigenden Nachfrage nach qualitativ hochwertigen Grafiken, Animationen und Echtzeit-Renderings ist der Zugriff auf Grafikprozessoren (GPUs) für das Rendering von Text zu einer bevorzugten Lösung geworden.
Die Fähigkeit moderner Grafikprozessoren, komplexe mathematische Berechnungen effizient und parallel durchzuführen, hat den Bereich der Computergrafik stark verändert, weil sie die schnelle und originalgetreue Darstellung von Text in hoher Qualität erlaubt. In dieser Artikelserie werden verschiedene Techniken zum Rendern von Text mittels GPU untersucht, einschließlich der Verwendung spezieller Bibliotheken, Shader und fortgeschrittener Algorithmen. Wir diskutieren die Vorteile und Herausforderungen bei der Verwendung eines Grafikprozessors für das Rendern von Text und zeigen anhand von Beispielen, wie diese Techniken in realen Anwendungen eingesetzt werden. Ob Sie Entwickler oder Designer sind oder sich einfach nur für die neuesten Trends in der Computergrafik interessieren, diese Artikelreihe bietet Ihnen nützliche Einblicke in die Welt des GPU-Text-Renderings.
Vorteile der Verwendung eines Grafikprozessors für die Textdarstellung.
Performance.
Die Verwendung eines Grafikprozessors zum Rendern von Text kann erhebliche Leistungsvorteile gegenüber dem Rendern von Text mit einer CPU bieten, was häufig zu schnelleren, reaktionsfähigeren Anwendungen und einem verbesserten Benutzererlebnis führt. Ein weiterer, ebenso wichtiger Aspekt ist, dass durch die Verlagerung eines Teils der Text-Rendering-Pipeline von der CPU auf die GPU CPU-Bandbreite und möglicherweise Laufzeitspeicher frei wird, der so für andere Anwendungsfunktionen bereitsteht.
Andere Vorteile.
- Viele Grafikprozessoren haben einen eigenen Speicher, der vom CPU-Speicher getrennt ist. Dieser Speicher wird in der Regel für die Speicherung und den Zugriff auf Texturdaten verwendet, in denen der gerenderte Text gespeichert wird. Der separate GPU-Speicher ermöglicht einen schnellen und effizienten Zugriff, wodurch die Latenz beim Rendern von Text verringert und die Gesamtleistung verbessert wird.
- Grafikprozessoren sind für parallele Verarbeitung ausgelegt, während eine CPU für serielle Verarbeitung optimiert ist. Dies bedeutet, dass die GPU eine komplexe Rendering-Aufgabe in kleinere Aufgaben aufteilen kann, die parallel ausgeführt werden, und damit in kürzerer Zeit.
- Viele Grafikprozessoren unterstützen Hardwarebeschleunigung für bestimmte Grafikberechnungen, unter anderem auch für das Rendern von Text.
- Viele Grafikprozessoren bieten eine Hardware-Kachelung an, bei der die komplexe Fläche innerhalb einer vektorisierten Buchstabenkontur in lückenlose, überlappungsfreie Polygone zerlegt wird, die von der GPU sehr effizient verarbeitet werden können.
Text-Rendering-Techniken mittels GPU.
Die Nutzung der Vorteile von Grafikprozessoren bei der Textdarstellung kann die Leistung, Qualität und Genauigkeit der Textwiedergabe in Grafikanwendungen erheblich verbessern. Es hat sich auch gezeigt, dass es eine Reihe verschiedener Techniken gibt, die bei der Nutzung von Grafikprozessoren für das Rendern von Text in Betracht gezogen werden können. In diesem Beitrag werden die Techniken Glyph-Rendering und Texture-Mapping untersucht. In den folgenden Artikeln werden weitere Techniken vorgestellt, erläutert und verglichen.
Glyph-Rendering und Textur-Mapping.
Textur-Mapping und Glyph-Rendering gelten als eine der ersten GPU-Text-Rendering-Techniken und stellen ein zweistufigen Prozess dar. Doch bevor wir uns mit diesen beiden Techniken beschäftigen, ist es wichtig, ein solides Verständnis des Textur-Mapping-Prozesses zu bekommen.
In der Computergrafik spricht man von Texturen, wenn es darum geht, Flächen zu füllen oder 3D-Modelle zu überziehen. Bei Texturen handelt es sich in der Regel um Bitmap-Flächen. Sie sind eine elementare Komponente in der modernen Grafikverarbeitung und werden in der Regel auf eine beliebige Ebene eines bestimmten Modells angewandt, um dem Betrachter ein realistischeres Erlebnis zu bieten. Die Bandbreite der Texturen reicht von einer einfachen Farbe über detaillierte Muster bis zu menschlichen Gesichtszügen.
Im folgenden Beispiel ist die Textur ein detailliertes Bild einer Ziegelmauer, das auf eine einfache 2D-Ebene abgebildet wird. Durch Texture-Mapping wird das Bild der Ziegelmauer auf die 2D-Ebene abgebildet, um eine realistisch aussehende Ziegelmauer zu erhalten, die anschließend in eine Szene platziert werden kann, um weitere realistische Effekte hinzuzufügen.
Es hat sich herausgestellt, dass Textur-Mapping auch zum Rendern von Schriftzeichen verwendet werden kann, die ein Wort oder einen Satz bilden, der dann auf eine beliebige Ebene oder sogar ein 3D-Objekt texturiert werden kann. Der Prozess ist im Wesentlichen derselbe wie bei der Ziegelwand oben, außer dass es für jede Glyphe, die in der Anwendung benötigt wird, eine eigene Textur gibt.
Schritt 1: Glyphen-Rendering.
Um eine einzelne Glyphe auf eine beliebige Oberfläche abbilden zu können, muss die Glyphe als Textur vorliegen, d. h. sie muss in ein Bild gerendert und dem Grafikprozessor während der Texturabbildungsphase zur Verfügung gestellt werden. Frühere Systeme, die diese Technik nutzten, renderten die benötigten Glyphen in einem Glyphenatlas, einem Bereich des Grafikprozessors, der alle Glyphenbilder speichert. Das folgende Bild ist ein Beispiel für einen Glyphenatlas, der aus einer zufälligen Anzahl von Zeichen besteht, die mit einer bestimmten Schrift in einer bestimmten Größe vorgerendert und im Grafikprozessorspeicher abgelegt wurden
Schritt #2: Textur-Mapping.
Nachdem alle für die Anwendung benötigten Glyphen vorgerendert und im GPU-Glyphenatlas gespeichert wurden, besteht der nächste Schritt bei dieser Technik darin, die benötigten Glyphen auf beliebigen Ebenen zu texturieren und diese Ebenen so auszurichten, dass die Glyphen Wörter bilden. Dieser Schritt ähnelt dem oben beschriebenen Beispiel einer Ziegelmauer, mit der zusätzlichen Komplexität, die einzelnen Glyphen richtig zu positionieren, um Wörter oder ganze Sätze zu bilden.
Sobald die Glyphen für ein bestimmtes Wort mit Texturen versehen sind, können sie für die richtige Darstellung „in der Szene“ positioniert werden.
Zu beachtende Punkte.
Da bei dieser Technik alle Glyphen vorgerendert werden, handelt es sich um einen schnellen Prozess, der in Anwendungen, bei denen der Textinhalt im Voraus bekannt ist, weitverbreitet ist. Bei der Implementierung von Glyph-Rendering und Texture-Mapping sind jedoch einige Nachteile zu beachten.
- Bei dieser Technik müssen alle verfügbaren Glyphen im Glyphenatlas vorgerendert und in die Anwendung integriert werden. Je nach Design und Anzahl der Glyphen kann dies die Gesamtgröße der Anwendung erheblich beeinflussen. Wenn die Anwendung z. B. mehrere Sprachen unterstützt, kann der Zeichensatz sehr groß sein, sodass der Glyphenatlas viel Speicherplatz beansprucht, um alle Glyphen zu speichern. Es gibt komplexere Beispiele, in denen der Glyphenatlas dynamisch gefüllt werden kann, was in zukünftigen Artikeln näher beleuchtet wird.
- Glyphen können in bestimmten Anwendungen Störungen beim Aliasing (Graustufenglättung) aufweisen, wobei die glatten Kanten gezackt oder verpixelt aussehen, je nachdem, ob der Text in einer Szene verankert ist oder nicht. Dieser Effekt ist in der Regel unerwünscht. Das Pre-Rendering der Glyphen in höheren Auflösungen kann helfen, diesen Effekt zu minimieren, kann aber auch zu größeren Glyphentexturen führen, die wiederum mehr Speicherplatz für den Glyphenatlas benötigen. Um dieses Problem zu lösen, können fortgeschrittene Techniken wie Distanzfelder verwendet werden, um Anti-Aliasing-Funktionen einzuführen, die Aliasing minimieren. Diese Techniken werden in einem zukünftigen Beitrag vorgestellt.
- Ein weiterer Aspekt ist die Anzahl der von der Anwendung unterstützten Schriftstile. Jeder Stil (Normal, Fett, Kursiv), der in der Anwendung verwendet wird, muss vorgerendert und gespeichert werden, wodurch sich die Größe des erforderlichen Glyphenatlasses erhöht. Die meisten UX-Experten würden argumentieren, dass die Typografie einer Benutzeroberfläche essenziell und im Allgemeinen nicht auf einen Stil beschränkt sein darf. Es gibt Situationen, in denen eine Benutzeroberfläche von Bold- oder Condensed-Text oder vielleicht sogar von mehreren Strichstärken profitieren würde. Der Punkt ist, dass die Benutzeroberfläche unbefriedigend sein kann, wenn sie auf nur eine Schriftart beschränkt ist.
Der nächste Schritt.
Im Gegensatz zum Glyph-Rendering und Textur-Mapping wird beim Distanzfeld-Rendering der Abstand zwischen jedem Pixel einer Glyphe und dem nächstgelegenen Rand dargestellt. Diese Technik bietet eine verbesserte Schärfe und allgemeine Rendering-Qualität, die auch dann noch gut ist, wenn der Text in verschiedenen 3D-Umgebungen skaliert und verzerrt wird.
Distanzfeld-Rendering der Abstand zwischen jedem Pixel einer Glyphe und der nächstgelegenen Kante dargestellt. Diese Technik bietet eine verbesserte Schärfe und allgemeine Rendering-Qualität, die auch dann noch gut ist, wenn der Text in verschiedenen 3D-Umgebungen skaliert und verzerrt wird, was wir im nächsten Beitrag näher beleuchten.