Paper

Transcrição

Paper
Abstract
Diese Arbeit soll einen Überblick über eine Methode der Fluidsimulation und die Animation von Sand als Fluid
im Speziellen geben. Mittels der Methoden die im Paper „Animating Sand as a Fluid“, von Yongning Zhu,
genutzt wurden, wird dafür zunächst ein Algorithmus zur Fluidsimulation anhand von Partikeln mit Gitter als
Hilfsstruktur vorgestellt. Danach wird gezeigt mit welchen Erweiterungen man diese Methode der
Fluidsimulation auch zur Animation von Sand als Fluid nutzen kann. Abschließend wird noch eine Methode zur
Oberflächenrekonstruktion mittels Fluidpartikeln beschrieben.
1. Einleitung
Es gibt verschiedene Ansätze zur Animation von Sand. Ein Ansatz ist es jedes Sandkorn als einzelnen
Starrkörper zu simulieren, wie zum Beispiel in [5]. Dieser Ansatz ist gut geeignet solange man eine geringe
Anzahl an Sandkörnern betrachten möchte. Um auch eine größere Menge Sand animieren zu können nutzt
man andere Ansätze die nicht mehr die Sandkörner einzeln, sondern den gesamten Sand als Kontinuum
betrachten und dieses Kontinuum anhand von Partikel- oder Gitter-basierten Methoden simulieren.
Einen solchen Ansatz lieferte Yongning Zhu in seinem Paper „Animating Sand as a Fluid“, in dem der Sand als
Kontinuum anhand von Partikeln, mit Hilfsgitter für Berechnungen, animiert wird. In dieser Arbeit soll nun ein
Überblick über die genutzten Methoden in diesem Paper geboten werden. Kapitel 2 beschreibt hierfür die
genutze Fluidsimulation, Kapitel 3 die nötigen Erweiterungen um die Fluidsimulation auch zur Animation von
Sand verwenden zu können und Kapitel 4 zeigt eine Möglichkeit zur Oberflächenrekonstruktion anhand der
fluid-definierenden Partikel.
2. Fluidsimulation
Zur Durchführung der Fluidsimulation wurden bestehende Modelle wie die Particle-in-Cell Methode (PIC) [4]
und die Fluid-Implicit-Particle (FLIP) [1] Methode für den Fall einer nicht komprimierbaren Fluidströmung
adaptiert. Beide Methoden nutzen bereits eine Mischung aus Partikeln und Gittern um ein Fluid zu simulieren.
In der hier vorgestellten Methode dient das Gitter als reine Hilfsstruktur für die Fluidsimulation auf der die
Werte der Partikel aktualisiert werden, insbesondere hat man dadurch den Vorteil das man nicht in jedem
Zeitschritt das selbe Gitter benötigt, sondern dieses an die aktuellen Positionen der Fluidpartikel anpassen kann
[6].
Zur Berechnung der Geschwindigkeitsänderungen wird folgende, an inkompressible Strömungen angepasste,
Navier-Stokes-Gleichung genutzt:
Diese Gleichung lässt sich in vier Teile zerlegen, welche einzeln berechnet werden und danach addiert werden
können:


: Die Advektion beschreibt wie ein Fluid bestimmte Werte oder Objekte auf dem
Geschwindigkeitsfeld mit transportiert. (z.B. behalten die Partikel ihre Geschwindigkeit, wenn sie
bewegt werden)
: Der Einfluss von externen Kräften die auf das Volumen wirken. (z.b. Gravitation)

: Die Diffusion bewirkt eine Glättung des Vektorfelds, deren Stärke von der Viskosität des Fluids
abhängt.

