Version 1.6 | Datum 06/10/2009
  mediajournal
 
       
 


Nico Schäfer

 

 

Entwicklung eines Wassersimulations-Plugins für Maya

Projektbeschreibung meiner Diplomarbeit
am mathematischen Institut der Universität Valencia, Spanien



Zusammenfassung: Ich berichte in diesem Artikel über die Planungen für meine Diplomarbeit. Das Thema ist die Programmierung eines realistischen Wassersimulators als Plugin für die 3D-Software Maya. Nach einer Einleitung und der Geschichte zum Entstehen dieser Idee beschreibe ich das Simulationsverfahren, das ich verwenden werde. Dabei gehe ich sowohl auf die Wasseroberfläche selbst als auch auf das Rendering derselben ein.

Projektbeschreibung

Einleitung - worum geht es?

Ich habe vor, als Diplomarbeit einen Wassersimulator zu programmieren nach der Publikation "Animation and Rendering of Complex Water Surfaces" [EMF02] von Douglas Enright, Stephen Marschner und Ronald Fedkiw. Diese war ein Paper auf der SIGGRAPH 2002, der größten Computergrafik-Konferenz der Welt. Es baut auf der Arbeit "Practical Animation of Liquids" [FF01] von Nick Foster und Ronald Fedkiw auf. Nick Foster arbeitete damals für die Firma PDI / DreamWorks und entwickelte zusammen mit Ronald Fedkiw von der Stanford University die Wa2?ssersimulation für den bekannten komplett computeranimierten 3D-Trickfilm Shrek von PDI. Die Simulation wird in diesem Film ausgiebig verwendet, u.a. zur Erzeugung von Wasser, Bier, Schlamm usw. Die Publikation von Enright ist eine verbesserte Version der Version von Foster. Enrights Paper bildet die Grundlage für meine Diplomarbeit.
Das Programm wird in C++ entwickelt.

Vorgeschichte - wie kam es dazu?

Ich habe vor etwa einem Jahr, während meinem Praktikum am Max-Planck-Institut für Informatik in Saarbrücken, zum ersten Mal die Publikation von Enright gesehen und war sofort fasziniert von den darin enthaltenen Bildern (s.o., dabei handelt es sich nicht um Fotos; diese Bilder sind komplett am Computer generiert) und dem Realismus dieser Simulation. Schon damals habe ich mir vorgenommen, ein solches Programm einmal selbst zu implementieren. Als ich mich mit Herrn Eberhardt, meinem die Diplomarbeit betreuenden Professor, unterhielt und wir nach einem Thema suchten, schlug ich ihm dies vor, und er war sofort begeistert von der Idee.
Ich werde diese Arbeit als Plugin (Zusatzprogramm) für Maya, eines der am weitesten verbreiteten 3D-Software-Programme, implementieren, damit sie hinterher eventuell kommerziell eingesetzt werden kann für Special Effects in Filmen, Computeranimationen usw. Die aktuelle Entwicklung in diesen Bereichen zeigt, dass ein immer größerer Bedarf nach solchen Produkten entsteht.
Für Maya existiert bereits ein Plugin zur Wassersimulation namens Liquid Effects, das ab Maya 4.5 im Programm direkt enthalten ist. Gegen Ende meiner Diplomarbeit werde ich Tests durchführen und Liquid Effects mit meinem Simulator vergleichen, um die Qualität der beiden Pakete zu bestimmen.

Die Wassersimulation - wie funktioniert's?

Mein Programm wird in der Lage sein, Wasser in beliebig gef2?ormten Gefäßen zu simulieren, d.h. das Wasser kann sich in einem quaderförmigen Behälter befinden, in einem Glas, es ist möglich, Meerwasser zu simulieren usw. Außerdem kann man Kollisionen mit Gegenständen realitätsgetreu abbilden. Wirft man z.B. ein Objekt in das vorhandene Wasservolumen, berechnet das Programm völlig automatisch und physikalisch korrekt die dabei entstehenden Wellen, Spritzer, Brechungen und anderen Phänomene.
Das Wasser wird durch zwei Gitterstrukturen repräsentiert: Das erste, feste Gitter teilt das gesamte Wasservolumen in einzelne würfelförmige Unterzellen ein. Das adaptive zweite Gitter besteht aus Partikeln, die zu Beginn in gleicher Zahl auf die Zellen verteilt werden (meist 64 Stück). Die Wasseroberfläche selbst ist eine implizite Oberfläche, d.h. jedes Partikel erhält ein Vorzeichen: Partikel mit positivem Vorzeichen repräsentieren Luft, Partikel mit negativem Vorzeichen repräsentieren Wasser und Partikel, die als Wert 0 besitzen, liegen genau auf der Wasseroberfläche.

