DDS
Inhaltsverzeichnis
Was ist DDS?
DDS steht für "Direct Draw Surface" und ist ein eigenes für Texturen (und damit 3D-Anwendungen) entwickeltes Bildformat von Microsoft. Im Gegensatz zu herkömmlichen Bildformaten bringt es daher einige sehr wichtige Funktionen mit, die es für die 3D-Programmierung als perfektes Texturformat prädestinieren. Das Format ist zudem frei nutzbar, es fallen also keine Lizenzgebühren an, und man bewegt sich auch nicht in einem Graubereich, denn diverse "freie" Bildformate sind eigentlich nur bedingt frei nutzbar. Während normale Bildformate feste Spezifikationen besitzen und nur zu einem gewissen Grad anpassbar sind (z.B. PNG mit 8 Bit oder 24 Bit, Kompressionsrate bei JPG, etc.) ähnelt DDS mehr einem Containerformat (ähnlich wie bei Videocodecs) und kann unterschiedlichste Texturinformationen beinhalten.
Was kann man in DDS ablegen?
DDS speichert neben 2D-Texturen auch Cubemaps und Volumentexturen (3D-Texture). Besonders bei den Cubemaps ist es sehr praktisch diese alle in einer Datei ablegen zu können, was mit DDS problemlos möglich ist.
Eines der wichtigsten Features ist jedoch die Möglichekit Mipmaps direkt in der Textur speichern zu können. Dadurch hat man zum einen direkten Einfluss auf die Generation der Mipmaps (können je nach Plugin sogar komplett selbst erstellt werden oder werden von diesem mit anpassbaren Parametern errrechnet). Bei allen anderen Formaten muss man diese entweder über gluBuildMipMaps generieren lassen, was sehr langsam ist, also die Ladezeiten der Anwendung stark erhöht und keinerlei Einstellungen zulässst, oder man lässt die Mipmaps auf aktuelleren Karten direkt in der Hardware generieren (passiert über die entsprechende Extension). DDS stellt hier also den Idealfall dar, denn die dort abgelegten Mipmaps werden direkt mit der Textur in den VRAM übertragen.
Welche Formate kann DDS?
Im DDS-Format können so gut wie alle aktuell genutzten Texturformate abgelegt werden. Das Format ist zudem erweiterbar, sollte es also irgendwann z.B. neue Grafikkarten mit neuen Kompressionsformaten geben, kann DDS erweitert werden. Folgende Format (evtl. gibt es noch wietere, die Liste basiert auf dem Plugin von NVidia) können dort gespeichert werden :
Komprimierte Formate (fester Kompressionsratio)
Format | Ratio | BPP | Kanäle | Bemerkung |
---|---|---|---|---|
DXT1 | 8:1 | 4 | (A)RGB | Wahlweise mit 1 Bit Alpha |
DXT3 | 4:1 | 8 | ARGB | Expliziter Alphakanal |
DXT5 | 4:1 | 8 | ARGB | Interpolierter Alphakanal |
Da alle diese komprimierten Formate einen festen Kompressionsratio aufweisen, sollte man vorher überlgen ob bzw. welches dieser Formate für die entsprechende Textur in Frage kommt. Also Beispiel sei hier ein blauer Himmel mit weichen Farübergängen genannt, der durch die feste Kompression u.U. so schlecht aussehen kann dass man hier ein unkomprimiertes Texturformat wählen muss, denn durch die feste Kompression können ggf. ungewollt harte Farbüergänge entstehen die störend auffallen.
Auf obigem Bild sieht man rechts die um ein vielfaches (Faktor 100) verstärkte Differenz zwischen der Grundversion (PNG, verlustfrei) und der als DXT gespeicherten Version der linken Textur. In der Praxis fällt der Unterschied natürlich nicht so stark aus, ist aber je nach Textur mit bloßem Auge zu erkennen.
Fließkommaformate (unkomprimiert)
Besonders in letzter Zeit hat sich auch in der 3D-Programmierung sog. HDR durchgesetzt (High Dynamic Range), mit welchem man realistische Lichtverältnisse und v.a. Wechsel dieser Lichterverähltnisse sehr gut simulieren kann (z.B. wenn man von einen dunklen Tunnel verlässt, dann brauchen die Augen normalerweise kurz um sich auf die Helligkeit einzustellen). Dazu benötigt man Texturformat die pro Kanal mehr als 8 Bit speichern können, und auch hier kann man DDS nutzen. Hinweis : DDS untersützt auch Integerformate mit mehr als 8 Bit pro Kanal (16 Bit), die auf alten Karten für HDR genutzt werden können, dann aber nicht so gute Ergebnisse erzielen.
Das DDS-Format unterstützt sowohl Fließkommaformate mit 16-Bit pro Farbkanal' (max. 64 Bit) als auch Formate mit 32-Bit pro Farbkanal (max. 128 Bit).
Sonstige Formate
DDS kann zusätzlich noch eine Reihe weiterer Formate speichern. Darunter Standardformate (unkomprimiert), also z.B. 8-Bit ARGB, Palettenformate und spezielle Formate wie DXT5_NM (für Normalmaps) und das verbesserte Normalmapformat 3DC (von ATI entwickelt, besser für Normalmaps geeignet als DXT5_NM).
Nutzung
Anwendungen
Für alle aktuellen Bildbearbeitungsprogramme und 3D-Modeller dürfte es inzwischen (wenn nicht bereits integriert) Importer und Exporter für dieses Format geben. Für Photoshop empfiehlt sich das Plugin von Nvidia. Es bietet sehr viele Funktionen, inklusive einer Vorschau und der Möglichkeit verschiedene Einstellungssets zu speichern und zu laden :
Betriebssystem
Für die meisten Entwickler ist es sehr praktisch direkt im Dateibrowser des Betriebssystems Texturen usw. sehen zu können. Leider bieten Betriebssysteme für das DDS-Format im Regelfall keine Vorschau, allerdings gibt es auch hier Plugins die sich direkt in den Dateibrowser einklingen, auch von NVidia. Leider funktioniert dies jedoch nur in 32-Bit Umgebungen, für 64-Bit Betriebssysteme muss man also woanders nach Alternativen suchen, z.B. MysticThumbs (Freeware).
Implementation
Inzwischen gibt es auch für Delphi mit Lossys glBitmap eine Bibliothek mit der man direkt DDS-Texturen laden kann. Alternativ kann man auch direkt den (etwas älteren) Loader von Mars aus unserem Forum nehmen.