Nicht eingeloggt
Registrieren

Wasser

Flüssigkeiten Editorial (Teil 1)

Dieses Tutorial erfordert Kenntnisse in Photoshop oder einem vergleichbaren Grafikprogram. Wir empfehlen hier ausdrücklich Photoshop und werden uns in diesem Tutorial auch auf ein PlugIn beziehen, welches es erlaubt direkt in Photoshop das NVidia DDS-Format zu erstellen und zu speichern.




Einleitung und Inhalt:

Wir bezeichnen Wasser, Lava oder Säuren im Spiel als Flüssigkeiten, die zwar verschiedenartig wirken, jedoch in der Erstellung fast identisch sind. In diesem Editorial werden wir uns mit dem Erstellen von Flüssigkeiten und passenden Oberflächengestaltung befassen. Die Technik, welche wir hier zeigen, eignet sich nur für kleinflächige Anwendungen, nicht aber für große Seen oder Flüsse.

Du solltest bereits mit den gängigen Terrain Editing Funktionen vertraut sein und ein eigenes Gelände erstellen können.
  1. allgemeine Vorbereitungen
    1. Standard Texturen vorbereiten
    2. Beleuchtungstextur erstellen
    3. TestMap erstellen
    4. CubeMap erstellen
  2. Wasser Effekte erstellen
    1. Transparente Wasser Texturen vorbereiten
    2. Wasser Animations Effekt erstellen
    3. Transparente Wasser Texturen animieren
  3. Wasseroberfläche (FluidSurfaceInfo)
    1. Erzeugen der FluidSurfaceInfo
    2. Die FluidSurfaceInfo Konfiguration
    3. Den FluidSurfaceOscillator einrichten
    4. Ein Vertex Clamping erzeugen
    5. Interaktion mit der Wasseroberfläche
1. allgemeine Vorbereitungen

Dieses Tutorial erfordert Kenntnisse in Photoshop oder einem vergleichbaren Grafikprogram.

1.1 Standard Texturen vorbereiten

Als Erstes müssen wir uns ein paar Texturen zusammenstellen, mit denen wir unser Wasser darstellen können. Da Wasser auch immer eine Umgebung fordert, in der es auftritt gehören zu einem brauchbaren Texturset auch immer einige gewöhnliche Grundtexturen. Wir haben uns diese kleine Auswahl zusammengestellt, die für unsere TestMap völlig ausreichen sollte:


Gras | Felsen | tr. Sand | na. Sand | Wasser | Terrain


Eine Gras und eine Felstextur für das allgemeine Gelände. Zwei Sandtexturen, einmal in trockenem und in nassem Zustand, um unseren Tümpel zu texturieren. Natürlich brauchen wir eine generelle Wassertextur, die zur Wasseroberfläche weiterverarbeitet wird und eine passende HeightMap für die Geländeform des Tümpels. Wir haben diese Texturen zusammen mit den hier nicht gezeigten Terrain Alpha Maps in einem Texturpackage gespeichert, ausser der Wassertextur, diese bearbeiten wir nochmals im Photoshop (Vorgehensweise siehe Kapitel 1.2).

Die Texturen an sich sollten vor dem Importieren als BMP-, PCX- oder TGA-Format vorliegen. Wie eine Standard Textur, oder eine Geländetextur aussehen muss, lassen wir jetzt mal unbeachtet, dafür gibt es genug andere Editorials! Uns interessiert hier die Wassertextur besonders, da diese direkt im Texture Browser transparent werden muss.





1.2 Beleuchtungstextur erstellen

Zusätzlich werden wir für die Beleuchtung der späteren Wasseroberfläche eine Beleuchtungstextur benötigen. Unser hier verwendetes Exemplar haben wir der Einfachheit einfach mal hier abgebildet:


Beleuchtung




Eine Beleuchtungstextur ist recht schnell erstellt, es muss eigentlich nur eine art Lichtspot auf einer schwarzen Fläche erstellt werden. Helle stellen sind stark beleuchtet, dunkle Stellen hingegen sind nicht beleuchtet. Für unseren Tümpel reicht eine einfache Sonnensimulation völlig aus. Wir importieren auch dese textur in unser Textur Package und nennen sie Illuminate (Der Name wird im weiteren Verlauf des Editorials nochmals auftauchen).





1.3 TestMap erstellen

Als Nächstes müssen wir uns entweder eine kleine Testmap erstellen, oder es liegt bereits ein konkretes Projekt vor, in welches unsere beliebige Flüssigkeit eingebaut werden soll. Dazu sollte in der TestMap ein kleines Loch vorhanden sein, in welches wir unsere Flüssigkeit einfüllen werden. Wir bauen uns einen Tümpel mit Wasser, für Lava oder Schleim sind die ersten Schritte absolut identisch. Vielleicht sieht jedoch die Landschaft anders aus.

