FLÜSSIGKEITEN
Autor: Fragpoint
Downloads: Beispielmap 6
Sicherlich seid auch Ihr von den wunderschönen Wassereffekten in Half Life 2 begeistert. Im Grund lässt sich so etwas vollkommen einfach erstellen. Deshalb verbinden wir das noch mit ein paar anderen Übungen. Zunächst laden wir unsere Beispielmap aus dem letzten Tutorial und bauen aus vier einzelnen Brushes einen kleinen Brunnen:

Mein Brunnen hat eine Seitenlänge von 288 x 224 Units und eine Höhe von 32 Units. Ihr könnt selbstverständlich eine beliebige andere Größe nehmen und die Brushes anschließend mit einer passenden Textur belegen.
Anschließend zeichnen wir einen weiteren Brush, der genau innerhalb der Wände unseres Brunnens liegt. Das wird nämlich unser späteres Wasser.

Achtet darauf, dass der Brush ein klein wenig niedriger ist, wie der Beckenrand, damit der Inhalt nicht überschwappen kann. Allerdings wirkt unser Wasser momentan noch etwas steinig.
Zunächst ein kurzes Gedankenspiel: Wir würden als nächstes alle sechs Seiten des Brushes mit einer Wassertextur belegen. Die Engine müsste also Spiegelungen und Wellen 6x berechnen. Zwar beeinträchtigt das die Performance unserer kleinen Map nicht, aber bei größeren Projekten solltet Ihr sparsamer umgehen. Deshalb belegen wir den Brush zunächst vollständig mit der Textur "toolsnodraw". Diese Textur ist im Spiel unsichtbar und belastet die CPU bzw. GPU nicht weiter. Deshalb rufen wir nun wieder das Texturen-Tool auf.

Dort angekommen, klicken wir auf Browse, um uns die ganzen Texturen anzeigen zu lassen. Um die gewünschte Textur "toolsnodraw" zu finden, geben wir hier unter "Filter" ein treffendes Stichwort, nämlich "nodraw" ein und übernehmen die Grafik für unseren Brush.

Wir bleiben gleich im Texturbrowser. Sicher erinnert Ihr Euch noch daran, dass man, wenn man nur eine Seite mit einer Grafik belegen will, diese bei geöffnetem Texturen-Tool anklicken muss. Wir markieren daher nur die Oberseite des Wasser-Brushes, die restlichen Seitenflächen sollen ja mit "toolsnodraw" belegt bleiben. Um nun schnell und einfach zu den Wassertexturen zu kommen, geben wir hier wieder unter "Filter" ein treffendes Stichwort, nämlich "water" oder "liquids" ein.

Aus den nun angezeigten Texturen wählen wir die nachfolgende (liquids/water_pretty1) aus:

Wenn Ihr die Textur nun bestätigt, werdet Ihr im 3D-Fenster feststellen, dass dort nur ein schwarzer Block mit einem leichten Schimmer an Stelle des Wassers vorhanden ist. Das ist leider der Nachteil des Hammers gegenüber dem Doom3Editor. Man kann nämlich nicht in Echtzeit sehen, wie Objekte/Texturen später im Spiel aussehen werden.

Wir müssen deshalb leider wieder umständlich die Map berechnen lassen und uns das Ganze im Spiel anschauen. Dort sollte das jetzt bei Euch wie folgt aussehen:

Ihr könnt dort sehr schön erkennen, wie sich die Umgebung scheinbar spiegelt und aufgrund des Beschusses eine Wasserfontäne aufsteigt. Um ein anderes Aussehen zu erhalten, müsst Ihr die verschiedenen Wasser-Texturen einfach mal durchprobieren. Natürlich könnt ihr unseren Brunnen auch noch etwas verschönern.

Wie Ihr seht, habe ich dazu noch ein paar Treppenstufen eingebaut, die den Zugang zum Wasser erleichtern. Falls Ihr das auch machen möchtet, aber nicht bei jeder Seite die Stufen erneut konstruieren wollt, kopiert ihr die bereits vorhandenen, fügt diese ein und macht - wie bei den Entities - in der Draufsicht einen Rechtsklick auf die Brushes. Anschließend wählt Ihr den Menü-Punkt "Transform" (Strg-M) aus. Beim nun erscheinenden Fenster könnt Ihr eingeben, um wieviel Grad die Brushes gedreht werden sollen. In unserem Fall findet eine Drehung auf der X-Achse in 90-Grad-Schritten statt.