: stellt sicher, dass das Geschwindigkeitsfeld divergenzfrei bleibt – also die Kontinuitätsgleichung
für inkompressible Fluide erfüllt ist (
. Dies sichert die Inkompressibilität des Fluids.
Dabei ist eine Geschwindigkeitskomponente des Geschwindigkeitsvektorfelds,
die Dichte und der Druck.
die Viskosität des Fluids,
Zur Durchführung der Fluidsimulation kann man den folgenden Algorithmus nutzen (in Anlehung an [6]):
 Initialisierung der Partikelpositionen und Partikelgeschwindigkeiten
 Für jeden Zeitschritt:
o Übertragung der Partikelwerte auf das Gitter
o Berechnung der neuen Werte auf dem Gitter
o Übertragung der aktualisierten Werte auf die Partikel
o Partikelpositionen aktualisieren
Abbildung 1 veranschaulicht diesen Algorithmus. Im Folgenden werden nun die einzelnen Schritte kurz
beschrieben.
(a)
(b)
(c)
(d)
(e)
Abb. 1 [7]: Algorithmus zur Fluidsimulation. (a) Initialisierung der Partikel, (b) Übertragung auf Gitterpunkte, (c) Update der Gitterwerte, (d)
Übertragung auf Partikel, (e) Bewegen der Partikel (Geschwindigkeiten werden mit transportiert).
2.1 Initialisierung der Partikel
Für jede Gitterzelle werden acht Partikel erstellt, die randomly jittered in ihren Teilzellen verteilt werden – das
bedeutet das die Partikel in ihrer Teilzelle zufällig verteilt sind. Als Hilfe für die spätere
Oberflächenrekonstruktion (siehe Kapitel 4) legt man zusätzlich fest, dass Partikel in der Nähe der
Fluidoberfläche exakt eine halbe Zelle von der Oberfläche entfernt sein müssen.
2.2 Übertragung der Partikelwerte auf das Gitter und Aktualisierung der Werte
Anhand von trilinearer Interpolation werden die Partikelgeschwindigkeiten auf die zugehörigen Gitterpunkte
übertragen. Danach werden alle Gitterzellen markiert, welche zumindest ein Partikel beinhalten. Im
unmarkierten Bereich (Zellen welche kein Partikel enthalten) wird ein Abstandsfeld konstruiert, welches
genutzt wird um das Geschwindigkeitsfeld außerhalb des Fluids anhand einer partiellen Differentialgleichung
auszudehnen [7].
Desweiteren wird der Einfluss der Gravitation auf die Geschwindigkeitskomponenten zu den Gitterwerten
addiert und Randbedingungen sowie Inkompressibilität erzwungen (ähnlich wie in [3]). Abschließend wird das
aktualisierte Geschwindigkeitsfeld erneut ausgedehnt.
2.3 Übertragung der aktualiserten Werte auf die Partikel
Die auf dem Gitter aktualisierten Geschwindigkeitswerte werden nun wieder auf die Partikel übertragen. Je
nachdem ob man ein viskoses oder nicht-viskoses Fluid simulieren möchte nutzt man hierfür entweder eine
trilineare Interpolation der Geschwindigkeit (PIC) oder eine trilineare Interpolation der
Geschwindigkeitsänderung (FLIP).
Für viskose Strömungen (z.B. bei Sand) werden nur die aktualisierten Geschwindigkeiten, nach den
Berechnungen auf dem Gitter, für die Interpolation genutzt. Für nicht-viskose Strömungen (z.B. bei Wasser)
werden nach dem Übertragen der Partikelwerte auf die Gitterpunkte die Anfangsgeschwindigkeiten an den
Gitterpunkten gespeichert, die Berechnungen durchgeführt und schließlich die Geschwindigkeitsänderung
berechnet indem man die Anfangsgeschwindigkeit von der aktualisierten Geschwindigkeit subtrahiert. Die
Werte für die Geschwindigkeitsänderung werden dann interpoliert um die aktuellen Werte der Partikel zu
bestimmen.
Diese Unterscheidung bringt den Vorteil, dass bei nicht-viskosen Strömungen kleinste Geschwindigkeiten
erhalten bleiben, während man sich bei viskosen Strömungen die numerische Zähigkeit von PIC zu Nutze macht
um die kleinsten Geschwindigkeiten zu glätten [6] und somit ein zähflüssigeres Verhalten des Fluids erreicht.
2.4 Aktualisierung der Partikelpositionen
Anhand des berechneten Geschwindigkeitsfelds kann man nun die Partikel bewegen. [6] nutzen hierfür einen
simplen RK2 ODE solver, der die Partikel in fünf Zwischenschritten pro Zeitschritt bewegt. Jeder Zwischenschritt
ist dabei durch eine CFL-Bedingung beschränkt, die bewirkt, dass sich jedes Partikel pro Zwischenschritt nicht
mehr als eine Gitterzelle weit bewegen darf. Die Partikelgeschwindigkeiten werden auf dem Partikel mit
transportiert.
Desweiteren werden Partikel die feste Oberflächen durchdringen erkannt und entlang der Normalen der
Oberfläche wieder aus der Oberfläche bewegt um Artefakte (Partikel die in Wänden feststecken) zu vermeiden.
Durch genauere Berechnung des Drucks und bessere Randbedingungen können solche Artefakte vermieden
werden [7].
3. Animation von Sand als Fluid
Nun soll gezeigt werden wie man die vorgestellte Fluidsimulation erweitern kann um auch Sand als Fluid zu
animieren. Die Standardvorgehensweise um das Verhalten von Sand oder anderen köhasionslosen Materialen
zu beschreiben ist es, zunächst eine Definition für die Materialverformung zu bestimmen und danach eine
Elastizitätsbeziehung festzulegen und einen Finite Elemente solver zu nutzen um den Sand zu animieren.
Um sich aber die zusätzliche Komplexität der Finiten Elemente sparen zu können, werden für den Ansatz aus
[6] nach der Definition der Materialverformung vereinfachende Annahmen getroffen um den in Kapitel 2
vorgestellten Ansatz zur Fluidsimulation auch für die Sandanimation nutzen zu können.
3.1 Definition der Materialverformung
Zur Definition der Materialverformung wird das Mohr-Coulomb-Gesetz für statische Reibung genutzt:
√
Hierbei ist die Scherspannung, welche die Partikel aneinander gleiten lässt, der Reibungswert des
Materials und
der Druck der die Partikel aneinander drückt. Die Ungleichung besagt, dass die
Scherspannung solange durch den Druck ausgeglichen wird, so lange der Druck proportional stark genug ist.
Dies bedeutet also solang der Druck stark genug ist findet keine Materialverformung statt (der Sand darf nicht
fließen), wenn die Scherspannung aber zu gross wird so darf der Sand fließen und man wendet dafür eine
einfache Flussregel an: der Sand darf sich in Richtung der Scherspannung ausbreiten.
Da kleine numerische Fehler bei der Berechnung zu einem Gleiten im Sand, und somit zu einem instabilen
Verhalten des Sands im Ruhezustand, führen können, erweitert man die Ungleichung noch um einen
Kohäsionskoeffizienten c:
√
Dieser Koeffizient bewirkt, dass eine höhere Scherspannung benötigt wird bevor der Sand fließen darf. Dadurch
erhält man ein stabiles Verhalten des Sands im Ruhezustand, hat aber gleichzeitig keinen sichtbaren Effekt auf
das Verhalten des Sands wenn der Sand in Bewegung sein sollte erzeugt. Für kohäsionsfreie Materialien wie
Sand erzeugt dieses Vorgehen plausible, stabile Ergebnisse, für Materialien mit wirklicher Kohäsion ist das
Vorgehen hingegen zu stabil [7].
3.2 Vereinfachende Annahmen zur Modellierung des Sands
Als nächsten Schritt werden vereinfachende Annahmen für das Sandmodell getroffen. Eine erste Vereinfachung
ist, dass man die kaum sichtbare elastische Verformung des Sands im Ruhezustand sowie die minimalen
Volumenänderungen zu Beginn beziehungsweise Ende des Flusses nicht beachtet [6].
Desweiteren nimmt man auch an, dass der Druck um das gesamte Geschwindigkeitsfeld inkompressibel zu
machen ähnlich dem richtigen Druck im Sand ist, was sicherlich inkorrekt ist, aber bis auf wenige Fälle plausible
Resultate liefert [6]. Beispielsweise würde eine Sanduhr die mit dieser Annahme simuliert wird ein falsches
Verhalten zeigen, da durch die Annahme der Druck im Sand je höher ist desto höher der Sandhaufen ist, was
dazu führt das der Sand in der Sanduhr schneller fließt je mehr Sand im oberen Teil ist.
Mittels dieser Annahmen kann man den Bereich in dem sich der Sand befindet aufteilen in Zellen mit starrer
Bewegung und Zellen mit inkompressibler Scherströmung. Um diese Aufteilung durchzuführen wird eine
Fließflächenbedingung aufgestellt. Hierfür berechnet man den Formänderungsgeschwindigkeitstensor der
einzelnen Zellen und mit Hilfe dessen die Reibungsspannung für den Sand in Bewegung und den minimal
benötigten Druck für starre Zellen. Dann vergleicht man den minimal benötigten Druck mit der maximalen
Reibungsspannung und legt die Zellen je nach Ergebnis als starr oder fließend fest [7].
Als weitere Vereinfachung sucht man als nächstes Gruppen von starren Zellen (sogenannte starre Regionen)
und verfestigt deren Geschwindigkeiten. Zur Verfestigung der Geschwindigkeit wird das Geschwindigkeitsfeld
jeder einzelnen starren Region in den Raum einer entsprechenden Starrkörperbewegung projiziert.
Starrkörperbewegungen sind definiert durch die lineare Geschwindigkeit am Massenmittelpunkt und der
Winkelgeschwindigkeit des Starrkörpers, welche man anhand der gegebenen Geschwindigkeiten und eines
Drehimpulserhaltungssatzes einfach berechnen kann (siehe [7]). Durch die Verfestigung erhält man eine
einheitliche Geschwindigkeit für die jeweiligen starren Regionen.
3.3 Reibungsrandbegingungen
Somit hat man das Verhalten der Sandpartikel untereinander festgelegt. Um auch die Interaktion zwischen den
Sandpartikeln und anderen Objekten beschreiben zu können, legt man Reibungsrandbedingungen fest. Hierfür
wird die Reibungsformel von Bridson et al. [2] genutzt, was eine wichtige Erweiterung für die Fluidsimulation
ist, da die Randbedingungen in der Animationsliteratur bisher entweder keinerlei Gleiten (Sand klebt auch an
vertikalen Wänden) oder dauerhaftes Gleiten erlaubt haben [6] (siehe Abbildung 2).
Abbildung 2 [7]: Animation des Sandhasen ohne Reibungsformel.
Die Reibungsformel unterscheidet wie folgt zwischen statischer und kinetischer Reibung:
 Bei statischer Reibung (Sand im Ruhezustand): Die Geschwindigkeit in Tangentialrichtung wird Null
gesetzt. Dies bewirkt das der Sand, wenn er nicht in Bewegung ist, sich auch nicht zu bewegen beginnt
( keinerlei Gleiten).
 Bei kinetischer Reibung (Sand ist in Bewegung): Die Geschwindigkeit in Tangentialrichtung wird
proportional reduziert. Dies bewirkt das der Sand, wenn er in Bewegung ist, abgebremst wird und
schließlich gestoppt wird.
Abbildung 3 veranschaulicht die Verbesserung welche die Nutzung der Reibungsformel bringt: anstatt das sich
der Sand wie in Abbildung 2 bis zu den Rändern ausbreiten kann, werden die Sandpartikel nun abgebremst und
man erreicht damit ein plausibleres Verhalten des Sands.
Abbildung 3 [6]: Animation des Sandhasen mit Reibungsformel.
3.4 Erweiterter Algorithmus zur Animation des Sands als Fluid
Man kann den in Kapitel 2 vorgestellten Algorithmus zur Fluidsimulation nun wie folgt erweitern, um Sand als
Fluid zu animieren [6]:
Für jeden Zeitschritt:
 Ausführung der gewöhnlichen Schritte der Fluidsimulation (Advektion, Gravitation, Randbedingungen,
Druck, Inkompressibilität)
 Berechnung des Formänderungsgeschwindigkeitstensors (strain rate tensor) für alle Zellen anhand von
zentralen Differenzen
 Markierung der Zellen als starre Zelle oder Zelle mit inkompressibler Scherströmung
 Finden von starren Regionen und Verfestigung ihrer Geschwindigkeiten
 Aktualisierung verbleibender Geschwindigkeitswerte mit der Reibunsspannung
4. Oberflächenrekunstruktion anhand Abstandsfeld von Partikeln
Durch die vorgestellten Methoden hat man nun die Möglichkeit Fluide und auch Sand zu simulieren. Diese
Simulationen liefern die Positionen der Partikel welche das Fluid definieren. Um diese Informationen auch für
hochqualitatives Rendering nutzen zu können, wird eine Methode zur Umhüllung der Partikel benötigt um eine
Oberfläche definieren zu können.
Eine Möglichkeit dies zu erreichen ist, indem man versucht eine exakte Rekonstruktion des
vorzeichenbehafteten Abstandsfelds der Partikel zu generieren [6]. Hierfür geht man wie folgt vor (für jeden
Gitterpunkt):
 Finde naheliegende Partikel in festgelegtem Radius um den Gitterpunkt ( )
 Bilde gewichtetes Mittel der Positionen ( ̅ ) und Radien ̅) aller naheliegender Partikel (Gewichtung
findet anhand einer Kernelfunktion und dem Abstand des Gitterpunkts zu den jeweiligen
benachbarten Punkten im Verhältnis zum Radius statt.)
 Berechne Abstand
