Descent3fischlein.de Ship
MenTop
News D3Edit Levels Mods Tools Links Lan-Pic's Gästebuch Kontakt Fischlein
407078 seit 24.09.2000

Teiltransparente Texturen
Geschrieben von DigiJo
Wenn Ihr Euch diese Anleitung ausdrucken wollt, dann HIER Klicken.

Diese Tutorial handelt speziell teiltransparente Texturen in Descent 3 Levels ab. Für Basisinformationen über custom Textures in Descent 3 gibt es hier bei Fischlein schon reichlich Infos, darum will Ich mich hier mal auschließlich der Teiltransparenz widmen.

Zu erst mal zum Grundsätzlichen, was sind Teiltransparente Texturen eigentlich? Teiltransparente Texturen können einige nette Effekte erzielen z.B. Pflanzen (Buschwerk, Baumblätter), Zäune, Fenster etc und viele mehr, das bedeutet das Teile dieser Texturen durchsichtig sind und den Blick auf dahinter liegende Teile des Level ermöglichen. Im Prinzip ist es das selbe wie mit transparenten GIF-Files, die z.B. in eine Website eingebunden den Blick auf ein Hintergrundgrafik ermöglichen. Der Vorteil dieser Methode liegt eindeutig in dem einsparen von Faces / Polygonen, da z.b das erstellen eines Gartenzauns oder Baumes mit Polygonen / Faces einige 100 Polygone erfordern würde, mit teiltransparenten Texturen ist ein ähnlicher Effekt mit vieleicht nur 10 oder 15 Faces möglich, auch wenn es nicht so gut aussieht.

Ein Nachteil dieser Methode sei auch erwähnt, so wie es scheint funktioniert diese Methode aufgrund eines Fehlers in Descent 3 nur auf neueren Grafikkarten, wenn diese im OpenGL-Mode betrieben werden. Benutzer älterer Voodoo-Karten mit Glide oder Nutzer des D3D-Modes sehen statt des transparenten Textur-teils eine schwarze Fläche. Dieser Fehler scheint nur aufzutreten, wenn die transparenten Texturen auf Struckturfaces gelegt werden, auf Objekten oder (z.B als Mond wie der IO-Mond) am Terrainhimmel funktionieren sie überall.

Meiner Meinng nach kann man diese Texturen trozdem gut verwenden da fast alle Descent 3 Spieler neuere Grafikkarten im OGL-Mode verwenden. (D3D) in Descent3 ist echt Müll ;)

Beispiele

Bild 1

Hier haben wir mal ein Beispiel für Teiltransparente Texturen, diese Holomap aus Monolith-Station besteht allerdings wegen der höheren Auflösung aus 8 Einzeltexturen (4 auf der Vorderseite und 4 gespiegelt auf der Rückseite) und hat zusätzlich noch eine Gesamt-Transparenz, dazu später mehr.

Bild 2

Noch ein schönes Beispiel, diesmal ein Baum aus Tower of Isengard. Hier kann man schön die "Löcher" im Blätterwald erkennen, diese Bäume haben pro Stück nur 16 Faces und schonen die Framerate..

Basics


Jetzt mal zum technischen Teil, Descent3 kennt grundsätzlich 2 Texturarten, das .OGF-Format und das .OAF Format. OGF wird für Standard-Texturen verwendent und bedeutet "Outrage Grafic Format", OAF wird für animierte Texturen verwendet und bedeutet "Outrage animated Grafic Format" oder ähnlich. OAF´s sind nichts anderes als hintereinander geschaltete OGF´s. Beide Formate unterstützen Teiltranzparenz.

Die Grafikdaten in diesen Grafikformaten sind wiederum komprimiert mit der sogenannten ARGB-Kompression, Descent3 kennt 2 Versionen, die 1555 ARGB und die 4444 ARGB. Die Buchstabenkürzel ARGB stehen hierbei für:
  • A=Alphakanal
  • R=Rotkanal
  • G=Grünkanal
  • B=Blaukanal
