DDS: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Seite neu angelegt und mit Informationen befüllt)
 
Zeile 1: Zeile 1:
 
== Was ist DDS? ==
 
== Was ist DDS? ==
 
DDS steht für "'''D'''irect '''D'''raw '''S'''urface" 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.  
 
DDS steht für "'''D'''irect '''D'''raw '''S'''urface" 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 '''[[Cubemap|Cubemaps]]''' und '''Volumentexturen (3D-Texture)'''. Besonders bei den [[Cubemap|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? ==
 
== 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 :
 
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) ===
 +
{| {{Prettytable_B1}}
 +
!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.
 +
 +
[[Datei: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 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).

Version vom 12. Januar 2010, 18:37 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 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.

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 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).