18.01.2015 Aufrufe

Simulation von Wasser - stinfwww

Simulation von Wasser - stinfwww

Simulation von Wasser - stinfwww

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Simulation</strong> <strong>von</strong> <strong>Wasser</strong><br />

Tom Liebmann<br />

25. Juni 2013<br />

Seminar Bild- und Signalverarbeitung 2013<br />

Wissenschaftliche Visualisierung


<strong>Simulation</strong> <strong>von</strong> <strong>Wasser</strong><br />

Tom Liebmann<br />

Abstract<br />

Die <strong>Simulation</strong> und Darstellung <strong>von</strong> <strong>Wasser</strong> ist seit<br />

den Anfängen eines der größten und wichtigsten<br />

Probleme der Computergrafik und -simulation. Immer<br />

realistischer werdende Computerspiele, komplexe<br />

Animationsfilme und detaillierte physikalische<br />

<strong>Simulation</strong>en für u.a. Klimaforschung lassen<br />

auf diesem Gebiet bis heute immer neue Techniken<br />

und Algorithmen entstehen, die die Komplexität<br />

<strong>von</strong> <strong>Wasser</strong> möglichst gut durch zeitlich vertretbare<br />

Berechnungen approximieren.<br />

Da dies ein für den Umfang dieser Ausarbeitung<br />

natürlich viel zu großes Gebiet ist, werden sich die<br />

folgenden Kapitel größtenteils auf Verfahren zur <strong>Simulation</strong><br />

<strong>von</strong> Ozeanen spezialisieren. Hierbei werden<br />

zunächst einige Verfahren zur Berechnung <strong>von</strong><br />

Wellen und anschließend weiterführende Methoden<br />

der Darstellung zumindest im Ansatz behandelt.<br />

1 Einleitung<br />

<strong>Wasser</strong> lässt sich aufgrund seiner Komplexität nur<br />

sehr schwer simulieren. Gleichzeitig ist es allerdings<br />

auch eines der am häufigsten und in den verschiedensten<br />

Zusammenhängen vorkommenden Elemente<br />

dieser Erde. Möchte man beispielsweise ein modernes<br />

Computerspiel entwickeln, welches einen gewissen<br />

Grad an Realität vermitteln soll, so kommt<br />

man nicht an der Frage vorbei, wie man bestmöglich<br />

und am qualitativ hochwertigsten das Verhalten<br />

und die Darstellung <strong>von</strong> <strong>Wasser</strong> simuliert.<br />

Heutige Animationsfilme greifen auf langjährige<br />

Forschung im Bereich der <strong>Wasser</strong>simulation zurück,<br />

welche eine für den normalen Betrachter ästhetische<br />

Approximation erzeugt. Renderfarmen werden<br />

hier dazu eingesetzt, komplexe Algorithmen durch<br />

teilweise reine Berechnungskraft dazu einzusetzen,<br />

<strong>Wasser</strong> in größtmöglichem Detail zu simulieren.<br />

Aber auch viele wissenschaftliche Ansätze setzen<br />

fundierte und ausführliche Kenntnisse über das<br />

Verhalten <strong>von</strong> <strong>Wasser</strong> voraus. So sind im Bereich<br />

der Klimaforschung, der Seefahrt, des Katastrophenschutzes<br />

und noch vielen weiteren detaillierte<br />

<strong>Simulation</strong>en <strong>von</strong> <strong>Wasser</strong> nötig, um möglichst genaue<br />

Vorhersagen treffen zu können.<br />

Ein großes Teilgebiet ist die <strong>Simulation</strong> <strong>von</strong><br />

Ozeanen. Da etwa 70% der Erdoberfläche mit Meeren<br />

und Ozeanen bedeckt ist, spielt die <strong>Simulation</strong><br />

tiefer Gewässer eine entscheidende Rolle für<br />

den Menschen. Filme wie ”<br />

Titanic“ greifen hierbei<br />

auf Computergrafik zurück, um komplexe Wetterbedingungen<br />

in realistische Bilder zu überführen.<br />

Aus diesem Grund werden in den folgenden Kapiteln<br />

einige Techniken im Bereich der <strong>Simulation</strong><br />

<strong>von</strong> Ozeanwasser erläutert. Nach einigen Methoden<br />

zur Berechnung <strong>von</strong> Wellen, werden auch Techniken<br />

zur Darstellung und Verbesserung der Laufzeit<br />

angeschnitten, um einen möglichst breiten Einblick<br />

zu geben.<br />

2 <strong>Simulation</strong> <strong>von</strong> Ozeanwellen<br />

Speziell bei der Darstellung <strong>von</strong> Ozeanen sind die<br />

an der <strong>Wasser</strong>oberfläche befindlichen Wellen einer<br />

der Hauptbestandteile der <strong>Simulation</strong>. Verschiedene<br />

Wetterverhältnisse und Umgebungsbeschaffenheiten<br />

sorgen hier für eine Vielzahl <strong>von</strong> Wellentypen,<br />

welche durch ebenso viele verschiedene Techniken<br />

approximiert werden können.<br />

Im folgenden werden einige grundlegende Methoden<br />

der Wellenberechnung erläutert, welche teilweise<br />

die Basis für auch heute noch eingesetzte Verfahren<br />

bilden.<br />

2.1 Basis<br />

Um die Berechnung <strong>von</strong> Wellen am Computer genauer<br />

betrachten zu können, muss zunächst bestimmt<br />

werden, auf welcher Grundlage das ganze<br />

geschieht. Neben verschiedenen Ansätzen in der<br />

<strong>Wasser</strong>simulation, wie Partikel-basierten Ansätzen,<br />

gleichmäßige Oberflächen durch Splines, Blobs und<br />

unzähligen weiteren werden die folgenden Betrachtungen<br />

größtenteils auf dem Prinzip der Height-<br />

Map basieren.<br />

Bei einer Height-Map nutzt man ein zugrunde liegendes,<br />

meist regelmäßiges Gitter, dessen Punkte in<br />

1


Abhängigkeit <strong>von</strong> ihrer Lage und dem verwendeten<br />

Wellenalgorithmus in ihrer Höhe angepasst werden.<br />

Dies ermöglicht eine einfache, skalierbare Berechnung,<br />

welche außerdem Spielraum für verschiedene<br />

Darstellungstechniken lässt. Zu beachten ist außerdem,<br />

dass alle Betrachtungen auf 2-dimensionalen<br />

Gittern arbeiten, an deren Punkten jeweils ein Höhenwert<br />

liegt, wodurch die gesamte <strong>Wasser</strong>oberfläche<br />

im 3-dimensionalen Raum angesiedelt ist.<br />

2.2 Wellenprofil-Modell<br />

Wenn man einen Ansatz zum Erzeugen <strong>von</strong> Wellen<br />

finden muss, so ist der einfachste Weg wohl der,<br />

eine Cosinusschwingung zu nutzen. Somit ließe sich<br />

eine einfache Welle durch die Formel<br />

( )<br />

2π<br />

h s (x, t) = A · cos<br />

L (d(x, x 0) − C · t)<br />

ausdrücken. h s (x, t) : R 2 × R → R ist hierbei die<br />

Höhe für einen Punkt an Position x ∈ R 2 zur Zeit<br />

