Was ist eine DDS-Datei?
Eine DDS-Datei ist ein DirectDraw-Surface-Container für Texturdaten, die von Grafiksystemen verwendet werden. Sie kann Mipmaps, Cube-Maps, Volumentexturen und komprimierte Pixelformate enthalten, die sich direkt auf der GPU verwenden lassen.
So funktionieren DDS-Dateien
DDS speichert GPU-Texturdaten hinter einer Signatur aus vier Bytes und einem festen Header, der Abmessungen, Pixelformat, Mipmap-Anzahl und Oberflächeneigenschaften erfasst. Neben einem einzelnen 2D-Bild kann es Mipmap-Ketten, Cube-Map-Flächen, Volumentexturen und mit der Header-Erweiterung für DirectX 10 auch Textur-Arrays beschreiben. Die Pixelnutzdaten sind entweder unkomprimiert oder blockkomprimiert (DXT1 bis DXT5, später BC1 bis BC3 genannt, sowie BC4 bis BC7), was die Grafikhardware direkt decodiert. Da das Format durch Erweiterungen gewachsen ist, unterscheiden sich Dateien in den verwendeten Headerfeldern und Formatcodes. Die Unterstützung durch Werkzeuge variiert je nach Variante.
Wichtige Fakten
- Eine DDS-Datei beginnt mit dem Magic-Wert
DDS(0x20534444) und einem 124 Bytes großen Header vom TypDDS_HEADER. Ein Leseprogramm sollte daher mindestens 128 Bytes verlangen und prüfen, ob das HeaderfelddwSizeden Wert 124 hat und die eingebettete StrukturDDS_PIXELFORMATdie Größe 32 aufweist. Wenn das PixelformatDDPF_FOURCCmit dem FourCCDX10setzt, folgt eine Struktur vom TypDDS_HEADER_DXT10und die Mindestgröße steigt auf 148 Bytes. Diese Mindestgrößen decken nur die Header ab, nicht die Pixeldaten. Die Erweiterung wird für Textur-Arrays und für DXGI-Formate benötigt, die sich mit der älteren Pixelformatstruktur nicht ausdrücken lassen. Microsoft weist darauf hin, dass nicht alle DDS-Werkzeuge sie unterstützen. - Bei Direct3D hängt es vom Feature-Level eines Geräts ab, welche blockkomprimierten Formate es akzeptiert, nicht vom Container: Microsoft führt BC1 bis BC3 (die früheren DXT1 bis DXT5) als auf jedem Feature-Level erforderlich auf, BC4 und BC5 ab Direct3D 10 und BC6H sowie BC7 erst ab Direct3D 11. Für möglichst breite Werkzeugkompatibilität empfiehlt Microsoft den älteren Pixelformatheader für unkomprimierte RGB-Daten und Daten in DXT1 bis DXT5.
- Blockkomprimierte Mip-Stufen werden als vollständige Blöcke mit 4×4 gespeichert. Eine Stufe, die kleiner als 4×4 Texel ist, wird dennoch auf einen vollständigen Block aufgefüllt (8 Bytes für BC1 und BC4, 16 Bytes für die übrigen BC-Formate). Daher müssen Stufengrößen in Blöcken statt in Pixeln berechnet werden. Die Zeilenformel von Microsoft lautet bei Auswertung mit Ganzzahldivision
max(1, (width + 3) / 4) * block-size. - Headerfelder sind nicht über alle Schreibprogramme hinweg zuverlässig. Microsoft rät Leseprogrammen, sich nicht darauf zu verlassen, dass die Flags
DDSD_CAPS,DDSD_PIXELFORMAT,DDSD_MIPMAPCOUNT,DDSCAPS_TEXTUREoderDDSCAPS_COMPLEXgesetzt sind, und den Zeilenabstand selbst zu berechnen, stattdwPitchOrLinearSizezu vertrauen. Alpha ist nur teilweise beschrieben: Der DX10-Header hat ein Feld für den Alphamodus (unbekannt, nicht vormultipliziert, vormultipliziert, deckend oder benutzerdefiniert), das eine Datei auf unbekannt belassen kann. Bei älteren Dateien zeigen nur die FourCCsDXT2undDXT4vormultipliziertes Alpha an. Andere ältere Dateien machen dazu keine Angabe; üblicherweise wird bei ihnen nicht vormultipliziertes Alpha angenommen.
Wann DDS-Dateien relevant sind
Verwenden Sie DDS, wenn eine Rendering-Pipeline von vorab berechneten Mipmaps oder GPU-nativer Texturkomprimierung profitiert. Prüfen Sie die Formatunterstützung der Ziel-API und der Hardware, da nicht unterstützte Varianten eine Konvertierung oder Dekomprimierung erfordern.
So hilft Transloadit bei DDS-Dateien
Transloadits Bildformatreferenz behandelt die Bild-Robots auf ImageMagick-Basis, etwa /image/resize, und führt DDS sowie die Varianten DXT1 und DXT5 als lesbar und schreibbar auf.
Die Referenz erfasst nur die Lese- und Schreibunterstützung auf Formatebene. Sie gibt nicht an, welche DDS-Headervarianten oder BC-Formate decodiert werden. ImageMagick dokumentiert dxt1, dxt5 und unkomprimiert als seine DDS-Schreiboptionen. Testen Sie daher repräsentative Dateien, bevor Sie sich auf Texturen mit DX10-Header oder BC7 verlassen.
Entdecken Sie Transloadits Möglichkeiten für Dateiformate & Komprimierung
Quellen
- Microsoft Learn: Programmierleitfaden für DDS (Dateiaufbau, Varianten, Berechnung des Zeilenabstands)
- Microsoft Learn: Struktur DDS_HEADER
- Microsoft Learn: Struktur DDS_HEADER_DXT10
- Microsoft Learn: Texturblockkomprimierung in Direct3D 11 (Formate und minimale Feature-Level)
- Microsoft Learn: Blockkomprimierung (Direct3D 10), virtuelle und physische Größe im Vergleich
- Microsoft Learn: Verwendung komprimierter Texturen (Direct3D 9), DXT1 bis DXT5 und vormultipliziertes Alpha
- ImageMagick: Bildformate, DDS-Eintrag und Definitionen mit dds:
- Pillow-Handbuch: Bilddateiformate, DDS (Lese- und Schreibunterstützung je Variante)