Wir haben uns eine kleine Landschaft gebaut, die einen Tümpel mit einer Insel darstellt. wir haben mit den Terrain Painting Technik die Farben aufgetragen und den Boden des Sees etwas in blau eingefärbt. Das wirkt später wie tiefes Wasser. Damit es hübscher aussieht haben wir zusätzlich ein paar Static Meshes in unsere TestMap gepflanzt, die aber nicht wichtig sind. Unsere TestMap sollte am Ende so aussehen, wie es die nachfolgende Abbildung zeigt:



1.4 CubeMap erstellen

Unsere Wasseroberfläche soll im Spiel die Umgebung wiederspiegeln, dazu benötigen wir eine sogenannte CubeMap. Wir müssen noch einiges tun, damit ein Spiegeleffekt erzeugt wird, der eine vorgegebene 3D-Ansicht eines bestimmten Standpunktes in der Map wiedergeben kann.

Die CubeMap ist ein interessanter Bestandteil eines Wasserlochs. Wir benötigen für unser Beispiel zumindest eine CubeMap, die als TexEnvMap eingesetzt werden muss. Also werden wir uns eine solche jetzt anfertigen. Da eine CubeMap ein 6-seitiger Würfel ist, müssen wir 6 einzelne Screenshots einsetzen, die bündig zusammen passen und jeweils den Horizont in alle verfügbaren Himmelsrichtungen zeigen. Die 6 verschiedenen Bilder müssen demnach immer Ansichten in die Richtungen nach Norden, Osten, Süden, und Westen, sowie eine Ansicht nach Unten und eine nach Oben aufweisen!

Die Texturen müssen Quadrate sein, deren jeweilig zugeordnete Anschlußseiten bündig aneinander passen müssen. Das hört sich erstmal schwierig an, ist aber ganz einfach mit dem nachfolgenden Trick zu bewerkstelligen: "Alt" & "Enter" gleichzeitig drücken, um in den Fenster Modus zu wechseln, dann die Konsole öffnen und folgenden Befehl eingeben: SETRES 256x256 dies gibt dem Fenster die angegebene Größe, genau, die Größe, die wir für die einzelnen Bilder einsetzen wollen. Sinnvoll sind dabei folgende Auflösungen: 256x256 (normale Qualität, reicht für Indoor Maps) oder 512x512 (gehobene Qualität, für große Aussenarenen). Danach den Befehl FLY, damit wir in den Flug Modus gelangen und eine für uns günstige Position in der Map einnehmen können. Eine Stelle an der wir einen guten Rundumblick haben, der etwas oberhalb des Tümpels gelegen sein sollte. Von dort werden wir dann die 6 Screenshots machen!

... und das geht so: Der Nummernblock der Tastatur ist standardmäßig bei UT2003 wie folgt belegt:

0 nach Norden
1 nach Osten
2 nach Süden
3 nach Westen
4 nach Oben
5 nach Unten
6 Standard

Wenn man jetzt die Position 0 anwählt, dann dreht sich die Ansicht in die richtige Position, Die Taste F9 macht bekanntlich einen Screenshot und speichert diesen anschließend automatisch im System Verzeichnis des Spiels. Wenn wir jetzt über den Nummer Block die Position 0 anspringt, danach F9, 1, F9, 2, F9, 3, F9, 4, F9, 5, F9 drückt, sind die 6 Ansichten der CubeMap im Handumdrehen erstellt. Um wieder in die normale Ansicht zu gelangen klicken wir zum Schluß der Aktion auf die Nummer Block Taste "6" und wir sind fertig!
Solltest du den Nummernblock mit einer eigenen Konfiguration belegt haben, dann funktioniert dieser Trick natürlich nicht, weil die Nummerntasten nicht mehr auf dem Standard stehen. In diesem Fall musst du einfach die User.ini im System-Verzeichnis deines Unreal Spiels löschen. Beim starten des Spiels wird sich diese dann mit den Standard Einstellungen regenereieren und die oben beschriebenen Nummerntasten sind wieder korrekt belegt.

Tastenbelegung wie folgt in der User.ini umstellen:
Code:
NumPad0=set playercontroller bZeroRoll False | set playercontroller rotation (pitch=0,yaw=0,roll=16384)
NumPad1=set playercontroller bZeroRoll False | set playercontroller rotation (pitch=0,yaw=32768,roll=-16384)
NumPad2=set playercontroller bZeroRoll False | set playercontroller rotation (pitch=0,yaw=16384,roll=32768)
NumPad3=set playercontroller bZeroRoll False | set playercontroller rotation (pitch=0,yaw=-16384,roll=0)
NumPad4=set playercontroller bZeroRoll False | set playercontroller rotation (pitch=16384,yaw=0,roll=16384)
NumPad5=set playercontroller bZeroRoll False | set playercontroller rotation (pitch=-16384,yaw=32768,roll=16384)
NumPad6=set playercontroller bZeroRoll False | set playercontroller rotation (pitch=0,yaw=0,roll=0)


simple Cubemap | schönere Cubemap