t ∈ R. A ist die Amplitude, also die maximale Höhe<br />

der Welle. L beschreibt die Wellenlänge und C<br />

die Wellengeschwindigkeit, wobei der Ursprung der<br />

Welle hier im Punkt x 0 ∈ R 2 liegt. Um sowohl<br />

kreisförmige, als auch parallel verlaufende Wellen<br />

darstellen zu können, kann man hier eine flexible<br />

Distanzfunktion d : R 2 × R 2 → R nutzen.<br />

Da eine reine Cosinusschwingung nicht den nötigen<br />

Grad an Realismus bietet, kann man verschiedene<br />

Überlegungen anstellen, um echtem <strong>Wasser</strong><br />

näher zu kommen. Einfache Techniken basieren zunächst<br />

darauf, diese eine Cosinusschwingung so abzuändern,<br />

dass der gleichmäßige Verlauf und die<br />

Ähnlichkeit <strong>von</strong> Wellenbergen und -tälern verloren<br />

gehen.<br />

Wie Darwyn R. Peachey [Pea86] beispielsweise<br />

erläutert, zeigen viele Beobachtungen, dass durch<br />

den Einfluss <strong>von</strong> Wind und in flacheren Gebieten<br />

auch durch den Untergrund die Wellenberge auf<br />

ihrer Vorderseite eine andere Beschaffenheit haben<br />

als auf der Rückseite. Durch den Druck des Windes<br />

erfahren höhere Wellen an der Vorderseite einen<br />

größeren Widerstand, was dazu führt, dass sie dort<br />

ein größeres Gefälle bekommen.<br />

Um diesen Effekt möglichst einfach zu erzielen,<br />

nutzt Peachey eine lineare Interpolation zwischen<br />

der normalen Cosinuswelle und einer spitzeren,<br />

quadratischen Funktion, welche durch das<br />

Wiederholen der Funktionswerte im Intervall [0, 1]<br />

ebenfalls periodisch gemacht wird:<br />

h q (x, t) = A · 8<br />

( )<br />

·<br />

1<br />

∣ fraction L · (d(x, x 0) − C · t) − 1 2∣<br />

2<br />

− 1.<br />

L, A, C, t und x sind wie in der vorherigen Gleichung<br />

zu interpretieren.<br />

Die Funktion fraction : R → [0, 1] liefert für einen<br />

reellen Parameter dessen gebrochenen Anteil. Es<br />

gilt hierbei: fraction(x) = |x| − ⌊|x|⌋.<br />

h s und h q sind nun beides periodische Funktionen,<br />

zwischen welchen nun je nach Umgebungsbedingung<br />

interpoliert werden kann. Um hier den Anstieg<br />

und den Abfall der Welle zu unterscheiden,<br />

wird die gesamte Berechnung nun folgendermaßen<br />

strukturiert:<br />

h(x, t) = A · w(fraction(Φ(x, t)))<br />

Durch die Einführung <strong>von</strong> den beiden Funktionen<br />

w und Φ hat man nun eine bessere Übersicht und<br />

Struktur. w : [0, 1] → [−1, 1] bezeichnet Peachey<br />

hier als Profile-function. Sie basiert auf den eben<br />

getätigten Überlegungen der linearen Interpolation<br />

der Cosinuswelle und der quadratischen Funktion<br />

im Intervall [0, 1] und liefert somit abhängig<br />

<strong>von</strong> den Umgebungsbedingungen eine entsprechende<br />

Wellenform. Durch die einfache Einschränkung<br />

auf den Bereich [0, 1], welcher durch das Anwenden<br />

der fraction-Funktion im Argument periodisch<br />

fortgesetzt wird, kann man leicht die gewünschten<br />

Eigenschaften der Wellenvorder- bzw. -rückseiten<br />

bestimmen.<br />

Die Funktion Φ : R 2 × R → R verkörpert nun Eigenschaften<br />

wie Phase, Wellenlänge und den zeitlichen<br />

Verlauf der Welle. Durch die Separierung der<br />

einzelnen Eigenschaften kann man diese nun gezielt<br />

den Bedingungen anpassen. So nutzt Peachey die<br />

Flexibilität der Φ-Funktion dazu, die Wellenphase<br />

und Geschwindigkeit <strong>von</strong> der Tiefe des <strong>Wasser</strong>s<br />

abhängig zu machen. Lässt man die Welle beispielsweise<br />

mit geringerer <strong>Wasser</strong>tiefe langsamer werden,<br />

so passt sich die Wellenform in Küstenregionen dem<br />

Landverlauf an. Diesen Effekt kann man auch an<br />

echten Küsten so beobachten und steigert somit den<br />

Realitätsgrad enorm.<br />

Da eine einzige Welle sehr glatt und berechenbar<br />

erscheint, nutzt man mehrere Wellen verschiedener<br />

Amplituden, Geschwindigkeiten und Wellenlängen,<br />

2


um durch Summation eine zufälligere und natürlichere<br />

Erscheinung zu erhalten:<br />

h(x, t) =<br />

n∑<br />

A i · w i (fraction(Φ i (x, t))).<br />

i=0<br />

2.3 Gerstner-Waves<br />

Die sogenannten Gerstner-Waves nutzen, wie sehr<br />

viele Wellenalgorithmen, ebenfalls den Ansatz <strong>von</strong><br />

Cosinunsschwingungen, deren Glattheit durch weitere<br />

Berechnungen reduziert wird.<br />

Während bei Peacheys Ansatz ein Wellenprofil<br />

genutzt wurde, welches eine quadratische Parabelfunktion<br />

zum Erzeugen <strong>von</strong> starken Anstiegen enthielt,<br />

nutzt Gerstner neben der vertikalen Verschiebung<br />

der Gitterpunkte auch eine Anpassung der eigentlichen<br />

Position. Eine mögliche Berechnung lautet:<br />

⎛<br />

⎞<br />

d x · Q · sin (k · 〈d, x〉 + w · t)<br />

f(x, t) = ⎝d y · Q · sin (k · 〈d, x〉 + w · t) ⎠ .<br />

A · cos (k · 〈d, x〉 + w · t)<br />

f : R 2 × R → R 3 ist hierbei die neue Position eines<br />

Punktes an den Gitterkoordinaten x ∈ R 2 im 3-<br />

dimensionalen Raum.<br />

Durch eine Vielzahl <strong>von</strong> Parametern kann man<br />

nun die genauen Eigenschaften der Wellen bestimmen.<br />

d ∈ R 2 ist beispielsweise ein normalisierter<br />

Vektor, welcher die Wellenrichtung angibt. Für<br />

den skalaren Wert k ∈ R gilt der Zusammenhang<br />

k = 2π L<br />

, wobei L ∈ R hier die Wellenlänge, also<br />

der Abstand zwischen 2 Wellenbergen ist. t ∈ R ist<br />

wie zuvor die Zeit, A ∈ R die Amplitude und die<br />

verbleibenden beiden Parameter w ∈ R und Q ∈ R<br />

werde ich nun etwas genauer betrachten.<br />

Über den Parameter Q lässt sich regeln, wofür<br />

die Verschiebung der Ursprungsposition eigentlich<br />

gedacht war, nämlich die Steigung der Wellen. Für<br />

