Vektorbasierte Schriftarten vs. Bitmap-Schriftarten in (2d) Spielen?

7

Ich weiß, dass viele Spiele Bitmap-Schriftarten verwenden. Was sind die Vorteile für das vektorbasierte Rendern / Bearbeiten von Schriftarten im Vergleich zu Bitmap-Schriftarten und in welchen Szenarien wären sie am wichtigsten?

Konzentrieren Sie sich bei der Beantwortung dieser Frage lieber auf 2D-Spiele.

Geben Sie gegebenenfalls Beispiele für Spiele an, die einen der beiden Ansätze verwenden.

BEARBEITEN: Bitte geben Sie auch Ihre persönlichen Vorlieben an, wenn Sie Erfahrung mit der Angelegenheit haben.

Einige Faktoren, die Sie berücksichtigen könnten:

  • Menge des im Spiel verwendeten Textes
  • Skalierung von Text
  • Überlagerung von Glyphen und Anti-Aliasing
  • allgemeine Renderqualität
  • Schriftfarben und Styling
  • Anforderungen an die Benutzeroberfläche
  • Lokalisierung / Unicode
  • Textumbruch und Formatierung
  • plattformübergreifende Bereitstellung
  • 2d vs 3d

Hintergrund:

Ich entwickle ein einfaches Falling-Block-Spiel in 2d, das auf den PC ausgerichtet ist. Ich möchte Textbeschriftungen für Level-, Score- und Menüschaltflächen hinzufügen. Ich verwende SFML, das FreeType intern verwendet, sodass vektorbasierte Funktionen für mein Projekt leicht verfügbar sind.

Meiner Ansicht nach variieren die Schriftgrößen in einfachen Spielen häufig nicht, und Bitmap-Schriftarten sollten für plattformübergreifende Probleme (Schriftformate und Qualität der Schriftwiedergabe) einfacher sein. Ich bin mir aber nicht sicher, ob mir hier einige wichtige Punkte fehlen, zumal ich das Aussehen des Endspiels verbessern möchte.

jmp97
quelle
2
Wichtiger Hinweis: SFML verwendet FreeType zum Laden von Schriftarten, rendert dann jedoch vorab zur Textur, sodass das eigentliche Rendern mit einer Bitmap-Schriftart erfolgt. Dies gibt Ihnen eine Mischung aus Vor- und Nachteilen beider Stile.
Jv42
1
@ jv42: Meistens gibt es dir die Nachteile.
1
@ JoeWreschnig gut ja, außer für die Rendergeschwindigkeit und die Zeit, die benötigt werden, um loszulegen.
Jv42
Alle Pro-Spiele, an denen ich gearbeitet habe, verwendeten generierte Bitmaps, entweder weil dies die einzige verfügbare Technik war oder damit der Grafiker sie größtenteils optimieren konnte.
Jv42

Antworten:

7

Bitmap-Schriftarten

Vorteile:

  • Kann in jede vorhandene Codebasis integriert werden, egal ob OpenGL, DirectX, DirectDraw oder sogar GDI +.

  • Schnell. Mit einem Texturatlas können Sie Ihren gesamten Text in einem Durchgang rendern.

  • Künstlergesteuert. Texturatlanten können prozedural generiert werden (Rendern eines Schriftstils in eine Textur) oder sie können aus einer Datei geladen werden. Künstler können dann das Aussehen einer Glyphe optimieren, ohne das Spiel zu unterbrechen.

Nachteile:

  • Nur nützlich für statischen Text. Wenn Sie mit animiertem Text arbeiten (Auftauchen, Drehen, Skalieren usw.), wird es schwierig, die verschiedenen Schriftstile zu verwalten.

  • Gedächtnisschwein. Wenn Sie Arial 12, 16 und 24 fett, kursiv oder beides möchten, wird dies zu 3 (Größen) * 3 (Stile) = 9 Textur-Maps. Wenn Sie eine weitere Schriftart hinzufügen, haben Sie 18 verschiedene Texturkarten. Fügen Sie Unterstützung für Unicode hinzu und Sie sehen 1024x1024 Texturen für jede Größe! Meist ein Problem auf mobilen Plattformen.

Vektorbasierte Schriftarten

BEARBEITEN: Ich habe dies nicht sehr deutlich gemacht, aber eine übliche Implementierung für vektorbasierte Schriftarten besteht darin, sie in einen Texturatlas zu rendern und sie wie eine Bitmap zu verwenden, was Ihnen den gleichen Geschwindigkeitsvorteil wie eine Bitmap-Schriftart bietet.