In einem Standard Grafikprogramm deiner Wahl, sollten die Texturen anschließend in die nebenstehend sichtbare Reihenfolge gebracht werdennamentlich immer gleiche Reihenfolge gebracht werden. Ganz besonders sollte man die Rotation der einzelnen Bilder beachten, da diese sehr wichtig ist, um später die CubeMap richtig darzustellen. Die verteilten Nummern entsprechen den Nummern der Felder, in welche wir die einzelnen Bilder der CubeMap noch eintragen müssen.

Zur Einfachheit solltest du das oberen beiden Bilder als Kontrolle mit deinen eigenen Bildern vergleichen und eine entsprechnde Sorgfalt bei der Erstellung an den Tag legen! Jeder Fehler bedeutet nachher unnötiges Kopfzerbrechen und vor allem bedeutet es, daß die CubeMap nicht richtig funktionieren wird.

Diese Texturen müssen jetzt importiert werden in den Unreal Editor. Wenn alle sechs Texturen im Texture Browser zu sehen sind, muss ein neues Material angelegt werden. Klicken wir also auf File/New um ein neues Material zu erstellen. Es erscheint das nachfolgend sichtbare New Material Fenster:


In diesem Fenster muss unter Properties Class auf Raw Material und die Material Klasse Cubemap gewählt werden. Ebenso muss noch der Name gesetzt werden. Nachdem das New/Neu Knöpfchen geklickt wurde erscheint das nachfolgende Fenster:


Im unteren Properties Bereich des neuen Fensters befindet sich die Rubrik Cubemap. Nach dem aufklappen werden die 6 Gesichter gemäß den oben verteilten Nummern in die Felder eingetragen. So wie es die nachfolgende Tabelle zeigt:

Cubemap
Face[0] Cubemap 0 nach Norden
Face[1] Cubemap 1 nach Osten
Face[2] Cubemap 2 nach Süden
Face[3] Cubemap 3 nach Westen
Face[4] Cubemap 4 nach Oben
Face[5] Cubemap 5 nach Unten

 

2. Wasser Effekte erstellen

2.1 Transparente Wasser Textur vorbereiten

Als nächstes kümmern wir uns um die eigentliche Wassertextur.

Laden wir also unsere klassisch erstellte Wassertextur in Photoshop ein. Wir haben unser Beispiel mit Adobe Photoshop erstell, weil in dieser Grafikanwendung ein praktisches Plugin zur Verfügung steht, mit welchem man direkt im komprimierten und für die Unreal Engine optimierten DDS-Format (NVidia DXT5) speichern kann.

Um eine DXT5 komprimierte Textur direkt im Texture Browser als transparente Textur erscheinen zu lasssen, bedarf es eines speziell angelegten Alphakanals, wie er ganz unten auf der seitlich sichtbaren Abbildung erkennbar ist. Je weisser der Alphakanal ist, desto weniger transparent wird später unsere Textur. Ein ganz schwarzer Alphakanal bedeutet, daß unsere Textur gar nicht transparent wird, sondern deckend. Da Wasser meistens c.a. 50% durchsichtig/transparent ist, gestalten wir die Alphamaske in unserem Beispiel in einem 50% Grauwert.

Das ist nicht ganz einfach und sollte wie folgt von Statten gehen. Als erstes wird der Alphakanal in dem Bild angelegt wo man ihn braucht, egal, wie er aussieht. Dann wir ein seperates Graustufen Bild angelegt, dessen einzige Ebene selektiert und in den Zwischenspeicher geladen wird. Dann öffnet man den gerade erstellten AlphaLayer und Kanäle, macht ihn in aktiv (einmal draufklicken) und mit STRG+V wird das Graustufenbild aus dem Zwischenspeicher auf den Alphakanal kopiert. Es sieht dann in etwa so aus, wie bei uns auf der nebenstehenden Abbildung. Ein so angefertigtes Bild besitzt neben den normalen Farbkanälen für Rot, Grün und Blau auch noch einen Kanal, der bestimmt, wie stark durchsichtig unsere Textur werden soll.

Jetzt müssen wir die Textur eigentlich nur noch abspeichern. Wir sollten das Ganze auf jeden Fall einmal als BMP-Format speichern, da wir dieses mit Photoshop notfalls wieder bearbeiten können. Für den Import Vorgang in den Unreal Editor nutzen wir aber ein völlig anderes Format, das unsere Grafikkarte im Spielbetrieb wesentlich weniger belasten wird.


Um die nachfolgenden Funktionen in Photoshop ausführen zu können, muss das NVidia DDS-Plugin installiert sein. Nach der Installation steht im Photoshop unter "Speichern/Speichern unter" das bis dahin nicht vorhandene Format DDS zur Verfügung. Wählen wir diesmal also das DDS-Format beim Speichern der Texturen, wird folgendes Optionsfenster im Photoshop erscheinen, mit dessen Hilfe wir eine DXT5 (Interpolated Alpha) Textur abspeichern. Dabei sollten die verschiedenen Optionen so eingestellt werden, wie es unsere nachfolgende Abbildung zeigt. Fast alle Einstellungen bleiben dabei auf den Standard Werten stehen:


Ein paar Optionen aber müssen wir trotzalledem manuell einstellen. Das ist zum einen das Save Format, welches wir auf DXT5 (Interpolated Alpha) setzen. Ebenso wird die Option Fade MIP Maps auf Fade Alpha To: 0 gesetzt. Es kann übrigens ebenso das DXT3-Format genutzt werden. DXT5, DXT3 und DXT1 kann der Unreal Editor importieren, da jedoch auf allen NVidia Grafikkarten (GeForce 1-3) ein Bug vorliegt, der den Kompressionsalgorythmus von DXT1 ausser Kraft setzt, verzichten wir auf den Gebrauch der DXT1 Kompression völlig. Auch wenn es theoretisch möglich wäre DXT1 zu importieren, wird die Textur im Spiel aussehen, wie Hulle und das wollen wir ja nicht.

[table 1 3 0]Tipp1:|Nutzt immer die DXT5 Kompresssion beim Speichern einer DDS-Datei, damit gibt es am wenigsten Probleme
Tipp2:|Speichert die erstellte Textur immer doppelt, einmal als DDS-Format zum importieren in den Unreal Editor und dann nochmals als BMP-Format zur eventuellen Weiterverarbeitung im Photoshop. Man kann wohl das DDS-Format speichern, aber nicht mehr ohne Verluste öffnen!
[/table]

Die vorliegende DDS-Wassertextur importieren wir jetzt ebenfalls in das selbe Package, in das wir schon zuvor unsere Basistexturen (vgl. dazu Kapitel 1.1) importiert haben, nur diesmal müssen wir beim Importieren die erstellte Alphamaske beachten:


In den Options des Import Texture Fensters aktivieren wir den Eintrag Alpha und den Eintrag Generate MipMaps. Letzterer Eintrag sollte eigentlich Standardmäßig bereits aktiviert sein. Wenn alles so aussieht, wie auf dem oben sichtbaren Bild, wird das OK Knöpfchen gedrückt und die transparente Textur erscheint im Texture Browser. Vergleiche dazu das nachfolgende Bild:


Um den Transparenz Effekt der eben importierten Textur [Water DXT5] im Bild des Texture Browser besser kenntlich zu machen, haben wir die selbe Textur [Wasser DXT3] darüber nochmals abgebildet, dort jedoch ist keine Alphamaske im Photoshop erstellt worden, wodurch die Textur keinen Transparenz Effekt erhalten hat.



2.3 Wasser Animations Effekt erstellen

Da unsere bisherige Wassertextur zwar transparent ist, jedoch noch relativ statisch aussieht, werden wir sie jetzt eine Animation erstellen, die einen Wassereffekt simuliert. Wir erstellen diesen Effekt irgendwo in unserem Texture Package. Im Gegensatz zu den meisten anderen Texturen besteht diese Animation nicht aus einer bekannten Grafikdatei. Es ist eigentlich nur ein Effekt, den wir in einem späteren Arbeitsgang mit der Wassertextur zusammenbringen. Im Moment interessiert uns nur der Wassereffekt.

Klicken wir als im Texture Browser auf File/New, woraufhin sich das nachfolgend sichtbare New Material Fenster öffnet:


Im oberen Fenster müssen wir jetzt die dort sichtbaren Einträge einstellen. Als Info/Name verteilen wir die Bezeichnung WaterAni, die Info/Class stellen wir auf Real-time Procedural Texture und danach die Properties/Class auf WetTexture. Wenn dann das New Knöpfchen gedrückt wird, erscheint folgendes Fenster:


In oben sichtbaren Fenster müssen wir als erstes das

"Raster einblenden" Werkzeug

aktivieren, um einen hintergrund Kontrast zu erzeugen. Erst so sind die nachfolgenden Schritte auf der Texturfläche sichtbar und wir können weitermachen. Und zwar in den Properties, wo wir die Rubrik WaterPaint öffnen und unter DropType den Eintrag DROP_RandomMover einstellen. Nachdem wir das getan haben klicken wir im blauen Texturfeld einfach ein paar mal mit der Maus um den gerade gewählten DROP_RandomMover Effekt dort anzuwenden. An den Stellen an denen wir geklickt haben wabbert plötzlich eine Art Effekt Blase über die Fläche, die so aussieht wie Wasser (vgl. dazu auch die oben sichtbare Abbildung). Prima, unser allgemeiner Wasser Animations Effekt ist erstellt!




2.4 Transparente Wasser Textur animieren

In diesem Arbeitsgang verbinden wir alle bisher erstellten Texturen. Dies ist etwas umständlich, da wir jetzt einen sogenannten Shader erstellen müssen. Ein Shader ist im Endeffekt eine Ansammlung übereinander liegender Texturen, die einer Grundtextur zugeordnet werden. Es hört sich komplizierter an als es ist ...