Q = 0 ergibt sich als Wellenform eine normale Cosinunsschwingung,<br />

da die Punkte auf der x − y-<br />

Ebene, also dem Gitter, nicht verschoben werden.<br />

Für Q = 1 hingegen ergeben sich äußerst spitze<br />

Wellenberge und eher flachere, stetigere Wellentäler,<br />

was eher den Eindruck rauerer Wettereinflüsse<br />

vermittelt. Bei Werten über 1 ergibt sich auch schon<br />

einer der größten Nachteile dieser Technik, nämlich<br />

das Überschlagen“ <strong>von</strong> Wellen. Hierbei bildet sich<br />

”<br />

an der Wellenspitze eine Art Schlaufe, bei der die<br />

Unterseite der Welle nach oben tritt, ein Effekt, den<br />

man bestmöglich vermeiden sollte.<br />

Der verbleibende Parameter w wurde aus den<br />

Gleichungen <strong>von</strong> Tessendorf [Tes01] entnommen<br />

und repräsentiert in gewisser Weise die Wellengeschwindigkeit.<br />

Ähnlich der zuvor getätigten Wellenbetrachtung<br />

kann man auch hier Abhängigkeiten<br />

vom Untergrund ergänzen. In sehr tiefem <strong>Wasser</strong><br />

bringt beispielsweise der Zusammenhang<br />

w 2 = 9,81 · k<br />

gute Ergebnisse. Wird das <strong>Wasser</strong> jedoch im Verhältnis<br />

zur Wellenlänge deutlich flacher, so können<br />

Ansätze wie<br />

w 2 = 9,81 · k · tanh(k · D)<br />

bessere Ergebnisse liefern, wobei D ∈ R hier die<br />

Tiefe des Untergrundes ist. Oberflächenspannung,<br />

Windgeschwindigkeit und Untergrund spielen hier<br />

stark zusammen und bieten viele Möglichkeiten der<br />

Bestimmung <strong>von</strong> w.<br />

Um auch hier <strong>von</strong> der einfachen Betrachtung einer<br />

einzelnen Welle abzukommen, kann man mehrere<br />

Wellen unterschiedlicher Eigenschaften summieren:<br />

f(x, t) =<br />

⎛<br />

⎞<br />

n∑ d i,x · Q i · sin (k i · 〈d i , x〉 + w i · t)<br />

⎝d i,y · Q i · sin (k i · 〈d i , x〉 + w i · t) ⎠<br />

i=0 A i · cos (k i · 〈d i , x〉 + w i · t)<br />

Abbildung 1: Aus 4 Gerstner-Wellen bestehendes<br />

Wellenprofil mit Schlaufenbildung an Wellenbergen.<br />

Quelle: Eigene Implementierung<br />

Wie man in Abbildung 1 sehen kann, treten Probleme<br />

hier vor allem bei den Wellenüberschlägen<br />

auf. Durch die Summation wird dieser negative Effekt<br />

an Überlagerung <strong>von</strong> Wellenbergen deutlich<br />

verstärkt und bei falscher Parameterwahl können<br />

schnell solche Artefakte entstehen.<br />

Auf der anderen Seite kann man die Bildung <strong>von</strong><br />

Schlaufen auch als Indiz für brechende Wellen sehen,<br />

zu denen man dann weitere Überlegungen anstellen<br />

kann.<br />

Ein weiterer Nachteil, welchen man in Ansätzen<br />

in Abbildung 2 erkennen kann, ist die Verschiebung<br />

der Gitterpunkte in der x-y-Ebene. Sie sorgt dafür,<br />

3


(a)<br />

(b)<br />

Abbildung 2: 3-dimensionales Wellenprofil basierend<br />

auf Gerstner-Wellen (a) und das zugrunde liegende<br />

Gittermodell (b). Quelle: Eigene Implementierung<br />

dass beispielsweise der Rand des Gitters verzerrt<br />

und somit schwieriger in eine Umgebung einzubetten<br />

ist. Auf der anderen Seite sorgt die dynamische<br />

Platzierung der Punkte automatisch für eine höhere<br />

Punktdichte an den spitzen Wellenbergen und für<br />

weniger Punkte in den flachen Wellentälern, was<br />

die visuelle Glattheit unterstützt.<br />

Abwandlungen des Algorithmus’ können diese<br />

Probleme jedoch beheben und das Verfahren somit<br />

anwendbar für sämtliche auf dem Höhengitter<br />

basierende Applikationen machen.<br />

2.4 Wellen durch Fourier-Transformation<br />

Gerstner-Waves und auch das auf den Wellenprofilen<br />

basierende Modell bieten zwar schon gute Möglichkeiten,<br />

Ozeanwellen auch bei unterschiedlichen<br />

Untergrund- und Wetterbedingungen zu berechnen,<br />

lassen allerdings wenig Spielraum für statistische<br />

Untersuchungen aus der Realität. Günstig<br />

wäre ein Verfahren, welches mit tatsächlich gemessenen<br />

Werten reale Wellen möglichst gut approximiert.<br />

Eine hierfür gut geeignete Möglichkeit zur Berechnung<br />

bietet eine Abwandlung der Fouriertransformation.<br />

Hierbei wird die Wellenform in verschiedene<br />

Schwingungen unterschiedlicher Frequenzen<br />

zerlegt, für die jeweils ein komplexer Koeffizient<br />

a ∈ C entsteht:<br />

n∑<br />

h(x, t) = a(k m , t) · e ikm·x .<br />

m=0<br />

Hierbei besteht die gesamte Welle aus n Teilwellen,<br />

welche jeweils durch eine komplexe Schwingung<br />

mit Amplitude a ∈ C beschrieben werden, welche<br />

wiederum <strong>von</strong> der momentanen Zeit t und der<br />

Richtung der einzelnen Wellen k m abhängen. Damit<br />

das Wellenresultat allerdings reell ist, muss für<br />

weitere Betrachtungen die Eigenschaft a(−k m , t) =<br />

a ∗ (k m , t) gelten, um die imaginären Anteile aufzulösen.<br />

Nun wirkt diese Gleichung wenig spektakulär, da<br />

sie pro eingebetteter Welle nur einen Parameter<br />

enthält und somit z.B. auch durch eine vereinfachte<br />

Spezialform der Gerstner-Waves gesehen werden<br />

kann.<br />

Allerdings ist es gerade diese Einfachheit, die genug<br />

Flexibilität bietet, um sehr komplexe, auf empirischen<br />

Untersuchungen basierende Wellen zu erzeugen.<br />

Interessant ist beispielsweise, dass durch die<br />

Überführung der Wellenhöhen in eine Anzahl <strong>von</strong><br />

enthaltenen Frequenzen eine Art Dualität zwischen<br />

diesen beiden Betrachtungen herrscht, da mit einer<br />

weiteren, leicht abgewandelten Fouriertransformation<br />

die Frequenzen wiederum aus den Höhen<br />

errechnet werden können, was so bei komplexeren<br />

Modellen nur schwer möglich ist.<br />

So zielen empirische Untersuchungen meist darauf<br />

ab, ein Wellenspektrum P : R 2 → R im Frequenzraum<br />

zu bestimmen, um daraus schließlich im<br />

Computer realistische Wellen zu erzeugen.<br />