Wie Euch sicher schon aufgefallen ist, habe ich die Stufen an den Ecken abgeschrägt, so dass diese direkt aneinander stoßen können. Zur Verdeutlichung zeige ich Euch hier noch einen Screenshot aus dem Hammer:

Einzelne Brushes könnt Ihr abschrägen, indem Ihr das Vertex-Tool (Shift-H) verwendet.

Anschließend werden dort die Eckpunkte eingeblendet, die wir nun beliebig in der Drauf- oder Seitenansicht verschieben können, bis eine passende Abschrägung vorhanden ist. Das Verschieben der Punkte funktioniert genauso wie beim vergrößern/verkleinern der Brushes. Wer gerne eine ausführlichere Beschreibung dieses Tools hätte, kann einen Blick auf das Tutorial von ReFlex werfen.
Wenn Euch das Wasser so genügt, braucht Ihr nicht weiterzulesen. Ansonsten kommen noch ein paar Arbeitsschritte hinzu. Es fehlen nämlich ein paar relativ wichtige Funktionen. Zunächst brauchen wir noch ein Entity, das für die korrekte Spiegelung der Wasseroberfläche zuständig ist, so dass diese auch ganz sicher richtig dargestellt wird. Aktiviert dazu das Entity-Tool (Shift-E) und wählt unten rechts das Entity "env_cubemap" aus:

Dieses setzen wir durch einen Linksklick mit der Maus in unser 3D-Fenster. Das Objekt sollte mittig zu unserer Wasserfläche und ein paar Units oberhalb des Wasser-Brushes sitzen. Dadurch wird es dem Entity ermöglicht, alle Objekte in der näheren Umgebung zu erfassen und in einem realistischen Winkel auf die Wasseroberfläche zu werfen/spiegeln. Dies funktioniert jedoch nur mit DirectX-9-fähigen Grafikkarten.

Damit dieses Objekt auch weiß, dass es mit dem Wasser zusammenarbeiten muss, machen wir in einer der Ansichten einen Rechtsklick auf das Entity und rufen dort die Properties auf.

Dort angekommen wählen wir den Punkt "Brush faces" aus und klicken den Button mit dem Namen "Pick" an. Nun können wir dem Entity (env_cubemap) im 3D-Fenster sagen, auf welcher Oberfläche es sich spiegeln soll. In unserem Fall ist es die Wasseroberfläche, so dass wir im 3D-Fenster einen Klick auf diese machen. Anschließend bestätigen wir alles mit "Apply" und schließen das Fenster. Wie Ihr sehen könnt, ist das Entity nun über einen Strich mit dem Wasser verbunden.

Nun fehlt lediglich noch ein weiteres Entity mit Namen "water_lod_control". Dieses setzen wir genauso wie das "env_cubemap" direkt über die Wasseroberfläche.

Wenn wir nun unsere Map berechnen lassen, werden wir feststellen, dass der Boden- und der Deckenbrush lila schimmern. Das ist kein Fehler von uns, sondern lediglich eine fehlerhafte Textur. Daher wählen wir im Hammer die beiden Brushes an und ersetzen die bestehende Grafik über das Texturen-Tool (Shift-A) durch die Textur "cs_havana/stonefloor007a".

Laut der offiziellen Beschreibung von Valve muss nun noch die Map gestartet werden und in der Konsole folgender Befehl eingegeben werden:
buildcubemaps
Hierüber sollte die Engine die Cubemap - also die Abbildung auf der Wasseroberfläche - berechnen können. Leider führt die Eingabe des Befehls zu einem Absturz von "CS: Source", so dass wir hier nicht näher auf diese Funktion eingehen. Zu einem späteren Zeitpunkt werde ich diesen Punkt nochmals behandeln, wenn der "Bug" behoben wurde.
Wichtige Anmerkung:
"Falls bei Euch das Wasser nach dem Kompilieren im Spiel nicht angezeigt wird, aber beim Draufschiessen hochspritzt, habt Ihr ein sogenanntes LEAK in Eurer Map! Das gilt auch für alle anderen Arten von abnormalem Verhalten beim Wasser. Das heisst, Eure Map hat ein Loch in der Außenhülle ins Nichts. Ihr erkennt dies daran, dass im Logfile beim Kompilieren ***leaked*** geschrieben steht. Wie man so ein Leak behebt, entnehmt Ihr bitte dem Tutorial von Reflex zum Thema Leaks. Ihr findet es hier.