Wenn die teilweise transparente Wassertextur, sowie die Wasser Animation vorliegen, klicken wir im Texture Browser Menü auf File/New. Daraufhin sollte sich das nachfolgend sichtbare New Material Fenster öffnen, in welchem wir ein neues Oberflächen Material erstellen können. Im Grunde stimmen die voreingestellten Werte bereits, falls dies nicht der Fall ist, wähle die Einstellungen entsprechend der nachfolgenden Abbildung.


Als einzigen zusätzlichen Info Eintrag haben wir den Namen WasserShade verteilt. Im Properties Bereich wählen wir anschließend die MaterialClass Shader. Wenn alles so aussieht wie auf unserer Abbildung, wird das New oder Neu Knöpfchen betätigt und es öffnet sich das nachfolgend sichtbare Shader Properties Fenster, welches uns mit zahlreichen Optionen konfrontiert, die alle eingestellt werden wollen:


Solange im Material Tree der oberste Eintrag selektiert ist, können die dort anhängenden Sub-Texturen in die einzelnen Properties Rubriken des Fensters eingetragen werden (vgl. dazu auch die obere Abbildung). Dabei stehen die einzelnen Felder für bestimmte Texturen, die wir zuweisen müssen.

[table 1 3 0]Name der Rubrik | Übersetzung | Was muss dort rein?
Diffuse | Streuung | unsere Animationstextur
Opacity | Deckkraft | unsere tansparente Wassertextur
Specular | Spiegelung | unsere CubeMap
SpecularityMask | Spiegelungsmaske | CubeMap Alpha Maskierung (z.Bsp. für eine Brücke)
SelfIllumination | Beleuchtung | unsere Beleuchtungstextur (z.Bsp. für eine Brücke)
SelfIlluminationMask | Beleuchtungsmaske | CubeMap Alpha Maskierung (z.Bsp. für eine Brücke)
[/table]

Wir haben unsere Texturen in die oberen drei Properties Rubriken eingetragen. Das Shader Properties Fenster sollte jetzt in etwa aussehen, wie bei uns auf der nachfolgenden Abbildung:


Auf der oberen Voransicht wird die Grundtextur, das transparent-grüne Wasser sichtbar, die Beleuchtungstextur ist auch gut sichtbar, nur unsere aus 6 Seiten zusammen gebaute CubeMap stört in diese Ansicht die Optik, sie erscheint wie kleine Blitze. Wir werden erst im Verlauf des tutorials sehen, ob wirklich alles geklappt hat. Treten nachher Fehler auf, stellt das obere Fenster immer eine Basis für die fehlersuche, weil alle Texturen zugänglich sind, wenn der Shader selektiert ist. Eben so wie auf dem oberen Bild.

Zum Schluß muss das Fenster wieder geschlossen werden. Öffnen kann man es indem man einen Rechtsklick mit der Maus auf die Abbildung der Textur im Texture Browser und dann im Submenü den Eintrag Texture Properties anwählt. Um unsere Arbeit zu sichern, speichern wir wieder das Texture Package und wir sind fertig mit der animierten Wassertextur.

Flüssigkeiten Editorial (Teil 3)

Dieses Editorial besteht aus drei Teilen, es ist jeweils erforderlich die vorhergehenden Teile durchgearbeitet zu haben, um die in diesem Abschnitt gezeigten Features erstellen zu können.




3. Die Wasseroberfläche (FluidSurfaceInfo)

Bisher haben wir nur die entsprechenden texturen und Bedingungen für unser Wasserloch erstellt. Jetzt kümmern wir uns um die entsprechend sichtbare Wasseroberfläche, die wir zusammen mit den bisher erstellten, animierten Wassertexturen kombinieren. Der Darsteller (Actor), den wir benötigen nennt sich FluidSurfaceInfo, was in unserem Fall soviel wie "Wasser Oberflächen Information" bedeutet. Dieser Oberfläche weisen wir neben den Texturen auch die entsprechenden polygonalen Effekte zu. Somit wird sich die FluidSurfaceInfo bewegen und benehmen, wie eine reale Wasseroberfläche. Fangen wir einfach mal an!

[table 0 5 0]
3.1 Erzeugen de FluidSurfaceInfo
Wenn die TestMap soweit ist, speichern nicht vergessen! Jetzt fehlt eigentlich nur noch eine passende Wasseroberfläche und unsere Landschaft mit dem kleinen See wäre fertig für ein erstes Bad. Um diese so realistisch wie möglich zu erzeugen, müssen wir den Actor Class Browser öffnen und dort den Eintrag Info öffnen. Wie das nebenstehende Bild zeigt, muss die Klasse FluidSurfaceInfo selektiert werden! Danach kann sie mit einem Klick der rechten Maustaste und das dann erscheinende Optionsmenü gesetzt werden. Wir haben die FluidSurfaceInfo in die Nähe der Insel gesetzt. Es sollte dann in etwa so aussehen, wie auf der nachfolgend sichtbaren Abbildung: |
[/table]