Ein laut Tessendorf [Tes01] gutes Frequenzspektrum<br />

ist beispielsweise das sog. Phillips-Spektrum,<br />

welches definiert ist durch<br />

P (k m ) = A ·<br />

exp( −1<br />

(˜kL) 2 )<br />

˜k 4 |k m · w| 2 .<br />

Neben Windrichtung w, einem Parameter für die<br />

Größe der Wellen L, einem für die Wellenlänge<br />

˜k = 2π<br />

L m<br />

und einer numerischen Konstante“ A sorgt<br />

”<br />

der Term |k m·w| 2 außerdem für ein Eliminieren <strong>von</strong><br />

Wellen, welche nicht parallel zum Wind verlaufen.<br />

Hier lässt die Wahl des Spektrums auch sehr viel<br />

Spielraum für Experimente und Untersuchungen,<br />

die den Umfang dieser Ausarbeitung überschreiten<br />

würden. Wichtig ist lediglich zu wissen, dass<br />

sich über die Koeffizienten die gesamte Wellenform<br />

detailliert und vergleichsweise intuitiv beschreiben<br />

lässt.<br />

Da das Frequenzspektrum meist in reeller Form<br />

als Norm der komplexen Koeffizienten gegeben ist,<br />

müssen die tatsächlichen Werte erst errechnet werden.<br />

Zu diesem Zweck werden gaußverteilte Zufallszahlen<br />

ξ 1 und ξ 2 bestimmt, die für eine zufällige<br />

Phasenverschiebung sorgen. Die Berechnung ergibt<br />

4


sich dann folgendermaßen:<br />

a 0 (k m ) = 1 √<br />

2<br />

(ξ 1 + iξ 2 ) √ P (k m ).<br />

Statistische Untersuchungen haben die annähernde<br />

Korrektheit der Gaußverteilung laut Tessendorf<br />

validiert. Es lassen sich je nach Anwendungsfall allerdings<br />

auch andere Verteilungen benutzen.<br />

Für den gleichmäßigen zeitlichen Verlauf sorgt<br />

nun die Beziehung<br />

a(k m , t) = a 0 (k m ) exp(iwt) + a ∗ 0(−k m ) exp(−iwt),<br />

wobei w dem schon bei den Gerstner-Wellen genutzten<br />

Parameter zur Regulierung der Wellengeschwindigkeit<br />

entspricht. Die Kombination <strong>von</strong><br />

a 0 (k m ) und a ∗ 0(−k m ) sorgt hier dafür, dass sich die<br />

Wellen gleich in beide Richtungen k m und −k m ausbreiten<br />

und reellwertig sind.<br />

Zur effizienten Berechnung der einzelnen Höhenwerte<br />

aus den Frequenz-Koeffizienten bietet sich<br />

beispielsweise die sog. schnelle Fourier Transformation<br />

(FFT) an. Diese setzt jedoch zwei Dinge<br />

voraus. Zum einen muss die Anzahl an Koeffizienten<br />

mit denen der Gitterpunkte übereinstimmen<br />

und zum anderen müssen diese Zweierpotenzen<br />

entsprechen. Da die meisten Frequenzspektren<br />

allerdings vorher festgelegt werden und nur wenige<br />

Werte wirklich verschieden <strong>von</strong> 0 sind, kann<br />

man hier durch weitere vom Spektrum abhängige<br />

Überlegungen in der Berechnungszeit deutlich unter<br />

O(n log n) der FFT kommen.<br />

2.5 Choppy-Waves<br />

Zwar sind die mit dem Frequenzspektrum erzeugten<br />

Wellen schon sehr realistisch und wissenschaftlich<br />

fundiert und theoretisch lassen sich mit dieser<br />

Methode alle erdenktlichen Wellen erzeugen,<br />

allerdings ist das Erzeugen <strong>von</strong> spitzen Wellen<br />

mit flachen Wellentälern wie beispielsweise bei den<br />

Gerstner-Waves sehr kostspielig, da scharfe Strukturen<br />

durch Überlagerung <strong>von</strong> sehr vielen Frequenzen<br />

und daher vielen Berechnungen entstehen. Um<br />

diesen Aufwand zu verringern und die Möglichkeit<br />

zu haben, auch mit der Fourier-Transformation<br />

schnell Wellen bei raueren Wetterbedingungen zu<br />

generieren beschreibt Tessendorf einen Ansatz der<br />

Nachbearbeitung. Der Gedanke ist hier ähnlich dem<br />

Ansatz <strong>von</strong> Gerstner, dass durch weitere horizontale<br />

Verschiebungen spitze Strukturen erzeugt werden.<br />

Den mathematischen Ansatz liefern hier Creamer<br />

et al. [CHSW89], welche mit der sog. ”<br />

Lie<br />

Transform technique“ eine Möglichkeit vorstellen,<br />

das Anstiegs- und Geschwindigkeitspotenzial <strong>von</strong><br />

Ozeanwellen zu verringern und somit die Wellen<br />

zu glätten. Wendet man nun die inverse Methode<br />

auf zu glatte Wellen an, so ergeben sich genau die<br />

gewünschten kantigen Strukturen, welche für mehr<br />

Realismus sorgen. Die Verschiebung lässt ich ausdrücken<br />

durch<br />

D(x, t) =<br />

n∑<br />

m=0<br />

−i k m<br />

˜k a(k m, t)e ikm·x ,<br />

wobei die neue Position dann durch x = λD(x, t)<br />

mit einem Skalierungsfaktor λ ∈ R gegeben ist. Alle<br />

Parameter haben die selbe Bedeutung wie bei den<br />

bisherigen Gleichungen. Das Ergebnis dieser Ver-<br />

(a)<br />

(b)<br />

Abbildung 3: Mit der Fourier-Transformation erzeugte<br />

Wellen vor (a) und nach deren Choppy-<br />

Modifikation (b). Quelle: Tessendorf [Tes01]<br />

schiebung kann man in Abbildung 3 sehen. Auffallend<br />

sind die deutlich spitzeren Wellenberge, welche<br />

stellenweise für deutlich turbulentere Wellen, vereinzelt<br />

aber auch für neue Probleme sorgen, welche<br />

im nächsten Kapitel näher erläutert werden.<br />

2.6 Brechende Wellen<br />

Zwar lassen sich mit der Methode der Choppy Waves<br />

gut spitze Wellen bilden, allerdings ergeben sich<br />

auch ähnliche Probleme wie zuvor bei den Gerstner<br />

Waves. Unter gewissen Bedingungen kann es nämlich<br />

zu den bereits erwähnten Schlaufenbildungen<br />

an den Wellenbergen kommen.<br />

Man kann auch hier wieder das Auftreten dieses<br />

Phänomens als Anzeichen für brechende Wellen<br />

nutzen. Um dies jedoch effizient einsetzen zu<br />

können, benötigt man ein schnelles Verfahren zum<br />

5


zweifelsfreien Erkennen <strong>von</strong> sich überschlagenden<br />

Wellen.<br />

Glücklicherweise beschreibt Tessendorf für diesen<br />

Zweck ein äußerst einfaches Verfahren. Drückt man<br />

die Verschiebung des Punktes x durch eine Funktion<br />

aus, so ergibt sich:<br />

