Farbige Detailtexturen

Detailtexturen in Half-Life lassen sich auf mehrere Arten verwenden. Die folgende Methode beruht auf dem Prinzip, dass die Detailtextur die WAD-Textur visuell vollständig ersetzt. Um das nachzuvollziehen, muss man zuerst die Funktionsweise von Detailtexturen verstehen. Diese addieren unter normalen Umständen eine TGA-Datei X mal auf eine Wad-Textur, um auf diese Weise künstlich Details hinzuzufügen. Dabei ist die TGA-Datei ein Graustufenbild mit hauptsächlich mittleren Grautönen. Alles was über den mittleren Grauton R128 G128 B128 hinausgeht, wird entweder verdunkelt, oder erhellt.

Da Detailtexturen auch ohne weiteres farbig sein können, muss man dieses Prinzip nun eigentlich nur weiterdenken und dann leicht modifizieren (gut, man muss natürlich auch erst einmal darauf kommen, deshalb sei schonmal gesagt: diese Methode stammt nicht von mir und wurde auch schon von anderen herausgefunden!).

Als Basis für farbige Detailtexturen dient weiterhin eine indizierte Bitmap. Diese beinhaltet allerdings lediglich den schon erwähnten 50%igen Grauton (R128 G128 B128). Addiert man nun eine farbige Detailtextur auf diese Basis, resultiert daraus im Spiel das genaue Abbild des Inhalts der TGA-Datei, also einfach alles, was man dort hineinkopiert.

Was heisst das im Klartext?

Es ist möglich ein komplettes Level mit hochauflösenden Texturen auszustatten, welche im Gegensatz zu WAD-Texturen nicht indiziert werden müssen und so all ihre Farben, und somit auch ihre Details, behalten (24bit Truecolor). Weiterhin benötigt die Basistextur nur eine sehr geringe Auflösung und kann (bzw. sollte) im Editor hochskaliert werden. Hierdurch lassen sich w_polys teilweise drastisch einsparen (allerdings wird auch die Lightmap mitskaliert, was zu äusserst weichen Schatten führen kann, welche eventuell nicht immer gewollt sind).

Wo ist der Haken?

Wer mitgedacht hat, wird es sich vielleicht schon gedacht haben. Bei deaktivierten Detailtexturen, werden lediglich die Basistexturen angezeigt, sprich: das Level bestünde nur noch aus grauen Flächen. Voraussetzungen für diese Methode wären demnach zwingenderweise aktivierte Detailtexturen, sowie eine fähige Grafikkarte. Ersteres lässt sich bei Modifikationen beispielsweise codetechnisch erzwingen, letzteres heutzutage voraussetzen.

Wie sieht dann die Arbeit im Hammer aus?

Da nun der Theorie nach alle Texturen des Spiels aus einem Grauton bestehen, wird für die Arbeit im Hammer logischerweise das Benutzen eines zweiten WAD-Archivs nötig. Dort sind Abbilder der jeweiligen Detailtexturen in geringer Auflösung (bzw. in der gleichen Auflösung der grauen Basistextur) enthalten. Der Trick besteht darin, beide Archive und auch alle dort enthaltenen Bitmaps gleich zu benennen. Das „Arbeits“-Archiv nutzt man ausschliesslich im Hammer, es kann in irgendeinem Verzeichnis ausserhalb des Modordners abgelegt werden (bspw. '../Half-Life/valve/mapsrc/'). Das „Ingame“-Archiv liegt wie gewohnt im Hauptverzeichnis der Mod, für die gemappt wird (bspw. '../Half-Life/valve/'). Dadurch, dass Half-Life WAD-Archive ausschließlich im Hauptverzeichnis einer Mod sucht, nutzt es lediglich das Ingame-Archiv und nicht das im Hammer verlinkte Arbeits-Archiv. Damit wäre dieses Problem, wenn auch etwas umständlich, bewältigt.

Für wen die Vorteile dieser Methode überwiegen, der kann sich nun im folgenden Artikel ein paar Details und ein Anwendungsbeispiel ansehen.

Voraussetzungen

Es gelten die gleichen Voraussetzungen wie für ganz normale Detailtexturen.

Wo ist die Grenze?

  • maximal 512*512 Pixel
  • 24 bit (Truecolor)
  • die Auflösung der Textur hängt von ihrer Skalierung ab, es lässt sich beispielsweise das doppelte oder auch das vierfache an Details gegenüber einer WAD-Textur erreichen, und das (meines Wissens nach) ohne merkliche Performance-Einbußen

Anwendungsbeispiel (anhand von Half-Life 1)

1. Die Detailtextur

Kopiert eure Textur mit den Maßen 512*512 Pixel und 24bit Farben als TGA-Datei (Targa) in den Ordner ../Half-Life/valve/gfx/detail und nennt sie „gordonhighres.tga“.

Wie es aussehen sollte:

../Half-Life/valve/gfx/detail/gordonhighres.tga

gordonhighres.jpg

2. Die Basistextur

