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.
Antworten:
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:
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:
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
quelle
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.
quelle