die Zahlen davor stehen für die jeweilige Bit-Tiefe der einzelnen Kanäle:
  • 1555=1 Bit Alpha, 5 Bit Rot, 5 Bit Grün, 5 Bit Blau
  • 4444=4 (3) Bit Alpha, 4 Bit Rot, 4 Bit Grün, 4 Bit Blau
Interresant ist hier der Alphakanal, weil der festlegt, welches Pixel transparent erscheint und welches Pixel nicht transparent ist. Bei der 1555 ARGB Kompression gibt es nur 1 Bit für den Alphakanal, das bedeutet das man jedes Pixel entweder voll transparent schalten kann oder voll sichtbar. Mit der 4444 ARGB-Kompression hab ich noch nicht experimentiert, sie legt aber eine Transparenz für jeden Farbkanal an. Das bedeutet das z.B. von einem dahinter liegenden Face oder Objekt nur der Rot-Anteil oder nur der Blau-Anteil durchscheint.

Gesamttransparenz


Auf die Gesamttransparenz von Texturen in Descent3 will ich nur kurz eingehen, zusätzlich zur Teiltransparenz über den Alphakanal in der Textur selber kennt Descent3 auch noch eine einstellbare Gesamttransparenz für jede Textur über den Gametable-Eintrag "ALPHA" der entsprechenden Textur, egal ob diese Textur nun einen Alphakanal hat oder nicht. Der Alphawert in der Gametable ist einstellbar von 0.0 bis 1.0 wobei 1.0 voll sichtbar bedeutet und bei einen Wert von 0.0 die Textur unsichtbar ist. Bei einem Wert von 0.5 ist sie halb durchlässig wie z.B. bei einer Glasmalerei. Dieser Wert gilt dann grundsätzlich für alle Pixel der Textur.

Bild 3

An dieser Stelle in der Gametable wird der Alphawert für die Gesamttransparenz der Textur eingestellt, das geht bei jeder Textur und gilt grundsätzlich für alle Pixel der Textur.

Erstellen teiltransparenter Texturen


Zum erstellen teiltransparenter Texturen braucht man grundsätzlich 2 Dinge: ein Grafikprogramm das Alphakanäle und das "Tagged Image File Format" (TGA) unterstüzt, und ein Program zum konvertieren der Textur nach OGF (oder OAF).
Descent3 liefert da das OGF-Tool (ogfool.exe) mit, viel besser ist aber das D3 Imagetool Ver.1.03 von Supersheep. Das gibts natürlich auch hier bei Fischlein. Für die Bearbeitung der Grafiken nehme ich meistens das Grafikprogramm Paintshop Pro 7 (PSP7), ist einfach genial das Proggy.

Erstmal braucht man ein entsprechendes Motiv aus dem Internet (gibt ja millionen von Vorlagen überall zu finden) oder zeichnet eine eigene Textur (entsprechende Begabung vorrausgesetzt ;) ). Die Grafik wird auf Texturgröße zurechtgeschnitten und/oder resized, sie sollte dann quadratisch sein (Höhe=Breite).

Brauchbare Formate (in Pixel):
  • 32 x 32
  • 64 x 64
  • 128 x 128
  • 256 x 256
Andere Formate sind meines Wissens auch möglich aber nicht zu empfehlen. Kurz zum TGA Format, diese Format ist optimal für das erstellen von Texturen geeignet da es von allen Konverter-Programmen unterstüzt wird und genau das bietet was man für eine Textur braucht, bis zu 32bit Farbtiefe und einen 8 Bit Alphakanal.

Bild 4

Das hier ist die Vorlage, die ich für das Blätterwerk in den "Tower of Isengard" Bäumen verwendet habe. Diese Textur ist schon zurechtgeschnitten auf 128x128 Pixel und hat einen schwarzen Hintergrund.

Nun soll ja später im Descent3-Level alles was jetzt schwarz ist transparent sein, dafür brauchen wir einen Alphakanal. Zu diesem Zweck habe ich in PSP7 eine Maske erstellt in der jedes schwarze Pixel enthalten ist und diese Maske als Alphakanal gespeichert.