Die Oberfläche einer FluidSurfaceInfo ist in unbearbeitetem Zustand immer eine flache Ebene, die nur die Koordinaten "X" und "Y" aufweist. Belegt ist die FluidSurfaceInfo immer mit der Standard Unreal Editor Textur. Der Darsteller (Actor) ist zwar nicht drehbar, dafür kann man die FluidSurfaceInfo in alle Richtungen verschieben! Es ist ein sogenannter Hexagonal Mesh, mit einem Spacing von 32 Einheiten. Dieser stellt ab jetzt die Wasser Oberfläche dar. Positioniere die FluidSurfaceInfo auf der richtigen Höhe, die den Wasserstand deines Tümpels einnimmt und vergrößere die FluidSurfaceInfo so, daß dein eigener Tümpel komplett damit abgedeckt wird. Es sollte dann so aussehen wie auf der nachfolgenden Abbildung:


Die Größe der FluidSurfaceInfo kann man über die Properties einstellen. Ein Doppelklick auf die FluidSurfaceInfo öffnet das entsprechende Einstellungsfenster. Unter Display/DrawScale kann ein Wert nachWunsch eingestellt werden. Standard ist der Vergrößerungsfaktor von "1" wirmussten für unseren Tümepl einen Faktor von "5" einstellen, um die gewünschte Größe zu erreichen. Dashängt ganz von der Größe des Wasserlochesund der Gestaltung der TerrainMap und muss jeweils individuell angepasst werden.



3.2 Die FluidSurfaceInfo Konfiguration

Wir benötigen natürlich noch ein paar zusätzliche Einstellungen, um eine realistische Anmutung zu bekommen. Dazu öffnen wir als erstes das FluidSurfaceInfo Properties Fenster. Am einfachsten geht das durch einen Doppelklick auf den die FluidSurfaceInfo, jedoch kann auch alternativ mit der rechten Maustaste geklickt werden und im erscheinenden Kontextmenü der oberste Eintrag "FluidSurfaceInfo Properties (1 selected)" gewählt werden. Egal wie, folgendes Optionsfenster sollte sich öffnen, in welchem wir die nachfolgenden Einstellungen tätigen können.

Hier ein Überblick zu den wichtigsten Optionen, die im Laufe dieses Editorials noch besprochen werden:


[table 1 3 0]AlphaCurveScale|Verhältnis zwischen Biegung der Flüssigkeit am Gipfel und resultierendes Alpha an diesem Gipfel
AlphaHeightScale|Verhältnis zwischen Höhe der Flüssigkeit am Gipfel und resultierendes Alpha an diesem Gipfel. Summiert mit dem Alpha wegen der Biegung
AlphaMax|Maximales Alpha des flüssigen Gipfels
bShowBoundingBox|Anzeige der Wassersprunghöhe
ClampTerrain|Gelände zum Gegenchecken
FluidDamping |Wie schnell Wellen weg sterben. Werte zwischen 0 und 1.
FluidGridSpacing |Abstand zwischen flüssigen Gipfeln. Änderungen surface Größe, ohne Änderungsnummer von verts.
FluidGridType |FGT_Hexagonal or FGT_Square. Hex sieht besser aus, ist aber etwas langsamer
FluidHeightScale |Abschließender Faktor für die Wellenhöhen.
FluidNoiseFrequency |Anzahl produzierter Geräausche pro Sekunde. Standard=50
FluidNoiseStrength |Verteilung der Geräuschstärke
FluidSpeed |Geschwindigkeit der Wellen, Höhe Werte erzeugen Dickflüssigkeit!
FluidXSize |Zahl der Gipfel in Richtung X. (Werte zwischen 2 und 256)
FluidYSize |Zahl der Gipfel in Richtung Y. (Werte zwischen 2 und 256)
OrientShootEffect |Wenn der ShootEffect gesetzt wurde, Orientierung in Richtung des Schusses.
OrientTouchEffect |Wenn der TouchEffect gesetzt wurde, Orientierung in Richtung des Actors.
RippleVelocityFactor |Verhältnis zwischen Actor und Player beim durchpflügen der Flüssigkeit
ShootEffect |Erzeugt einen Effekt beim einschlagen einer Kugel
ShootStrength |Die Stärke der Ringbildung im Wasser nach einem Treffer.
TestRipple |Schaltet die Wasserkräuselung ein, um sie im Editor zu begutachten. Ist im Spiel nicht sichtbar!
TestRippleRadius |Radius der Testkräuselung
TestRippleSpeed |Geschwindigkeit der Testkräuselung
TestRippleStrength |Stärke der Testkräuselung
TouchEffect |Der Effekt, der beim Auftreffen eines Actors erzeugt wird.
TouchStrength |Stärke der Ringbildung, wenn der Actor zum ersten mal eintaucht.
UOffset |Textur Koordinaten Offset in X-Richtung
UpdateRate |Wert, bei dem sich die Flüssigkeits Simulation aktualisiert. Man kann den Wert erhöhen, wenn die Flüssigkeit träge wirkt. Normalerweise sollte man nicht über 60Hz gehen!
UTiles |Anzahl der Texturwiederholungen in X-Richtung
VOffset |Textur Koordinaten Offset in Y-Richtung
VTiles |Anzahl der Texturwiederholungen in Y-Richtung
WarmUpTime |Zeit (in Sekunden), um das Wasser zum bewegen zu bringen., wenn es erstmals betreten wird.
[/table]