Erstellt in einem beliebigen Bildbearbeitungsprogramm eine Bildatei mit den Maßen 64*64 Pixel. Füllt die gesamte Fläche mit dem Grauton R128 G128 B128 (50%iges Schwarz), indiziert sie wie gewohnt mit 256 Farben und speichert sie dann als Bitmap mit dem Namen „gordonbase.bmp“ in ein beliebiges Arbeitsverzeichnis, z.B. ../Half-Life/valve/wadsrc/basistexturen.

Wie es aussehen kann:

../Half-Life/valve/wadsrc/basistexturen/gordonbase.bmp

gordonbase.jpg

3. Die Ingame-Wad (wird später von Half-Life genutzt)

Erstellt mit Wally ein neues Wad-Archiv und speichert es als „blackmesa.wad“ im Ordner ../Half-Life/valve. In dieses Archiv importiert ihr eure Basistextur aus dem letzten Schritt.

Wie es aussehen sollte:

../Half-Life/valve/blackmesa.wad/gordonbase.bmp

4. Die Arbeitstextur

Öffnet eure Detailtextur (gordonhighres.tga) in eurem Bildbearbeitungsprogramm, skaliert diese auf 64*64 Pixel herunter, indiziert sie mit 256 Farben und speichert sie dann als Bitmap ebenfalls mit dem Namen „gordonbase.bmp“ in ein beliebiges Arbeitsverzeichnis, z.B. ../Half-Life/valve/wadsrc/arbeitstexturen.

Wie es aussehen kann:

../Half-Life/valve/wadsrc/arbeitstexturen/gordonbase.bmp

gordonbase2.jpg

5. Die Arbeits-Wad (wird später vom Hammer Editor genutzt)

Erstellt mit Wally ein zweites Wad-Archiv und speichert es ebenfalls unter dem Namen „blackmesa.wad“, diesmal allerdings in ein beliebiges Arbeitsverzeichnis ausserhalb von ../Half-Life/valve. Importiert hier eure Arbeitstextur (gordonbase.bmp) aus dem letzten Schritt und speichert ab.

Wie es aussehen kann:

../Half-Life/valve/wadsrc/blackmesa.wad/gordonbase.bmp

6. Die Detail.txt

Erstellt im Verzeichnis ../Half-Life/valve/maps eine Textdatei und benennt sie folgendermaßen: „MAPNAME_detail.txt“. Dort hinein gehört nun folgender Code:

''gordonbase  detail/gordonhighres  1.0  1.0''

7. Der Hammer-Editor

Verlinkt in eurem Hammer-Editor die Arbeits-Wad “../Half-Life/valve/wadsrc/blackmesa.wad“ und weist die dort enthaltene gordonbase.bmp einigen beliebigen Flächen zu.

Skaliert diese Flächen mit den Werten X 4.0 und Y 4.0.

hammer_scale.jpg

hammer_assign.jpg

8. Compilevorgang und Endresultat

Kompiliert eure Map wie gewohnt. Ingame solltet ihr nun entweder eure farbige Detailtextur vorfinden, oder aber graue Flächen. Sollte letzteres der Fall sein, überprüft, ob ihr eventuell Detailtexturen deaktiviert habt und behebt dies, indem ihr sie per Konsole aktiviert (r_detailtextures 1). Falls ihr dies bereits getan habt, könnte es außerdem sein, dass ihr eure TGA-Datei falsch abgespeichert habt. Beachtet das maximale Maß von 512*512 Pixel (bzw. dem Flächen-Äquivalent, z.B. 256*1024) und die 24bit Farbtiefe ohne „RLE-Komprimierung“.

ingame_detailtextures1.jpg ingame_detailtextures0.jpg

Erklärung zu den Skalierungen

Um das Ganze nun einmal zu erläutern, in dem Beispiel wurde eine Detailtextur von 512*512 Pixeln auf einer Fläche von 256*256 Einheiten dargestellt. Dies würde gegenüber einer Standard-Textur bereits eine doppelt so hohe Anzahl an Details ergeben. Stellt man dieselbe Detailtextur auf einer nur 128*128 Pixel großen Fläche dar, währe es bereits das Vierfache, sprich: Source-Qualität.

Wie errechnet man die korrekten Skalierungen für den Hammer?

Benutzt hierfür folgende Formel:

zu erzielendes Ingame-Resultat geteilt durch die Basis multipliziert mit dem X/Y-Faktor aus der Details.txt ergibt die korrekte Skalierung der Basistextur im Hammer

Anhand des oberen Anwendungsbeispiels:

256 / 64 * 1.0 = 4.0

Nachwort

Diese Methode wurde mir von spezi|Fanta erklärt und ihm wiederum von RC, welcher sie ursprünglich für sich herausgefunden hat.

Die Verwendung aller Dokumente einschließlich der Abbildungen ausschließlich zu nichtkommerziellen Zwecken. Verbreitung des Dokuments auf Speichermedien, (insbesondere auf CD-ROMs als Beilage zu Zeitschriften und Magazinen oder sog. "Mission-Packs" etc.) ist untersagt.
 
goldsrc/tutorials/colored_detailtextures.txt · Zuletzt geändert: 2011/05/24 22:45 von Adrian_Broher