Simulation von Wasser - stinfwww
Simulation von Wasser - stinfwww
Simulation von Wasser - stinfwww
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