δ t (x) = x + λD(x, t).<br />

Da für die folgenden Betrachtungen die Zeit als fest<br />

angesehen wird, habe ich sie hier als Index aufgeführt.<br />

Bildet man nun <strong>von</strong> δ : R 2 → R 2 die Jacobi-<br />

Matrix, so ergibt sich mit x = (x 1 , x 2 ) T :<br />

J t (x) =<br />

=<br />

( ∂δt,1(x)<br />

∂x 1<br />

∂δ t,2(x)<br />

∂x 1<br />

(<br />

1 + λ ∂D1(x,t)<br />

∂x 1<br />

λ ∂D2(x,t)<br />

∂x 1<br />

)<br />

∂δ t,1(x)<br />

∂x 2<br />

∂δ t,2(x)<br />

∂x 2<br />

)<br />

λ ∂D1(x,t)<br />

∂x 2<br />

∂x 2<br />

1 + λ ∂D2(x,t)<br />

Die Determinante det(J t (x)) = J t,11 (x) · J t,22 (x) −<br />

J t,12 (x) · J t,21 (x) hat nun die äußerst praktische<br />

Eigenschaft, an den Stellen, an denen sich durch<br />

zu starke Verschiebungen Schlaufen bilden, negativ<br />

zu sein. Durch den analytischen Ausdruck gestaltet<br />

sich die genaue Berechnung zudem recht unproblematisch.<br />

Abbildung 4: Verhalten des kleinsten Eigenwertes<br />

in Abhängigkeit <strong>von</strong> brechenden Wellenbergen.<br />

Quelle: Tessendorf [Tes01]<br />

Doch aus dieser Vorgehensweise kann man sogar<br />

noch mehr Informationen ziehen. Berechnet man<br />

.<br />

nun nicht nur die Determinante, sondern die Eigenwerte,<br />

so weist der niedrigste Eigenwert ebenfalls<br />

die Eigenschaft auf, in den kritischen Regionen negativ<br />

zu sein (siehe Abbildung 4). Zudem gibt der<br />

zugehörige Eigenvektor noch Aufschluss über die<br />

Richtung, in der die Überlappung stattfindet, und<br />

ermöglicht somit direkt weitere Verfahren, wie das<br />

richtungsabhängige Erzeugen <strong>von</strong> Schaumpartikeln<br />

oder das Verdeutlichen des Wellenbruchs durch zusätzliche<br />

Geometrie.<br />

3 Darstellung <strong>von</strong> Ozeanen<br />

Neben der reinen Berechnung der Wellen basierend<br />

auf der Height-Map oder anderen Geometrien<br />

ist die Darstellung die zweite große Problematik.<br />

Verschiedene Methoden spezialisieren sich jeweils<br />

auf die verschiedenen Anwendungsbereiche. Während<br />

für Forschung und Technik weniger die Darstellung<br />

als die physikalischen Eigenschaften eine<br />

Rolle spielen, sind für Anwendungen im Film oder<br />

in der Comptuerspielbranche realitätsnahe Bilder<br />

erwünscht. Hier muss man allerdings wie bei vielen<br />

Bereichen den Tradeoff zwischen Qualität und<br />

Quantität bzw. Geschwindigkeit beachten. Während<br />

bei computerunterstützen Filmen die Berechnungen<br />

durch aufwändige Algorithmen weit <strong>von</strong><br />

Echtzeit entfernt sind und durch hochgradige Parallelisierung<br />

in Renderfarmen Bild für Bild erstellt<br />

wird, muss bei Spielen auf eine angemessene Bildwiederholrate<br />

geachtet werden.<br />

In den folgenden Kapiteln werden einige theoretische<br />

und praktische Ansätze zum Thema Darstellung<br />

<strong>von</strong> Ozeanwasser erläutert.<br />

3.1 Überwasser<br />

Ist der Betrachter über der <strong>Wasser</strong>oberfläche, so<br />

spielen verschiedene Phänomene zusammen. Das<br />

Licht an einem Punkt auf der <strong>Wasser</strong>oberfläche ist<br />

sowohl abhängig <strong>von</strong> reflektiertem Licht, als auch<br />

<strong>von</strong> der Zusammensetzung des <strong>Wasser</strong>s. Im Ansatz<br />

des Raytracings spaltet sich ein auf der <strong>Wasser</strong>oberfläche<br />

eintreffender Strahl somit in einen reflektierten<br />

und einen gebrochenen Strahl auf.<br />

Die Eigenschaften und die nötigen Berechnungen<br />

werden <strong>von</strong> den beiden folgenden Kapiteln genauer<br />

behandelt.<br />

3.1.1 Reflektion<br />

Die Reflektionskomponente ist aufgrund der guten<br />

und nahezu perfekt speigelnden Eigenschaften <strong>von</strong><br />

6


<strong>Wasser</strong> gut simulierbar. Zur Bestimmung des Reflektionsvektors,<br />

mit dem man im Anschluss weiterführende<br />

Berechnungen für die endgültig zum Bild<br />

beitragende Farbe machen kann, benötigt man lediglich<br />

den Vektor in einfallender Blickrichtung und<br />

die Normale der <strong>Wasser</strong>oberfläche.<br />

Auch für die Normalenberechnungen gibt es unterschiedliche<br />

Ansätze. Z.B. kann man einfach die<br />

Struktur des erwähnten Gittermodells nutzen und<br />

über numerische Differentiation bzw. die Höhenunterschiede<br />

der benachbarten Punkte den Gradienten<br />

und somit die Normale bestimmen. Zwischen<br />

den Gitterpunkten kann man im Anschluss durch<br />

Interpolation die Technik des Phong-Shadings anwenden,<br />

um eine recht glatte Oberflächenstruktur<br />

zu erhalten. Genauere Verfahren sind natürlich immer<br />

abhängig vom Berechnungsmodell, so bietet<br />

der Wellenansatz der Fourier-Transformation einen<br />

analytischen Zugang zu den Normalen, welcher lediglich<br />

aus weiteren Fourier-Transformationen besteht,<br />

wodurch pixelgenaue Bestimmungen und somit<br />

bestmögliche Genauigkeit erzielt werden können.<br />

Durch randomisierte Verschiebung oder das zusätzliche<br />

Anwenden <strong>von</strong> Bumpmapping (auch Normalmapping<br />

genannt) können an dieser Stelle auch<br />

feinere Strukturen, wie Kapillarwellen oder bei<br />

niedrigerem Genauigkeitsanspruch auch Auswirkungen<br />

<strong>von</strong> beispielsweise im <strong>Wasser</strong> befindlichen<br />

Objekten, simuliert werden, ohne aufwändig die<br />

<strong>Wasser</strong>geometrie anpassen zu müssen.<br />

Hat man nun die Oberflächennormale, im folgenden<br />

als n(x, t), n : R 2 × R → R 3 bezeichnet, gegeben,<br />

sowie den einfallenden Vektor v i ∈ R 3 , so lässt<br />

sich der reflektierte Vektor v r (x, t) einfach über die<br />

Gleichung<br />

bestimmen.<br />

v r (x, t) = v i − 2n(x, t) · 〈n(x, t) · v i 〉<br />

Bei normalem Raytracing würde die gesamte Berechnung<br />

