DDS-Texturen

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


  • DDS = Direct Draw Surface: Das Format wurde von Microsoft für DirectX für die Speicherung von Texturen eingeführt. Es ist eine Art Kontainer für verschiedene Kompressionsvarianten für Texturen. Die wichtigsten sind die S3 Texturkompression (DXT1-5) und 3Dc von ATI sowie verschiedene verlustfreie Formate. Train Fever nutzt primär DXT1, DXT5 sowie 3Dc (ATI2A2XY).

    Die wichtigsten Kompressionsvarianten:


    DXT1RGB5-6-5kein Alpha-Kanal
    DXT1 (a)RGBA5-6-51-Bit Alpha
    DXT3RGBA5-6-54-Bit Alpha
    DXT5RGBA5-6-5interpoliertes Alpha
    DXT5_NMXY0-6-0-AX wird nach G und Y nach Alpha verschoben
    3DcXYFür Normal Maps


    1 DXT1


    Die Textur wird in 4x4 Pixel große Blöcke eingeteilt; sogenannte Texel. Normalerweise würden diese 16x32 (=512) Bit belegen. Bei 24bit Texturen werden intern i.d.R. 8 leere Bits aufgefüllt. Ein Texelblock besteht aus folgenden Informationen: 2x16 Bit für 2 Farben (RGB565: Rot 5 Bit, Grün 6 Bit, Blau 5 Bit) und dann aus einem Abschnitt mit je 2 Bit für jedes Pixel: Also 16x2 Bit. Diese 2 Bit repräsentieren eine Farbmatrix aus den 2 16bit-Farben. (Diese werden intern wieder auf 24 Bit hochgerechnet. Die Zwischenfarben sind also nicht 16 Bit).


    Wird kein Alpha-Kanal gespeichert gilt:


    BitmusterBedeutung
    00Farbe1
    012/3 Farbe1 + 1/3 Farbe2
    101/3 Farbe1 + 2/3 Farbe2
    11Farbe2


    Bei DXT1 mit Alpha spielt zusätzlich der Wert von Farbe 1 und 2 eine Rolle: Hat Farbe2 einen höheren Wert gilt folgende Tabelle:


    BitmusterBedeutung
    00Farbe1
    011/2 Farbe1 + 1/2 Farbe2
    10Transparent/Schwarz
    11Farbe2


    2 DXT3


    Hier stehen 128 Bit für jedes 4x4 Pixel große Texel zur Verfügung. Zunächst wird in den ersten 64 Bit der Alpha-Kanal kodiert (4 Bit pro Pixel, d.h. in 16 Abstufungen pro Pixel). Der 2. Block mit 64 Bit entspricht DXT1 ohne Alpha-Kanal.
    DXT3 ist sinnvoll bei Alpha-Kanälen mit scharfen Abgrenzungen. Weiche Übergänge sind eher schlecht darstellbar.



    3 DXT5


    Stellt ebenfalls 128 Bit zur Verfügung. Nur der Alpha-Kanal wird hier interpoliert. Die ersten 64 Bit stehen wieder für den Alpha-Kanal zur Verfügung. Es werden zwei 8 Bit Werte für Farben gespeichert gefolgt von einem Block mit 16x3 Bit für Werte ähnlich zusammengesetzt wie die Tabelle für DXT1:


    Ist Farbe 1 größer im Wert als Farbe 2 gibt es folgende Abstufungen:


    BitmusterBedeutung
    000Farbe1
    0016/7 Farbe1 + 1/7 Farbe2
    0105/7 Farbe1 + 2/7 Farbe2
    0114/7 Farbe1 + 3/7 Farbe2
    1003/7 Farbe1 + 4/7 Farbe2
    1012/7 Farbe1 + 5/7 Farbe2
    1101/7 Farbe1 + 6/7 Farbe2
    111Farbe2


    Ist Farbe 2 größer, gilt folgendes:


    BitmusterBedeutung
    000Farbe1
    0012/5 Farbe1 + 3/5 Farbe2
    0103/5 Farbe1 + 2/5 Farbe2
    0114/5 Farbe1 + 1/5 Farbe2
    1010
    110255
    111Farbe2


    DXT5 ist also für feinere Abstufungen, wie Rundungen etc sehr gut. Ist aber im Vergleich zu DXT3 manchmal unschärfer bzw. kann Blockartefakte liefern. Hier gilt: einfach ausprobieren, was nach der Komprimierung besser aussieht.


    Die Kompressionsqualität ist also in erster Linie vom Kompressionstool abhängig: Von der Bestimmung der 2 Farben sowie deren Anordnung.


    4 Normal Maps


    Normal Maps stellen nochmal eine größere Herausforderung dar: Der Kompressionsalgorithmus von DXT bringt teilweise hohe Kompressionsartefakte mit sich, die dann in sehr diffusem oder zerstörten Normals enden können. Daher gibt es eine Erweiterung, damals von ATI entwickelt:


    5 3Dc


    Eine Normal Map besteht aus den 3 Koordinaten X, Y und Z, um über Vektoren eine vielfältigere Lichtbrechung zu simulieren und so eine Oberfläche detaillierter erscheinen zu lassen. Bei 3Dc werden nur X und Y gespeichert. Z kann rekonstruiert werden, da bei Normal Maps die Länge des Vektors immer 1 beträgt. Bei gleicher Kompressionsrate stehen im Vergleich zu DXT mehr Platz pro Pixel zur Verfügung.
    Leider gibt es zur Verwirrung aller zwei verschiedene Varianten von 3Dc. Der einzige Unterschied liegt in der Reihenfolge der beiden Orientierungen X und Y. Die ursprüngliche normale Variante hat den FourCc ATI2. (Kann man einsehen, wenn man die entsprechende Datei mit einem Hex-Editor öffnet.) Sind die Kanäle vertauscht, so steht hinter dem ATI2 noch A2XY. Da dies aber nicht zum FourCc gehört, kann weder TrainFever noch die meisten Tools diese beiden Versionen unterscheiden. Allerdings sind die Normal Maps im Spiel dann natürlich falsch. Leider unterstützen auch nur wenige Tools diese Format. (Z.B. die Standalone Version des NVIDIA DDS-Kompressors sowie Intels Texture Works Plugin für Photoshop. NVIDIAs Photoshop Plugin unterstützt nur ATI2)


    3Dc ATI2A2XY wird von TransportFever als Standard für die Normal Maps genutzt. Um diese Kompression nutzen zu können muß eines der neuen PHYSICAL_ Materialien verwendet werden.


    6 Was nützt mir das Wissen?


    Sind bestimmte Bereiche extrem verschmiert oder eine Aufschrift nicht mehr sauber genug erkennbar, kann man sich 2 Eigenschaften des DXT-Formats zu Nutze machen. Zum einen ist das die Texelgröße von 4: Verschiebt man z.B. eine Aufschrift/scharfe Kante um einen oder maximal zwei Pixel kann sich das Kompressionsergebnis deutlich verändern. Ein Überfüllen der UV-Bereiche um 8 Pixel und mehr sowie eine Optimierung auf gleiche Farben an Nahtstellen ist zu empfehlen. Auch diese Bereiche beeinflussen die 2 Referenzfarben.


    7 Welches Format wofür benutzen?


    DXT1 hat das beste Kompressionsverhältnis (für 24 Bit-Texturen 6:1, 32 Bit 8:1), kann aber nur ja und nein im Alpha-Kanal liefern. Für Texturen mit Alpha-Kanal also nur dann zu benutzen, wenn eine 100% Transparenz einiger Pixel erwünscht ist. Für Texturen ohne Alpha (Schmutz/Rost/CBlend, METAL/GLOSS/AO etc.) sicherlich die beste Wahl, da am effektivsten komprimiert wird.


    Für Texturen mit Alpha-Kanälen ist abzuwägen, ob DXT3 oder DXT5 besser passt. Beide komprimieren gleich stark: 4:1. Generell sollte man jetzt auch gründlich abwägen, ob es vllt sinnvoll ist, nur eine kleine Fenster/Glas-Textur (z.B. 16x16 Pixel) separat zu erstellen und diese in ein eigenes Material auszulagern, da dann der Rest mit DXT1 komprimiert werden kann. Dies erfordert dann natürlich wieder ein detaillierteres Mesh, was natürlich auch wieder auf die Performance drücken kann. Ihr habt es jetzt in der Hand


    Für Normal-Maps ist 3Dc die beste Wahl. Verwendet man nicht die neuen PHYSICAL_ Materialien, sollte man entweder DXT1 nutzen oder TGA verwenden. DXT5_NM wird von Transport Fever nicht unterstützt.


    8 Kompressions-Tools


    Tool3Dc - Variante
    NVIDIA Texture ToolsPhotoshop Plugin
    Paint Shop Pro Plugin
    ATI2Download
    Intel Texture WorksPhotoshop PluginATI2A2XYDownload
    Gimp DDSGimp PluginATI2Download
    NVIDIA Texture Tools (NVTT)StandaloneATI2A2XYDownload
    AMD CompressStandalone / GUIATI2
    ATI2A2X
    Download



    [info='warning']Achtung: Tools nur mit dem Eintrag ATI2 und ohne ATI2A2XY komprimieren eine nicht passende Kanalbelegung! Dort müssten dann per Hand die R und G Kanäle getauscht werden.[/info]


    9 Weiterführende Quellen


    http://alt.3dcenter.org/artikel/3dc/index5.php
    http://www.nvidia.com/object/r…-map-dxt-compression.html
    https://en.wikipedia.org/wiki/S3_Texture_Compression

