Wasser in Half-life2

Das Wasser in Half-life² wird über einen komplexen Shader dargestellt. Es ist animiert und reflektiert die Umwelt. Bei diesem komplexen System gibt es natürlich einige Richtlinien und Einschränkungen, wie man das Wasser in verschiedenen Situationen einsetzen kann.

Aufwendiges Wasser

Das aufwendige Wasser sieht am Besten aus, verbraucht dafür aber auch einiges an Ressourcen. Dieser Shader reflektiert die Welt, ist animiert und nebelt benachbarte Objekte ein wenig ein, ausserdem ist er bump-mapped. Die Ergebnisse reichen fast an Foto-Qualtität heran, allerdings ist diese Art des Wassers bei komplexeren Situationen sehr perfomancedrückend.

Einfaches Wasser

Bei Situationen, bei denen das aufwendige Wasser nicht angebracht ist (meistens wegen der Performance), kann einfaches Wasser benutzt werden. Diese Version des Shaders reflektiert nicht die Umwelt, was es natürlich nicht so realistisch erscheinen lässt, allerdings ist es dafür nicht so intensiv für die Engine. Das aufwendige Wasser wird automatisch auf Einfaches Wasser zurückgesetzt, wenn die Grafikkarte die notwendigen Ressourcen nicht bereitstellen kann. Es kann auch zurückgesetzt werden, indem der Benutzer in den Video Optionen die „Water Reflection“ herunterstellt.

Vorraussetzungen

Um das Wasser richtig anzuwenden, benötigt es einige Regeln:

  • Das aufwendige Wasser darf nicht mehrere, verschieden Ebene pro PVS (Potential Visibility Set) haben.
  • Aufwendiges und einfaches Wasser dürfen nicht gleichzeitig in einem PVS benutzt werden.
  • Die Wasseroberfläche sollte immer horizontal verlaufen.
  • Die Wassertextur darf nur auf die Oberseite eines Brushes gelegt werden. Alle anderen Seiten bekommen die tools/toolsnodraw Textur.
  • Wassertexturen, die auf _beneath oder _bottom enden, können nicht verwendet werden, da sie Teil einer andern Wassertextur sind.
  • Ein water_lod_control Entity muss vorhanden sein, es kontrolliert die Entfernung, ab welcher aufwendiges Wasser in einfaches Wasser übergeht.
  • Ein env_cubemap Entity muss vorhanden sein, damit die Wasseroberfläche auf Grafikarten, die nicht DirectX 9 unterstützen, richtig dargestellt wird.


Anmerkung: Aufwändiges Wasser sollte nicht zu einem Entity gebunden werden, weil es dann Darstellungsfehler geben kann!

Erstellen des Wassers

Um Wasser zu erstellen müsst ihr folgendes machen:

  • Den Wasserbrush erstellen:
    1. Öffne den Texture-Browser und wähle die tools\toolsnodraw Textur aus.
    2. Erstelle einen Brush, welcher der späteren Größe des Wasserbrushes entspricht.
    3. Öffnet das Texture Application Tool.
    4. Ein Linksklick auf die obere Fläche des Wasserbrushes wählt diese Fläche aus.
    5. Öffne wieder den Texture-Browser über den Browse Button.
    6. Tippe water in das Eingabefeld unten im Fenster, welches mit Filter: bezeichnet ist. Das zeigt dir alle verfügbaren Wassertexturen an.
    7. Wähle eine Wassertextur per Doppelklick aus. Eine Möglichkeit wäre zum Beispiel nature/water_canals_water2. Achte darauf, dass Wassertexturen, die auf _beneath oder _bottom enden, nicht verwendet werden können, da sie Teil einer andern Wassertextur sind.
    8. Zuletzt klicke auf Apply, um die Wassertextur auf die obere Fläche zu legen.
  • Das water_lod_control Entity setzen:
    1. Wähle das Entity Tool aus.
    2. Stelle unter Categorie: Entities und unter Object: water_lod_control ein.
    3. Zuletzt Klicke in der 3D-Ansicht auf die obere Fläche des Wasserbrushes, um dort eine water_lod_control Entity zu erzeugen.
  • Das env_cubemap Entity setzen:
    1. Wähle das Entity Tool aus.
    2. Stelle unter Categorie: Entities und unter Object: env_cubemap ein.
    3. Klicke in der 3D-Ansicht auf die obere Fläche des Wasserbrushes, um dort eine env_cubemap Entity zu erzeugen.
    4. Stell sicher, dass das neue env_cubemap Entity angewählt ist und drücke Alt+Enter, um den Properties-Dialog aufzurufen.
    5. Wähle im Properties-Dialog in der Liste den Eintrag Brush faces aus und klicke auf Pick.
    6. Klicke auf die obere Fläche des Wasserbrushes, auf der die Wassertextur liegt, um diese auszuwählen.
    7. Klicke unten im Properties-Dialog auf Apply und schliesse den Properties-Dialog.
    8. Zuletzt positionierts du das env_cubemap Entity mittig über dem Wasserbrush und in einem vertikalen Abstand von ca. 72 Units über der Wasseroberfläche.


Wichtig: VIS und RAD müssen auf jeden Fall durchlaufen, damit das Wasser korrekt dargestellt werden kann (mögliche Fehler: Leak)

Weblinks

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.
 
half-life_2/tutorials/wasser.txt · Zuletzt geändert: 2010/04/30 22:29 von Night Wolf