nun erneut mit v r als einfallendem Vektor<br />

bis zu einer gewissen Rekursionstiefe durchgeführt<br />

werden, was in einer Farbe resultiert, welche zu einem<br />

gewissen Anteil zu der Farbe des ursprünglichen<br />

Fragments beiträgt. Die Größe dieses Anteils<br />

ist deutlich komplexer und Tessendorf verweist<br />

hierbei auf die Theorie der elektromagnetischen Dielektriken,<br />

welche in der Formel<br />

R(v i , v r ) = 1 2<br />

( sin 2 )<br />

(θ b − θ i )<br />

sin 2 (θ b + θ i ) + tan2 (θ b − θ i )<br />

tan 2 (θ b + θ i<br />

resultiert. Hierbei ist R die resultierende Magnitude<br />

der Reflektion und θ i und θ b sind jeweils die Winkel<br />

des einfallenden und des brechenden Vektors relativ<br />

zur Oberflächennormale. Aus dem Fakt, dass Licht<br />

nicht verloren gehen kann, ergibt sich für die Größe<br />

des Brechungsanteils T das Verhältnis: T + R = 1.<br />

Die einzigen Werte, welche nun noch zum Lösen<br />

der Gleichung und zum bestimmen der Gesamtfarbe<br />

nötig sind, sind der Winkel θ b und die daraus<br />

resultiernde Richtung des gebrochenen Vektors<br />

v b ∈ R 3 , welche im nächsten Abschnitt betrachtet<br />

werden.<br />

3.1.2 Brechung<br />

Nachdem die Reflektion sich recht einfach berechnen<br />

ließ, greifen bei der Lichtbrechung deutlich<br />

komplexere Vorgänge. Grundlage hierfür bildet das<br />

1621 <strong>von</strong> Snell gefundene Brechungsgesetz, nach<br />

dem für den Übergang <strong>von</strong> Licht <strong>von</strong> einem Medium<br />

mit Einfallswinkel θ i in ein anderes Medium<br />

gilt:<br />

c i · sin(θ i ) = c b · sin(θ b ),<br />

wobei c i und c b materialabhängige Konstanten<br />

(c Luft ≈ 1, c <strong>Wasser</strong> ≈ 4 3 ) und θ b der entsprechende<br />

Austrittswinkel sind. Zusammen mit den Annahmen,<br />

dass v i , n und der Austrittsvektor v b normiert<br />

sind und dass v t sich durch eine Linearkombination<br />

aus v i und n beschreiben lässt, ergibt sich die<br />

Gleichung<br />

v b (x, t) = c (<br />

i ci<br />

v i + 〈v i , n(x, t)〉<br />

c b c b<br />

√<br />

⎞<br />

( ) 2 ci<br />

± 1 − · |v i × n(x, t)| ⎠ · n.<br />

c b<br />

Hierbei wurde außerdem noch die Beziehung<br />

sin(θ b ) = |v b × n| genutzt, welche direkt aus der<br />

Definition des Kreuzproduktes und der Normierung<br />

der Vektoren folgt.<br />

Somit sind jetzt v b und θ b bestimmt, wodurch<br />

sowohl die Brechungskomponente als auch gleichzeitig<br />

die übrigen Terme der Reflektion gelöst sind.<br />

7


Die hier getätigten Annahmen und Betrachtungen<br />

wurden erneut den Ausführungen <strong>von</strong> Tessendorf<br />

[Tes01] entnommen. Hierbei erscheint das Modell<br />

zwar recht plausibel, jedoch behandelt es bei<br />

weitem nicht alle auf der <strong>Wasser</strong>oberfläche auftretenden<br />

Phänomene. Licht, welches durch die <strong>Wasser</strong>oberfläche<br />

tritt, wird je nach Zusammensetzung<br />

des <strong>Wasser</strong>s <strong>von</strong> den Molekühlen gestreut, wodurch<br />

ein Teil wieder zurück zum Betrachter geleitet wird.<br />

Außerdem reflektiert Licht auch am Untergrund,<br />

was bei wirklich tiefen Gewässern jedoch kaum<br />

einen Einfluss hat. Stärker ist der Effekt <strong>von</strong> Mehrfachreflektion<br />

an der unebenen <strong>Wasser</strong>oberfläche<br />

gemischt mit gewissen Teilen <strong>von</strong> gestreutem und<br />

daher nahezu diffusem Licht. Auch Polarisationseffekte,<br />

welche unter Umständen an der Grenze zwischen<br />

<strong>Wasser</strong> und Luft auftreten können, werden<br />

<strong>von</strong> diesem Modell nicht abgedeckt.<br />

Komplexere Modelle können hier für mehr Realismus<br />

sorgen. Theoretische Ansätze führen hier<br />

zu Berechnungen <strong>von</strong> Lichtintensitäten, welche sich<br />

aus verschiedenen Komponenten der Umgebung zusammensetzen.<br />

So besteht das an einem Punkt<br />

sichtbare Licht aus Termen für Sonneneinstrahlung,<br />

diffusem Licht vom Himmel und gestreutem Licht<br />

aus dem <strong>Wasser</strong>. Diese Komponenten sind allerdings<br />

wiederum nicht vollständig und weisen Wechselwirkungen<br />

auf, die solche idealen Ansätze praktisch<br />

nicht anwendbar machen.<br />

Oft werden statistische Ansätze gewählt. So werden<br />

unter dem Begriff BRDF [BNH10] Methoden<br />

zusammengefasst, bei denen zu jedem Punkt für<br />

jeden einfallenden Lichtstrahl eine Intensität und<br />

Verteilung der ausgehenden Strahlen und somit<br />

anisotrope Modelle aufgestellt werden, welche das<br />

Verhalten <strong>von</strong> <strong>Wasser</strong>oberflächen noch besser approximieren<br />

sollen.<br />

3.1.3 Echtzeitanwendung<br />

Neben dem Ansatz des Raytracings, welcher mit<br />

den in den letzten Abschnitten hergeleiteten Gleichungen<br />

in einer einfachen Variante implementiert<br />

werden könnte, gibt es natürlich auch Ansätze, die<br />

auf Echtzeitanwendungen abzielen.<br />

In der heutigen Zeit, in der die Prozessorleistung<br />

nur langsam ansteigt und Parallelverarbeitung eines<br />

der wichtigsten Teilgebiete der Informatik geworden<br />

ist, zielen viele Algorithmen auf das optimale<br />

Ausnutzen der GPU ab. Die programmierbare<br />

Grafikpipeline war einer der wichtigsten Meilensteine<br />

der Computergrafik und moderne Echtzeitanwendungen<br />

nutzen demnach auch für <strong>Wasser</strong>darstellung<br />

Grafikshader. Dass ein normales Shading<br />

<strong>von</strong> glatten Oberflächen bei <strong>Wasser</strong> optisch nicht<br />

ansprechend ist, konnte man schon in Abbildung 3<br />

erkennen. Doch die Betrachtungen aus dem letzten<br />

Kapitel lassen sich auch zur Programmierung <strong>von</strong><br />

Shadern nutzen.<br />

(a)<br />

(b)<br />

Abbildung 5: Verschiedene Shading-Techniken mit<br />

einfachem Oberflächenshading (a) und dem realistischerem<br />

<strong>Wasser</strong>shading (b). Quelle: Tessendorf<br />

[Tes01]<br />

Ein einfacher Ansatz, den Tessendorf für die Vorstellung<br />

eines Shaders für die 3d-Software RenderMan<br />

nutzt, wäre die einfache Berechnung des<br />

vorgestellten Verhältnisses <strong>von</strong> reflektiertem Licht<br />

und gebrochenem Licht, wobei diese Farbkomponenten<br />

nun nicht rekursiv durch Raytracing berechnet,<br />

sondern mit konstanten Farbwerten versehen<br />

werden. Dieser Ansatz ist aufgrund seiner Einfachheit<br />

sehr schnell und liefert vergleichsweise gute Ergebnisse,<br />

wie in Abbildung 5 zu sehen ist.<br />

Abbildung 6: Komponenten für die Farbzusammensetzung<br />

einer Ozeanszene. Rechts ist das aus den<br />

anderen Bildern resultierende Endbild. Quelle: Bruneton<br />

et al. [BNH10]<br />

Neben diesem gibt es allerdings auch weitaus<br />

komplexe Ansätze. Für mäßige Wetterbedingungen<br />

8


mit flacher <strong>Wasser</strong>oberfläche oder für weit entfernte<br />

Ozeanoberflächen bietet sich auch in Echtzeit<br />

eine korrekte Berechnung der gespiegelten Umgebung<br />

an. Hierzu kann durch einen zweiten Renderschritt<br />

die zu spiegelnde Umgebung einfach mit<br />

der entsprechenden Perspektive gerendert und anschließend<br />

mit der <strong>Wasser</strong>oberflächenfarbe kombiniert<br />

werden. Die spekulare Spiegelung der Sonne,<br />

auf verschiedene Tageszeiten abgestimmte farbliche<br />

Effekte und leicht durchschimmernder Untergrund<br />

sind nur ein paar Dinge, welche auch in Echtzeit<br />

in Shadern impementiert werden können. Ein<br />

Beispiel hierfür ist in Abbildung 6 gezeigt, welche<br />

die Zusammensetzung der Ozeanfarbe aus verschiedenen<br />

Komponenten zeigt, wie sie <strong>von</strong> Bruneton<br />

et al. [BNH10] genutzt wird.<br />

3.2 Unterwasser<br />

Neben den Lichteffekten, welche auf der <strong>Wasser</strong>oberfläche<br />

auftreten, gibt es auch einige, welche für<br />

den Betrachter erst unterwasser zum Tragen kommen.<br />

Ein paar der wichtigsten Phänomene sind<br />

hierbei Tiefenunschärfe, dynamische Partikel (z.B.<br />

Plankton, Algen, Luftblase, etc.), Godrays und<br />

Kaustiken. Hierbei möchte ich im folgenden auf Godrays<br />

und Kaustiken eingehen.<br />

3.2.1 Kaustiken<br />

Kaustiken treten auf, wenn Licht an der <strong>Wasser</strong>oberfläche<br />

gebündelt und unterwasser auf eine Oberfläche<br />

trifft. Sie erscheinen als unregelmäßige, komplexe,<br />

schollenartige Lichtmuster, welche je nach<br />

Tiefe der Darstellung variieren. Eine perfekte <strong>Simulation</strong><br />

<strong>von</strong> Kaustiken würde eine Berechnung <strong>von</strong><br />

sehr vielen Lichtstrahlen erfordern, welche durch<br />

die <strong>Wasser</strong>oberfläche gebrochen und gebündelt in<br />

einer gewissen Tiefe mit einer Ebene geschnitten<br />

das entsprechende Muster ergeben.<br />

(a) (b) (c)<br />

Abbildung 7: Verschiedene Muster für Kaustiken in<br />

10m (a), 100m (b) und 200m(c) <strong>Wasser</strong>tiefe. Quelle:<br />

Jensen und Golias [JG03]<br />

Durch die Komplexität der Muster, welche durch<br />

das menschliche Auge in den meisten Fällen sowieso<br />

nicht auf Korrektheit überprüft werden kann, kann<br />

man hier starke Vereinfachungen nutzen, um den<br />

Berechnungsaufwand in Grenzen zu halten. Jensen<br />

und Golias [JG03] nutzen eine Technik, bei der die<br />

Dreiecksgeometrie der Oberfläche nach Snells Brechungsgesetz<br />

nach unten fortgeführt wird und dort<br />

durch entsprechende Lichtberechnungen zu den erwünschten<br />

Mustern führt. Da die Strahlen innerhalb<br />

der Dreiecke linear interpoliert werden können,<br />

ergibt sich ein erheblich geringerer Aufwand.<br />

Ein Problem hierbei ist jedoch, dass die resultierende<br />

Gitterstruktur nicht mehr die gleichen wiederholbaren<br />

(siehe Abschnitt 3.3) Eigenschaften hat<br />

wie das ursprüngliche Gitter. Dies kann jedoch<br />

durch geschickte Überlagerung <strong>von</strong> angrenzenden<br />

Gitterzellentexturen behoben werden. Ein Beispiel<br />

für die hieraus resultierenden Muster ist in Abbildung<br />

7 für verschiedene Tiefen dargestellt.<br />

3.2.2 Godrays<br />

Godrays, auch Sunbeams genannt, sind Lichtstrahlen,<br />

welche durch Fokussierung an der <strong>Wasser</strong>oberfläche<br />

in das <strong>Wasser</strong> eindringen und dort <strong>von</strong> verschiedenen<br />

Partikeln gestreut werden, woraufhin sie<br />

schließlich den Betrachter erreichen. Zu sehen sind<br />

also vertikal verlaufende Lichtstrahlen, welche je<br />

nach Position unterschiedliche Intensität aufweisen.<br />

(a)<br />

(b)<br />

Abbildung 8: Darstellung <strong>von</strong> Godrays mit Hilfe<br />

mehrere am Betrachter ausgerichteter Schichten<br />

mit Kaustik-Mustern (a), was Lichstrahl-ähnliche<br />

Bilder (b) ergibt. Quelle: Jensen und Golias [JG03]<br />

Um diese nun darzustellen bedarf es einiger<br />

Tricks. Man könnte beispielsweise Methoden aus<br />

dem Volume-rendering verwenden, um die exakte<br />

Verteilung <strong>von</strong> Lichtintensitäten entlang eines<br />

Strahls mit Hilfe der zuvor beschriebenen Berechnung<br />

der Kaustiken zu erzielen. Eine deutlich effizientere<br />

Variante ist allerdings, die Strahlen durch<br />

9


verschiedene sich überlagernde Texturschichten zu<br />

approximieren. Dabei ist dieses Verfahren ähnlich<br />

einer Technik zum effizienten Darstellen <strong>von</strong> Fell.<br />

Hierbei wird beim sogenannten Shell-Rendering<br />

das tatsächliche Fell durch mehrere übereinander<br />

gerenderte transparente Punktmuster angenähert,<br />

welche im richtigen Blickwinkel betrachtet den Eindruck<br />

<strong>von</strong> Haaren vermitteln. Verwendet man nun<br />

für diese Schichten am Betrachter ausgerichtete<br />

Kaustik-Muster, so ergeben sich die in Abbildung 8<br />

gezeigten Resultate. Jensen und Golias [JG03] nutzen<br />

hierbei zum Reduzieren der Artefakte Schichten<br />

in ungleichmäßigen Abständen zum Betrachter.<br />

In der näheren Umgebung werden hierbei mehr<br />

Schichten additiv gerendert als in der Entfernung,<br />

wodurch farbliche Sprünge vermieden werden.<br />

3.3 Skalierbarkeit<br />

Da bei Szenen, in denen große Ozeane vorkommen,<br />

meist auch viel <strong>von</strong> diesen zu sehen ist, spielt<br />

die Skalierbarkeit eine entscheidende Rolle. Während<br />

das Berechnen und Darstellen <strong>von</strong> den hier<br />

betrachteten gitterbasierten Wellen in kleinen Gebieten<br />

durchaus praktikabel ist, sind für riesige Flächen<br />

weiterführende Techniken notwendig, um den<br />

Geschwindigkeitsverlust einzugrenzen.<br />

Ein einfacher erster Ansatz wäre, bei der Wahl<br />

der Wellenlängen für die beispielsweise mit Fourier-<br />

Transformation oder mit Gerstners Gleichungen erzeugten<br />

Wellen so zu wählen, dass die Gesamtperiodenlänge<br />

der Gittergröße entspricht. Dadurch ist<br />

es möglich, mehrfach das selbe Gitter zu wiederholen,<br />

wobei nur ein einziges Mal alle Berechnungen<br />

durchgeführt werden müssen. Wichtig ist hierbei,<br />

die Größe angemessen zu wählen, da das menschliche<br />

Auge Wiederholungen sehr schnell und einfach<br />

wahrnimmt.<br />

Auch bei dieser Methode treten jedoch Probleme<br />

auf. Weit entfernte Ozeanbereiche nehmen deutlich<br />

weniger Platz im Bild ein, weshalb hier viel Potenzial<br />

zum Einsparen <strong>von</strong> Berechnungszyklen ist. Bruneton<br />

et al. [BNH10] nutzen eine sog. Screenspacemethode,<br />

bei der das zugrunde liegende Gitter nicht<br />

in Weltkoordinaten, sondern am Betrachter ausgerichtet<br />

ist. Dadurch schaffen sie es, beliebige Ozeangrößen<br />

bis hin zu Distanzen aus dem Weltall in<br />

Echtzeit darzustellen, was allerdings die Kombination<br />

einiger komplexer Algorithmen und Datenstrukturen<br />

erfordert.<br />

Viele der heutigen Anwendungen in beispielsweise<br />

Computerspielen beziehen ihre Geschwindigkeit<br />

durch massives Einsparen an Geometrie und Verlagern<br />

der Lichtberechnung zum Großteil auf Normalmapping,<br />

was allerdings starke Einschränkungen<br />

in Bezug auf den Detailgrad nach sich zieht.<br />

4 State of the art 2013<br />

Heutige Techniken im Bereich der <strong>Wasser</strong>darstellung<br />

sind schon sehr weit entwickelt und das Verhalten<br />

<strong>von</strong> <strong>Wasser</strong>oberflächen kann sehr glaubhaft<br />

simuliert werden.<br />

(a)<br />

(c)<br />

(b)<br />

Abbildung 9: State of the art Echtzeit-Ozean-<br />

<strong>Simulation</strong> präsentiert auf der GTC <strong>von</strong> NVI-<br />

DIA. Verschiedene Windgeschwindigkeiten zeigen<br />

verschiedene Ozeanerscheinungen. Quelle: GTC-<br />

Keynote 2013<br />

Für die Darstellung <strong>von</strong> Ozeanen hat Nvidia auf<br />

der GPU Technology Conference 2013 mit ”<br />

Wave<br />

Works“ ihre neuesten Entwicklungen präsentiert.<br />

Hauptaugenmerk liegt hier auf der dynamischen<br />

Generierung <strong>von</strong> Schaum und Gischt sowie des realistischen<br />

Verhaltens eines im Ozean schwimmenden<br />

Schiffes. All diese Dinge basieren hier auf einem<br />

Modell, welches in Abhängigkeit der Windstärke<br />

sogar sturmartige Bedingungen in Echtzeit<br />

simuliert und mit Hilfe zahlreicher am Schiff befindlicher<br />

Sensorpunkte auch dessen Verhalten plausibel<br />

imitiert. Sehr viele auf den Wind reagierende<br />

Schaumpartikel, fließende Übergänge zwischen verschiedenen<br />

Wetterbedingungen und anspruchsvolles<br />

Echtzeitshading kann man durchaus als ”<br />

State<br />

10


of the art“ 2013 bezeichnen.<br />

Erstaunlicherweise sind jedoch die visuellen Unterschiede<br />

im Vergleich zu den hier vorgestellten<br />

doch recht einfachen Methoden nicht so gravierend,<br />

wie man nach 20 Jahren weiterer Forschung erwartet<br />

hätte, was für die Korrektheit und den Wert der<br />

behandelten Techniken spricht.<br />

5 Zusammenfassung<br />

In dieser Ausarbeitung wurde ein kleiner Einblick<br />

in die Thematik der <strong>Simulation</strong> <strong>von</strong> Ozeanwasser<br />

gegeben. Sowohl das Erstellen der Wellengeometrie,<br />

welches durch drei verschiedene Ansätze erörtert<br />

wurde, als auch Methoden der Darstellung am<br />

Computer wurden kurz vorgestellt. Gezeigt wurde,<br />

dass auch mit einfach wirkenden Techniken schon<br />

sehr gute Ergebnisse erzielt werden können, weshalb<br />

bis heute diese Methoden eingesetzt werden.<br />

Meiner Meinung nach ist <strong>von</strong> den angeschnittenen<br />

Methoden der Wellenerstellung mit Abstand<br />

die der Fourier-Transformation am nützlichsten. Ihre<br />

Flexibilität und Möglichkeit der Evaluation mit<br />

gemessenen Werten aus der Realität gibt einen sehr<br />

wissenschaftlichen Ansatz zur <strong>Simulation</strong>.<br />

Literatur<br />

[BNH10]<br />

Eric Bruneton, Fabrice Neyret, and Nicolas<br />

Holzschuch. Real-time Realistic<br />

Ocean Lighting using Seamless Transitions<br />

from Geometry to BRDF. Computer<br />

Graphics Forum, 29(2):487–496,<br />

May 2010. EUROGRAPHICS 2010<br />

(full paper) - Session Rendering I.<br />

[CHSW89] Dennis B. Creamer, Frank Henyey, Roy<br />

Schult, and Jon Wright. Improved linear<br />

representation of ocean surface waves.<br />

J. Fluid Mech., 205:135–161, 1989.<br />

[JG03]<br />

L. S. Jensen and R. Golias. Deep Water<br />

Animation and Rendering. 2003.<br />

[Pea86] Darwyn R. Peachey. Modeling waves<br />

and surf. In David C. Evans and Russell<br />

J. Athay, editors, SIGGRAPH, pages<br />

65–74. ACM, 1986.<br />

[Tes01]<br />

Jerry Tessendorf. Simulating ocean water.<br />

2001.<br />

11

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!