36 | Wasser, Lava, Schleim und Nebel

Wasser

Bevor wir Wasser einfügen werden, baut ihr euch eine Konstruktion, die wie ein Sandkasten mit einem Steg in der Mitte aussieht:

In den Zwischenraum oben links und oben rechts setzt ihr jeweils einen Brush, der etwas niedriger als der Rahmen ist. Belegt ihn komplett mit der Textur common/watercaulk. Sollte diese Textur nicht vorhanden sein, bitte den Abschnitt „Häufige Fragen“ am Ende dieses Tutorials lesen.

In den langen Freiraum unten setzt ihr einen dritten solchen Brush, sodass der Hohlraum unseres Sandkastens genau ausgefüllt wird. Dann markiert ihr mit [SHIFT]+[STRG]+[LMT] nur die Oberseiten dieser drei Brushes und belegt sie mit der Textur liquids/ripple2. Wenn ihr eure Map kompiliert, werdet ihr durchs Wasser laufen können.

Der Kasten drumherum ist für die Wasserbrushes unwichtig. Man kann Wasser auch freischwebend in der Luft platzieren, denn physikalische Gesetze greifen hier nicht.

Warum die watercaulk Textur?

Sobald ein Brush mit dieser Textur belegt ist, gilt er als Wasservolumen. Außerdem ist die Textur im Spiel nicht sichtbar. Wenn wir alle Brushseiten mit der Wassertextur belegt hätten, wären die Seitenflächen der drei Wasserbrushes in der Mitte beim Steg sichtbar:

Lava & Schleim

Lava und Schleim werden genau wie Wasser erstellt. Lava- und Schleimtexturen findet ihr ebenfalls im liquids Ordner. Statt watercaulk benutzt ihr für die unbenutzten Oberflächen der Brushes jedoch slimecaulk oder lavacaulk.

Nebel

Lasst uns wieder unseren Sandkasten nehmen und diesmal alle drei Brushes komplett mit common/nodraw texturieren. Für die Oberflächen verwendet ihr diesmal sfx/xbluefog. Schauen wir uns das Ergebnis dann im Spiel an.

Der Nebel schließt sich nicht zusammen, jeder Brush hat seinen eigenen Nebelbereich. Das liegt daran, dass Nebel, anders als Wasser, Lava oder Schleim, auch optisch ein Volumen und nicht nur eine Textur ist. Diese Volumendarstellung weiß nicht, dass sie mit den umliegenden anderen Volumen zusammenarbeiten muss, also steht jedes Volumen für sich.

Das kann man leider nicht ändern. Die einzige Abhilfe besteht darin, anstatt kleiner Brushes einen Großen zu verwenden, der durch den Steg hindurchgeht:

Häufige Fragen

Frage: Ich habe die Textur watercaulk/slimecaulk/lavacaulk nicht.
Antwort: Dann hast du die Quake 3 Extras aus Tutorial 2 nicht heruntergeladen, die den Radiant um mehrere Zusatzfunktionen erweitern.

Frage: Warum muss ich für Wasser/Lava/Schleim die water-/lava-/slimecaulk Textur benutzen. Kann ich nicht wie beim Nebel nodraw verwenden? Nodraw ist doch auch unsichtbar.
Antwort: Nodraw hat im Gegensatz zu den anderen Texturen keine weiteren Eigenschaften außer Transparenz und Durchlässigkeit. Deshalb kann ein nodraw Brush mit Wassertextur unter Umständen völlig kollisionsfrei sein. Der Spieler würde in diesem Fall nicht wie erwartet schwimmen, sondern durch den Brush hindurchfallen. Um das auf jeden Fall ausschließen zu können, bieten sich diese speziellen Wasser-, Lava- und Schleimtexturen an Sie besitzen die Eigenschaften des angegebenen Elements, sind aber unsichtbar.

Frage: Ich habe einen Brush mit einer Wasser-/Lava-/Schleim-/Nebeltextur belegt, aber im Spiel sehe ich nur die Textur, wie sie im Editor aussieht, und kann auf dem Brush herumlaufen. Was mache ich falsch?
Antwort: Du hast eine Textur ohne Shader erwischt. Was du dann im Spiel bekommst, ist genau das, was du auch im Editor gesehen hast: ein Brush mit einer Textur. Ob die Textur einen Shader besitzt, siehst du im Texture Browser am dünnen weißen Rand um die Textur herum. Wenn dort kein Rand ist, hat die Textur auch keinen besonderen Effekt.