Zur Simulation der Wasserbewegung benötigt man folgende Dinge:

1. Die Form der impliziten Oberfläche in jedem Zeitpunkt wird mit einem sog. Vorwärts-Euler-Integrationsverfahren nach der Gleichung

Φt + u * ∇ Φ = 0

bestimmt. Hierbei ist Φ die implizite Oberfläche, Φt ist die partielle Ableitung von Φ nach der Zeit t, u ist das Geschwindigkeitsfeld aller Partikel und ∇ ist der Gradientenoperator.

2. Die Partikel müssen die Gleichung

dxp / dt = up

erfüllen, d.h. die Ableitung der Position aller Partikel nach der Zeit muss der Geschwindigkeit entsprechen.
Die Bewegung der H2O-Oberfläche ergibt sich weiter durch Berechnung der Bewegungen (Geschwindigkeiten) der individuellen freien Wasserpartikel. Das Wasser wird hier als kompressionslose Flüssigkei2?t unter Idealisierung der Navier-Stokes-Gleichung modelliert.

Fehlerkorrektur

Nach jedem berechneten Simulationsschritt wird außerdem eine Fehlerkorrektur der Wasseroberfläche (Isofläche) durchgeführt, um eventuell auftretende Ungenauigkeiten zu vermeiden. Die oben beschriebenen beweglichen Partikel sind dazu da, um solche Ungenauigkeiten aufzuspüren. Man verwendet die freien Partikel, um zu prüfen, ob sie auf der "richtigen Seite" liegen (s.o. + für Luft, - für Wasser). Ist dies nicht der Fall, wird die Größe der Abweichung bestimmt und die Position des Partikels und damit auch die Form der Wasseroberfläche entsprechend korrigiert. Solche Fehler treten insbesondere in Regionen mit "scharfen" Kanten (wie z.B. Spritzern) des Wassers auf.
Zusätzlich wird nach jeweils 20 berechneten Frames (Bildern) eine neue Verteilung der Partikel bestimmt, sodass sich wieder in jeder festen Gitterzelle genau 64 Partikel befinden. Dies ist nötig, weil durch die Simulation des Wassers die Partikel ihre Positionen verändern und sich deshalb auch in andere Gridzellen bewegen können. So hat man jedoch immer ein relativ gleichmäßiges Partikelnetz.

Rendering

Die Darstellung der simulierten Wasseroberfläche geschieht mit Hilfe eines sogenannten Marching-Cube-Algorithmus. Dieser durchläuft am Ende jedes Simulationsschrittes alle Partikel, prüft ihre Stellungen zueinander und erzeugt daraus eine zusammenhängende polygonale Oberfläche, die dann dem Renderer von Maya zur realitätsnahen Darstellung übergeben wird.
Hier sieht man den Vorteil der Umsetzung des Projekts als Plugin, denn dadurch kann man den Renderer, mit dem man die Animationen erstellt, selbst wählen. Maya bietet bereits einen internen Renderer, dessen Qualität in älteren Versionen aber zu wünschen übrig ließ. Die neueren Versionen v2?on Maya enthalten Mental Ray, einen Renderer, der auf dem Prinzip des Photon Tracing basiert und dadurch sehr realistische Bilder liefert.
Beim Photon Tracing werden nicht Strahlen in die Szene geschossen wie beim altbekannten Raytracing, sondern von allen Lichtquellen in der Szene werden per Zufall die Richtung bestimmt und ob ein Photon beim Auftreffen auf einen Gegenstand reflektiert, gebrochen oder absorbiert wird. Diese Methode bildet das wirkliche Geschehen sehr gut nach, was der Grund für den hohen Realitätsgrad der mit diesem Verfahren berechneten Bilder ist.


Literaturliste

[EMF02]: Douglas Enright, Stephen Marschner, Ronald Fedkiw; Animation and Rendering of Complex Water Surfaces; in Proceedings of SIGGRAPH 2002, ACM Press / ACM SIGGRAPH, 736-743
[FF01]: Nick Foster (PDI / DreamWorks), Ronald Fedkiw (Stanford University); Practical Animation of Liquids; in Proceedings of SIGGRAPH 2001, ACM Press / ACM SIGGRAPH, 23-30


Liste externer Links

http://graphics.stanford.edu/~fedkiw/papers/stanford2002-03.pdf
http://graphics.stanford.edu/~fedkiw/papers/stanford2001-02.pdf
http://movies.uip.de/shrek/home.html
http://www.pdi.com/