Hierzu habe ich mit PSP7 eine CMYK-Trennung vorgenommen und den Schwarz-Kanal auf 2 Bit Farbtiefe reduziert. Der Schwarz-Kanal wird dann noch invertiert und als Maske gespeichet.
Dieser Alphakanal hat nur 1 Bit Tiefe (Nicht Transparent / Voll Transparent) da wir das File ja später als OGF (1555 ARGB) konvertieren wollen.

Bild 5

In diesem PSP7-Menü wird der als Maske gespeicherte Alphakanal hinzugefügt, rechts sieht man schön die Vorschau des Kanals. Später im TGA und in der fertigen OGF-Textur wird alles schwarze in dem Alphakanal transparent sein.

Bild 6

Hier sieht man nun wie das fertige TGA mit angezeigtem Alphakanal aussieht. Der Alphakanal ist wie bei einem GIF-File in dem TGA-File mit integriert und braucht nicht extra gespeichert zu werden.

Nachdem man die Textur nun als TGA-File abgespeichert hat (ich hab hier als Dateinamen Sol-BuildWindows1.tga gewählt da ich später eine entsprechende Datei in Descent3 ersetzen will) fehlt nur noch das konvertieren.
Zum konvertieren verwende ich das oben schon genannte Program D3Imagetool, das mitgelieferte OGF-Tool tuts aber auch.

Bild 7

In diesem Screenshot von D3Imagetool hat man einen guten Überblick über die Einstellungen. Oben wird das Inputfile ausgewählt (Muss naürlich das TGA sein, Ich hab hier für den Screenshot aus Versehen das fertige OGF gewählt), unten rechts sieht man die Vorschau und die Bildparameter, unten links ist der interessante Bereich mit den Kompressions-Einstellungen. Für diese Texturen wählen wir 1555ARGB, also 1 Bit Alphachannel. Es wäre auch möglich 4444ARGB Kompression zu wählen, da der Alphakanal des TGA aber nur 1 Bit Tiefe hat wäre kein Unterschied zur 1555 zu sehen. Mipmap-Level ist eigentlich egal, da bei nur einer MipMap die restlichen Maps in der Grafikkarte erzeugt werden. 1 oder 5 ist nur ne Frage von Ladezeit und Qualität der Grafikkarte.

Jetzt braucht man nur noch convert zu klicken und fertig ist die Blättertextur mit Teiltransparenz. Zum einbinden der Textur in Descent3-Level muß noch erwähnt werden das es in dem entsprechenden Gametable-Eintrag der Textur ein Flag gibt, das TMAP2-Flag. Diese Flag zeigt Descent3 an das die Textur über einen Alphakanl verfügt und benutzt werden soll, also das aktivieren des TMAP2-Flags nicht vergessen. Soll eine Textur einfach nur ersetzt werden um sich den Gametable-Eintrag zu sparen (siehe Linux und MAC-Kompatiblität) sollte man sich eine Textur zum ersetzen suchen, die dieses Flag gesetzt hat. (In diesem Fall müssen die Eigenschaften der Original-Textur und der custom Textur exakt gleich sein, siehe ARGB, Mipmap und Auflösung). Die Sol-BuildWindows Reihe z.B. hat TMAP2-Flags.

Bild 8

Dies ist das TMAP2-Flag in der Gametable, das Descent3 anzeigt ob ein Alphakanal in der Textur vorhanden ist und ob dieser angezeigt werden soll. Komischerweise hab ich es auch schon gehabt, das selbst ohne diese Flag der Alphakanal angezeigt wird, aber sicher ist sicher. (D3 scheint allgemein Probleme mit transparenten /animierten Texturen zu haben, siehe Bugliste 1.4)

Ich hoffe mal das dieser kleine Artikel nützlich ist für die Levelbauerzunft. Falls jemand Fehler findet (Rechtschreibung /Inhalt) bitte kurze Mail an mich.

in diesem Sinne wünsche ich euch ein T_Joint freies Levelbauen,

[NuB2]DigiJo

Zurück