Frage: Ich finde immer nur langsam dümpelndes Wasser, ich will aber einen Fluss machen! Geht das irgendwie?
Antwort: Ja, das geht. Dafür brauchst du aber einen anderen Shader, der der Textur andere Anweisungen gibt.

Frage: Meine Lava/Schleim Textur macht auch gleichzeitig Licht. Ich habe einen großen See angelegt und manche Stellen auf der Textur leuchten hell, andere sind ganz dunkel. Was passiert da?
Antwort: Das Licht wird in regelmäßigen Abständen abgestrahlt, da rein technisch nicht jeder einzelne Pixel der Textur selbst leuchten kann. Stell dir das so vor, als wenn du in den immer gleichen Gridabständen Light Entities auf dieser Textur platzieren würdest. Die Größe dieser Abstände wird im Shader der Textur in Units angegeben.

Dafür verantwortlich ist der Befehl q3map_lightsubdivide. Ist er zu groß, entstehen dunkle Passagen zwischen den hellen Bereichen.

Frage: Ich habe einen großen Lava-/Schleimsee angelegt und auf einmal dauert das Kompilieren viel länger als vorher. Wieso?
Antwort: Wie bereits in der vorigen Frage erwähnt, senden die mitgelieferten Lava- und Schleimtexturen Licht aus. Je größer deine Lava-/Schleimseen sind und je mehr solcher Seen du hast, desto umfangreicher wird auch die Lichtberechnung. Das schlägt sich in einer längeren Compilezeit nieder und ist normal.

Frage: Wieso soll ich Wasser/Lava/Schleim um Ecken herumbauen und Nebel quer durch alle möglichen Sachen hindurch? Kann ich das nicht mit Wasser/Lava/Schleim auch machen?
Antwort: Wasser/Lava/Schleim haben oftmals eine Oberfläche, die sich wellenartig bewegt. Wenn du z.B. mal q3dm11 lädtst und dir mit r_showtris 1 den Schleimpool beim Rocketlauncher ansiehst, kannst du diese Wellen deutlicher sehen. Die Wellen folgen recht genau der Architektur drum herum, denn im Boden unter der Rocketlauncherinsel sind keine Wellen. Der Sinn hinter dem genauen Ausfüllen eines Pools anstatt dem Füllen der Fläche mit einem großen Brush liegt darin, Polygone zu sparen, weil weniger Wellen zu sehen sind und außerdem die Architektur sauber zu halten.

Je nach Größe der Architektur, die in die jeweilige Flüssigkeit hineinragt, würde ich diese übrigens auch nicht unterteilen, da sich der Aufwand für kleine Sachen nicht lohnt. Im Tutorialbeispiel oben hätte auch ein großer Brush gereicht. Auf diese Weise hätte man 4 Polygone (für die beiden Extrabrushes) gespart, aber mehr Lightmap berechnen müssen, da auch der Teil des Brushes im Steg berechnet wird. Man muss deshalb abwägen, was sinnvoller ist.

Mit Nebel musst du das deshalb nicht machen, weil Nebel keine riffelige Oberfläche und somit sowieso maximal zwei Polys hat (und weil es techisch unmöglich ist, wie man weiter oben lesen kann)

Frage: Ich will mein ganzes Level in Nebel hüllen, indem ich einen riesigen Nebelbrush um alles herummache. Wenn ich das tue, flackert allerdings die Skybox ab und zu, je nach Sichtwinkel
Antwort: Für dieses Problem ist mir bisher nur eine Lösung bekannt: eine Skybox und levelweiter Nebel funktionieren zusammen nicht. Abhilfe schafft meines Wissens nach lediglich eine einfarbige Skybox ohne Cloudlayer (= vorbeiziehende Wolken) und Nebel, der die gleiche Farbe wie die Skybox hat. Dieser Nebel wird dann über eine Einstellung im Worldspawn eingestellt, und nicht über einen Nebelbrush.

Frage: Ich habe mich schon etwas mit Shadern beschäftigt und eine Wassertextur mit einer spiegelnden Environment Map gemacht. Allerdings schaffe ich es nicht, dass die Wassertextur dann auch Wellen hat, denn das gibt Bildfehler. Was kann ich tun?
Antwort: Leider nichts. Eine Environment Map und der Shaderbefehl deformVertexes lassen sich nicht kombinieren.

Dieser Beitrag wurde unter Tutorials abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s