Vorteile:

  • Leicht zu manipulieren. Da Sie zwischen Kontrollpunkten auf der Glyphe rasteren, können Sie diese Kontrollpunkte nach Belieben verzerren. Sehr flexibel für Künstler.

Nachteile:

  • Langsam. Wenn Sie Transformationen berücksichtigen, bedeutet dies, dass Sie jeden Kontrollpunkt transformieren und eine Reihe von Dreiecken für sie rastern müssen.

  • Schwer zu implementieren. Es ist schwierig, Glyphen zu rastern.

Wie machen andere das?

Schauen Sie sich diese Seite an:

http://www.microsoft.com/typography/OTSPEC/TTCH01.htm

So hat Microsoft es für Windows 95 und höher gelöst. Grundsätzlich:

  • Ein Schriftdesigner liefert eine Gliederung (vektorbasiert)
  • Für jede Punktgröße (8, 10, 12 usw.) wird eine Reihe von Anweisungen zur Gitteranpassung hinzugefügt

Dies bietet Ihnen den Vorteil vektorbasierter Schriftarten (einfach zu manipulieren) in Kombination mit der Geschwindigkeit von Bitmaps.

Schließlich möchten Sie vielleicht eine dritte Option betrachten:

https://steamcdn-a.akamaihd.net/apps/valve/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

Ritter666
quelle
3
Mist, das war alles, was ich gerade geschrieben habe und mehr, als das gefürchtete Popup "Eine neue Antwort" erschien und diese großartige Antwort erschien ...! :)
Roy T.
Heute du, morgen ich. ;)
Knight666
2
Die "Rasteranpassungsanweisungen" (normalerweise als "Hinweis" bezeichnet) sind eines der Dinge, die das Rendern von Vektorschriftarten verlangsamen. Sie verbessern die Anzeigequalität bei weiterem Leistungsaufwand.
1
"Das Rendern in Textur ist eine Optimierung." - Um alles heute realistisch zu rendern, müssen Sie es zuerst in eine Textur rendern. Mir sind keine anständigen TrueType-Schriftrenderer bekannt, die mit OpenGL zusammenarbeiten, ohne vorher eine Textur zu rendern. (Das heißt, sie würden Kontrollpunkte in den Vertex-Shader einspeisen und den Fragment-Shader das Rasteren und Andeutungen steuern lassen.) Es gibt einige interessante Arbeiten, die Vertex- und Fragment-Shader die Splines (nicht TT-kompatibel) selbst handhaben zu lassen, aber dies ist nicht üblich und ziemlich fortgeschritten.
2
Was ich getan habe, ist in meiner Antwort auf die Frage beschrieben, von der dies ein Duplikat ist. (Und wenn ich "tat" sage, meine ich "Sie können in ein Geschäft gehen und das Spiel kaufen, das dies tut", nicht "Ich habe es einmal in einem Buch gelesen".)
1

Der Vorteil der Verwendung von Vector / True Type-Schriftarten gegenüber Bitmap-Schriftarten liegt in der größeren Flexibilität innerhalb der Anwendung: Sie können sie in jeder Größe zeichnen, kursiv schreiben, fett formatieren und einige ausgefallene Transformationseffekte hinzufügen, alles mit maximaler Qualität.

Es gibt viele, viele professionelle Vektor-Schriftarten, viele von ihnen haben Tausende von Glyphen und viele Metadaten für jede, was es sehr rentabel macht, Nicht-ASCII-Zeichenfolgen anzuzeigen, die für Übersetzungen nützlich sind.

Der Leistungsunterschied wird nur während des Ladens der Schrift angezeigt, wenn Sie die Glyphen korrekt zwischenspeichern. (Der SFML-Rendercode ist überhaupt nicht optimiert, das Laden und Zwischenspeichern von Glyphen erfolgt jedoch ordnungsgemäß.)

FreeType verfügt über einen eigenen Rasterizer und einen eigenen Font Loader und verwendet keine System-Raster, sodass Qualität und Schriftformate kein Problem darstellen.

API-Beast
quelle
Ich kann Ihren Standpunkt zur Flexibilität sehen. Ich stelle mir jedoch vor, dass es beim Rendern von Schriftarten auf verschiedenen Plattformen Unterschiede geben kann, die es schwierig machen, plattformübergreifende exakte Abmessungen zu erzielen. Bei Bitmap-Schriftarten wissen Sie, dass die Schrift genau gleich aussieht und immer die gleiche Anzahl von Pixeln belegt.
jmp97
Nein, Freetype ist auf allen Plattformen und Geräten gleich. Wenn Sie dieselbe Schriftart und Größe verwenden, erhalten Sie dieselben Ergebnisse. Sie haben die gleiche Zuverlässigkeit.
API-Beast