DDS: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Welche Formate kann DDS?)
(Hinweis auf GL_ARB_texture_compression, link auf GIMP NM plugin)
Zeile 7: Zeile 7:
  
 
Eines der wichtigsten Features ist jedoch die Möglichekit '''[[Mipmap]]s 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.
 
Eines der wichtigsten Features ist jedoch die Möglichekit '''[[Mipmap]]s 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? ==
 
== Welche Formate kann DDS? ==
Zeile 50: Zeile 51:
 
=== Sonstige Formate ===
 
=== 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 [[Normalmap]]s) und das verbesserte Normalmapformat 3DC (von ATI entwickelt, besser für Normalmaps geeignet als DXT5_NM).
 
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 [[Normalmap]]s) und das verbesserte Normalmapformat 3DC (von ATI entwickelt, besser für Normalmaps geeignet als DXT5_NM).
 +
  
 
== Nutzung ==
 
== Nutzung ==
  
 
=== Anwendungen ===
 
=== 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 [http://developer.nvidia.com/object/photoshop_dds_plugins.html Nvidia]. Es bietet sehr viele Funktionen, inklusive einer Vorschau und der Möglichkeit verschiedene Einstellungssets zu speichern und zu laden :
+
Für alle aktuellen Bildbearbeitungsprogramme und 3D-Modeller dürfte es inzwischen (wenn nicht bereits integriert) Importer und Exporter für dieses Format geben.
 +
 
  
 
[[Datei:nv_dds_plugin_photoshop.jpg‎ ]]
 
[[Datei:nv_dds_plugin_photoshop.jpg‎ ]]
 +
 +
(Obiger Screenshot zeigt den Exportdialog des NVidia-Plugins für Adobes Photoshop)
 +
 +
 +
* Adobe Photoshop : [http://developer.nvidia.com/object/photoshop_dds_plugins.html Offizielles Plugin von NVidia]
 +
* GIMP : [http://nifelheim.dyndns.org/~cocidius/normalmap/ Open Source Normalmap Plugin] (allerdings mit weniger Funktion als das Plugin für Photoshop)
 +
  
 
=== Betriebssystem ===
 
=== Betriebssystem ===
Zeile 63: Zeile 73:
  
 
== Implementation ==
 
== Implementation ==
Inzwischen gibt es auch für Delphi mit Lossys [[Glbitmap_loader|glBitmap]] eine Bibliothek mit der man direkt DDS-Texturen laden kann. Alternativ kann man auch direkt den (etwas älteren) Loader von Mars [http://delphigl.com/forum/viewtopic.php?f=3&t=2486&p=18339&hilit=dds#p18339 aus unserem Forum] nehmen.
+
 
 +
 
 +
=== Delphi/Pascal ===
 +
Inzwischen gibt es auch für Delphi mit Lossys [[Glbitmap_loader|glBitmap]] eine Bibliothek mit der man direkt DDS-Texturen laden kann. Alternativ kann man auch direkt den (etwas älteren) Loader von Mars [http://delphigl.com/forum/viewtopic.php?f=3&t=2486&p=18339&hilit=dds#p18339 aus unserem Forum] nehmen. Wie der grundlegende Quellcode für einen DDS-Loader aussieht kann man aus [http://developer.nvidia.com/object/texture_compression_OpenGL.html diesem Dokument] von NVidia entnehmen (C++).
 +
 
 +
=== OpenGL ===
 +
Damit man komprimierte Texturen in OpenGL nutzen kann muss die Grafikkarte über die Extension [[GL_ARB_texture_compression]] verfügen. Da DDS allerdings auf S3Tc aufbaut, dürfte diese Extension auf allen Grafikkarten die innerhalb der letzten 8 Jahre produziert wurden funktionieren.

Version vom 13. Januar 2010, 13:01 Uhr

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 weitere, 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 überlegen ob bzw. welches dieser Formate für die entsprechende Textur in Frage kommt. Also Beispiel sei hier ein blauer Himmel mit weichen Farbü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übergänge entstehen die störend auffallen.

dds differenz.jpg

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 unterstü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.


nv dds plugin photoshop.jpg

(Obiger Screenshot zeigt den Exportdialog des NVidia-Plugins für Adobes Photoshop)



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

Delphi/Pascal

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. Wie der grundlegende Quellcode für einen DDS-Loader aussieht kann man aus diesem Dokument von NVidia entnehmen (C++).

OpenGL

Damit man komprimierte Texturen in OpenGL nutzen kann muss die Grafikkarte über die Extension GL_ARB_texture_compression verfügen. Da DDS allerdings auf S3Tc aufbaut, dürfte diese Extension auf allen Grafikkarten die innerhalb der letzten 8 Jahre produziert wurden funktionieren.