Als erstes Öffnen wir die Rubrik Display, um dort unsere Oberflächentextur zuweisen zu können, muss auf die zeile Skins geklickt werden. Daraufhin erscheinen am Ende der Zeile zwei Knöpfchen. Mit der Maus betätigen wir das Add oder Hinzufügen Knöpfchen.



Damit erstellen wir eine Leerzeile direkt darunter. Jede erzeugte Zeile entspricht einer Texturebene unseres Wassers. Wir fügen also eine Zeile hinzu. Wonach unser Eigenschaften Fenster wie folgt aussehen sollte:



Noch haben wir keine Textur zugeteilt, um dies zu tun, muss die gewünschte Textur im Texture Browser selektiert werden und kann dann über Betätigung der sichtbaren Knöpfchen automatisch in das Feld eingetragen werden. In unserem Fall tragen wir unsere vorher angeferttige, animierte Wassertextur (WasserShade) in die erste Ebene [0] ein. Unser Eintrag im Skins Feld sollte danach in etwa so aussehen wie auf der nachfolgenden Abbildung:


Im 3D-Fenster erscheint daraufhin unsere bisher erstellte animierte Wassertextur auf der FluidSurfaceInfo, anstelle der zuvor gesetzten Standard Textur. Wir haben auch dazu wieder eine Abbildung erstellt. Bei dir sollte es ganz ähnlich aussehen:


Unser Gebild hat jetzt schon wesentlich mehr Ähnlichkeit mit dem gewünschten Tümpel. Die eingesetzte CubeMap aus unserem Shader wirkt jetzt so, als ob die Bäume sich im Wasser spiegeln.

Jedoch bewegt sich das Wasser noch nicht so, wie wir es wünschen und für unsere Testmap brauchen. Nur wenn man ganz nah rangeht, sieht man, daß sich die FluidSurfaceInfo tatsächlich leicht bewegt. Ganz kleine, schwache Wellen pflügen über die FluidSurfaceInfo. Das ist uns nicht genug, wir wollen mehr!

[table 0 5 0]3.3 Den FluidSurfaceOscillator einrichten |
[/table]
Mit dem sogenannten FluidSurfaceOscillator können wir an bestimmten Stellen der FluidSurfaceInfo mehr, höhere oder stärkere Wellen erzeugen. Um so etwas zu tun, muss ein FluidSurfaceOscillator Actor (Darsteller) gesetzt werden, diesen findet man im Actor Class Browser. Wir selektieren den Eintrag, vergleiche dazu auch die nebenstehend sichtbare Abbildung.

Sollte der FluidSurfaceOscillator nicht zu finden sein, hilft das Suchen nach dem Darsteller, einfach im Menü des Unreal Editors auf "Edit/Search for Actors..." klicken und danch nochmals im Actor Class Browser kucken!

Mit einem Rechtsklick der Maus auf unsere Testmap (nicht auf die FluidSurfaceInf klicken, sondern auf das Terrain), kann die FluidSurfaceInfo über das Kontextmenü gesetzt werden. Wir tun dies ziemlich in der Mitte unserer Wasserfläche. Da bei uns im Beispiel eine kleine Insel ist, setzen wir den FluidSurfaceOscillator genau an diese Stelle. Es sollte dann in etwa so aussehen wie auf der nachfolgenden Abbildung:


Links ist das Symbol für die FluideSurfaceInfo sichtbar, das Symbol mit den gelben Pfeilen rechts daneben ist der FluideSurfaceOscillator, den wir gerade eben gesetzt haben. Öffnen wir mit einem Doppelklick auf das Symbol mit den gelben Pfeilen das entsprechende Eigenschaften Fenster. Es sollte mit FluideSurfaceOscillator Properties beschriftet sein, vergleiche dazu auch die nachfolgende Abbildung:




[table 1 3 0]FluidInfo|Eintrag für die zugeornete FluidSurfaceInfo [Events/Tag einragen]
Frequency|Wert für die Frequendes Oscillators [Durch probieren rausfinden]
Phase|Dieser Wert erlaubt es die Animationsphasen zu verschieben.
Radius|Radius, in welchem der Effekt Auswirkung auf die Oberfläche hat.
Strength|Wert für die Größe der Wellen (Standard = 10)[/table]

