Texturkompression
Unter Texturkompression versteht man die Verwendung von Kompressionsverfahren um Bilder möglichst effizient zu speichern. Hierbei wird unterschieden zwischen verlustbehafteten (lossy) und verlustfreien (lossless) Verfahren.
Im Bereich der 3D Grafik verfolgen Entwickler damit meist eines oder mehrere der folgenden Ziele:
- Reduktion des Speicherbedarfs von Grafiken auf der Festplatte
- Reduktion der Ladezeiten von 3D Anwendungen
- Reduktion des Speicherbedarfs im GPU Speicher
Die genauen Ziele hängen von vielen Faktoren ab. Bei mobile Applikationen kann beispielsweise die Downloadgröße eine wichtige Rolle spielen. Bei PC- oder Konsolenspielen kann die Auswahl bestimmter Formate evtl. zu einer Hardwarebeschleunigung beim Dekodieren führen.
Spezielle Dateiformate
Während Bildformate wie JPEG, PNG oder WebP in vielen Bereichen etabliert sind, bringt deren Verwendung in Spielen zum Teil einige Nachteile mit sich.
Im Umfeld der 3D Grafik werden daher häufig spezielle Dateiformate eingesetzt um Grafiken zu komprimieren. Bekannte Formate sind z.B. S3TC, ETC oder PVRTC.
Mit den Besonderheiten dieser Formate beschäftigt sich dieses Kapitel.
S3TC im Detail
Das S3TC Format kennt man evtl. auch unter der Bezeichnung DXT1, DXT3 oder DXT5 oder von der typischen Dateiendung .dds. Dieses Format bietet Hardwarebeschleunigte Dekodierung auf so gut wie allen GPUs und ist seit seiner Aufnahme in den DirectX 6.0 Standard, fester Bestandteil der populären APIs.
Um Bilder im .dds Format zu speichern gibt es entsprechende dedizierte Tools oder auch Add-Ons für Software wie GIMP oder Photoshop. Die freie Grafikbibliothek ImageMagick unterstützt das Format ebenfalls, die Qualität der Ergebnisse kann allerdings mit den Ergebnissen kommerzieller Lösungen nicht mithalten.
Die Texturen unseres Projektes wurden mit ImageMagick mit dem folgenden Befehl konvertiert:
convert input.png -define dds:mipmaps=-1 -define dds:compression=dxt5 -define dds:cluster-fit=true output.dds
Aufgaben
1. Performance Analyse fertigstellen
1.1: Starten Sie die überarbeitete Engine aus Kapitel 5 und ergänzen Sie Ihre Analysen von Kapitel 4 um die neuen Ladezeiten mit komprimierten Texturen.
1.2: Vergleichen Sie den Speicherbedarf der Texturen von Kapitel 4 mit dem Speicherbedarf der Texturen von Kapitel 5 sowohl auf der Festplatte als auch im GPU Speicher und fügen Sie auch diese Ergebnisse in die Analyse hinzu.
1.3: Vergleichen Sie auch die Qualität der Texturen. Betrachten Sie dazu bitte nicht nur die hier mitgelieferten Texturen sondern nutzen Sie das Internet um einen besseren Eindruck zu gewinnen, wieviel Qualität bei Verwendung eines professionellen Encoders möglich ist.
2. S3TC erklären
2.1: Machen Sie sich mit dem S3TC Format vertraut. Ein guter Einstieg ist die englische Wikipedia Seite, die im Gegensatz zur deutschen auch Details zur Implementierung enthält. Den Link finden Sie weiter oben. Schaffen Sie es den grundsätzlichen Algorithmus von DXT1 mit maximal 3 Sätzen und einer Grafik zu erklären?
2.2: Mit Ihrem Wissen über den Algorithmus, beurteilen Sie Ihre Ergebnisse aus der Performance Analyse kritisch. Welche Vorteile entstehen durch die Verwendung von .dds Dateien? Welche Nachteile entstehen? Welche(s) Dateiformat(e) würden Sie einem jungen Indie-Entwickler empfehlen, dessen Engine entweder JPEG, PNG oder DXTn unterstützt und warum?
3. Konkrete Lösungen
3.1: Sie sollen eine Möglichkeit schaffen, dass der Spieler in den Einstellungen eines Spiels die Texturauflösung/Texturqualität verändern kann. Definieren Sie einen Lösungsansatz und begründen Sie Ihre Entscheidung.
3.2: Sie wollen den Funktionsumfang von Kapitel 4 bzw. Kapitel 5 als fertiges Spiel veröffentlichen. Ihr Publisher ist allerdings mit der langen Ladezeit von Kapitel 4 und der Downloadgröße von Kapitel 5 unzufrieden. Entwickeln Sie für beide Varianten jeweils eine Lösungsstrategie um dennoch zu einer Einigung zu kommen.
Sind Ihre Lösungsstrategien innovativ oder war es die erste Idee die Ihnen eingefallen ist?