Teilen

Kommentare 3

  • Ich habe versucht meinen Mod auf dds umzustellen. Ich habe es versucht mit DXT1 und mit DXT3-Kompression und auch mit unkomprimierten dds. In allen Fällen stürzt das Spiel beim Laden ab.

    Die Texturen haben ein Format 256x256, was eine 2er Potenz ist (soll ja eine Voraussetzung sein beim dds-Format). Daran kann es eigentlich nicht liegen.

    Hat jemand eine Idee?

    Ansonsten kommt halt die demnächst geplante TPF2-Version mit tga-Texturen - Hauptsache es funktioniert erst mal.

    Ich benutze übrigens GIMP zur Erzeugung von dds-Texturen - so etwas abgehoben überteuertes wie Photoshop kann ich mir nicht leisten.

    • Hallo dampf19,


      Ich hatte das gleiche Problem. Ich benutze aber paint.net.

      In der stdout.txt war eine error Meldung über fehlende Mip-maps.


      Mip-maps habe ich an die .dds Datei hinzugefugt.

      Einfach Mip-maps ankreuzen beim speichern und damit funktioniert es bei mir jetzt richtig.

      Gefällt mir 1
    • Hatte heute mal Zeit, Deinen Tipp auszuprobieren. Klappt jetzt hervorragend! Danke.

      Dann gibt es demnächst ein Update für die TPF-Bahnzäune.

      Gefällt mir 1