des Gitterpunkts zu naheligenden Partikeln, anhand folgender Formel:
|
̅|
̅
Das so konstruierte vorzeichenbehaftete Abstandsfeld kann dazu genutzt werden eine Oberfläche zu
bestimmen, indem man nach Paaren von benachbarten Gitterpunkten sucht die unterschiedliche Vorzeichen
für die Abstandswerte haben und somit zwischen diesen Punkten ein Punkt mit Abstand
sein muss.
Gängige Verfahren um eine solche Oberfläche (Isosurface) zu bestimmen sind der Marching Cubes Algorithmus
oder das Isosurface Ray Casting.
Das größte Problem bei dieser Vorgehensweise ist in konkaven Regionen zu finden. Hier kann es passieren das
der gemittelte Wert für die Position der benachbarten Partikel eines Gitterpunkts irrtümlich außerhalb der
eigentlichen Fluidoberfläche liegt, was zu störenden Artefakten auf der Oberfläche führt. Diesem Problem kann
man entgegenwirken in dem man das Abstandsfeld auf einem höher aufgelösten Gitter abtastet und dann
einen Glättungsdurchgang für die Oberfläche ausführt [6].
Ein weiteres Problem stellen die Radien dar, die für eine exakte Rekonstruktion des Abstandsfeldes genaue
Abschätzungen des Abstands der Partikel zur Fluidoberfläche sein müssten. Da passende Methoden fehlen die
solche Abschätzungen gleichzeitg schnell und präzise genug berechnen können, setzt man daher die Radien auf
einen festen Wert (den konstanten durchschnittlichen Partikelabstand) und legt einen Initialabstand der
Partikel nahe der Fluidoberfläche fest [7].
Der grosse Vorteil dieser Rekonstruktionsmethode sind die geringen Kosten pro Frame und die Unabhängigkeit
der Frames, welche es ermöglicht die Berechnungen einfach auf mehreren CPUs oder Maschinen parallel
durchzuführen [6].
5. Konklusion
Somit haben wir gesehen wie man eine Fluidsimulation effizient und durch die verschiedenen Ansätze für
(nicht-)viskose Strömungen auch flexibel durchführen kann. Desweiteren wurde gezeigt welche Erweiterungen
genutzt werden können um diese Fluidsimulation auch zur Animation von Sand einsetzen zu können und eine
Methode um anhand der Fluidpartikel ein Abstandsfeld zu schaffen, welches zur Oberflächenrekonstruktion
genutzt werden kann.
Quellen
[1] Brackbill, J. U., & Ruppel, H. M. (1986). FLIP: A method for adaptively zoned, particle-in-cell calculations of fluid flows in two dimensions.
Journal of Computational Physics, 65(2), 314-343.
[2] Bridson, R., Fedkiw, R., & Anderson, J. (2002, July). Robust treatment of collisions, contact and friction for cloth animation. In ACM
Transactions on Graphics (ToG) (Vol. 21, No. 3, pp. 594-603). ACM.
[3] Enright, D., Marschner, S., & Fedkiw, R. (2002). Animation and rendering of complex water surfaces. ACM Transactions on Graphics
(TOG), 21(3), 736-744.
[4] Harlow, F. H. (1962). The particle-in-cell method for numerical solution of problems in fluid dynamics (No. LADC-5288). Los Alamos
Scientific Lab., N. Mex..
[5] Milenkovic, V. J. (1996, August). Position-based physics: simulating the motion of many highly interacting spheres and polyhedra. In
Proceedings of the 23rd annual conference on Computer graphics and interactive techniques (pp. 129-136). ACM.
[6] Zhu, Y., & Bridson, R. (2005, July). Animating sand as a fluid. In ACM Transactions on Graphics (TOG) (Vol. 24, No. 3, pp. 965-972). ACM.
[7] Zhu, Y. (2005). Animating Sand as a Fluid (Doctoral dissertation, The University of British Columbia).