Wir müssen unserem Oscillator sagen, auf welche FluidSurfaceInfo er Auswirkungen haben soll. Dies muss im FluidInfo Feld zugewiesen werden. Die Programmierer haben es uns hier relativ konfortabel gemacht: Klicke auf die FluidInfo Zeile und am Ende erscheinen drei kleine Knöpfchen. Uns interessiert die Suchen/Search Funktion.


[table 0 5 0]|Wir klicken einfach mal auf das Suchen/Search Knöpfchen. Die Suchfunktion ändert dann unseren Mauszeiger zu einem kleinen Kreuz mit einem Fragezeichen. Bei uns sieht das dann so aus, wie auf der nebenstehend sichtbaren Abbildung. Mit diesem Mauseiger klicken wir nur noch auf das Symbol unserer FluidSurfaceInfo, woraufhin sich diese automatisch in das entsprechende Feld einträgt. Am Ende sollte es auf jeden Fall so aussehen, wie das auf der nachfolgend sichtbaren Abbildung zu sehen ist.[/table]




3.4 Ein Vertex Clamping erzeugen

Bisher laufen die Wellen einfach durch unsere Insel hindurch, ohne von dieser aufgehalten zu werden. Da aber eine natürliche Insel unsere Wellen aufhalten sollte, müssen wir ein sogenanntes Vertex Clamping erstellen. Dazu bewegen wir uns in die FluideSurfaceInfo Properties (öffnet sich mit einem Doppelklick auf die Wasseroberfläche) und klappen die Rubrik FluideSurfaceInfo auf. Den Eintrag ClampTerrain, der Standard-mäßig auf None steht klicken wir einmal an. Es erscheinen am Ende der Zeile drei Knöpfchen, wie sie auch auf der nachfolgenden Abbildung sichtbar sind:


[table 0 5 0]|Wir klicken wieder auf die schon eben kennengelernte Suchen/Search Funktion. Es erscheint das bekannte Kreuz mit dem Fragezeichen. Diesmal jedoch klicken wir auf unsere TerrainInfo Symbol, welches wir genutzt haben, um unsere Geländeform zu erstellen, in welcher sich unser Tümpel befindet. Dieses Gelände wird dann unserer Wasseroberfläche bekannt. Wenn wir erfolgreich waren, erscheint ein Eintrag, der ungefähr so aussieht, wie es die nachfolgende Abbildung zeigt:[/table]


etzt muss nur noch einmal gerendert werden, damit der ClampTerrain Effekt auch angewendet wird. Nach dem Rendern gehen die Wellen nicht mehr einfach so durch die Insel hindurch, sondern bewegen sich daran entlang. Da dies in unserer Testmap schwer zu sehen ist, haben wir den Ausschlag unseres Oscillators extrem hoch gesetzt. Das Wasser hat jetzt einen riesigen Wellenschlag. Doch hinter der Insel wirkt sich das kaum aus. Unser Vertex Clamping war erfolgreich:


Nach dem Rendern wird sich die Wasseroberfläche unterhalb des Terrains gar nicht mehr bewegen (clampen). Wenn man im 3D-Fenster unterhalb des Geländes nachsieht, kann man das gut erkennen. Dadurch sind die Ränder des Tümpels etwas statischer. Sie wirken jetzt eher wie eine schwabbelnde Flüssigkeit und haben auch die entsprechende Oberflächenspannung erhalten. Unser Tümepl und das Wasser Tutorial neigt sich langsam seinem Ende entgegen.




3.5 Interaktion mit der FluideSurfaceInfo

Es gibt zwei Arten, wie andere Darsteller (Actors) in Interaktion mit der gesetzten FluideSurfaceInfo treten können. dies sind:

[table 1 3 0]Schiessen|Shooting|Als Standard werden Wasserringe erzeugt, die mit der in ShootStrength angegebenen Stärke an der Stelle erzeugt werden, an der sie Auftreffen. Zusätzlich kann unter ShootEffect eine Klasse angegeben werden, die ausgeführt wird. Standardmäßig ist es ein Sound, der das Auftreffen der Kugel auf die Waseroberfläche durch ein leises Geräusch simuliert.
Berührung|Touching|Wenn ein Darsteller (Actor) Ringe auf der Wasseroberfläche erzeugen soll, muss bDisturbFluidSurface=True gesetzt werden. Dann erzeugt der Darsteller (z.Bsp. eine Spielerfigur) an der Stelle wo er das Wasser berührt einen Ringeffekt, der mit der Stärke ausgeführt wird, die im TouchStrength Eintrag festgelegt wurde. Der Eintrag RippleVelocityFactor regelt die Art und Stärke des Effekts.[/table]

Beachte, daß die FluidSurfaceInfo Oberfläche keinen Einflüss auf die Physik einer Spielerfigur hat. Diese wird mit einem seperaten WaterVolume geregelt. Wie man ein solches WaterVolume erstellen und anpassen kann, steht in unserem Volume Tutorial!