Blender hat seit Version 2.61 eine Ozean-Simulation als Modifier, die auf dem Houdini Ocean Toolkit basiert. Die Finanzierung der Integration gelang, wie so vieles in letzter Zeit, über eine Crowdfunding-Kampagne. Digital Production stellt die wichtigsten Funktionen der Simulation vor und zeigt einige Anwendungsbeispiele abseits der Ozeane.
Open Source-Fallstudie
Das Houdini Ocean Toolkit (HOT) ist ein Open Source-Projekt, das inzwischen auch für 3D Studio Max sowie Blender portiert wurde. Das HOT erlaubt die realistische Simulation der Wasseroberfläche eines tiefen Ozeans. Sprich Wellenbrecher und andere Phänomene, die am abflachenden Wasser an der Küste auftreten, können damit nicht simuliert werden, wohl aber die Wellenbewegungen auf dem offenen Meer.
Die Portierung des HOT zu Blender ist ein Paradebeispiel, wie Studios ihre individuellen Bedürfnisse durch Beteiligung an der Entwicklung von Blender befriedigen können. Ursprünglich wurde der Code des HOT von Promotion Studio für den Kurzfilm “Lighthouse” nach Blender 2.49 portiert. Dies geschah über einen freiberuflichen Entwickler, der durch einen festangestellten unterstützt wurde.
Nach Fertigstellung des Kurzfilms wurde der Code für die Portierung veröffentlicht und einige Nutzer kompilierten spezielle Blender-Versionen, die die damalige Ocean-Simulation enthielten. Doch in den Hauptentwicklungszweig konnte sie aus verschiedenen Gründen nicht Einzug halten.
Als die Version 2.5x von Blender veröffentlicht wurde, entschloss sich ein Blender-Nutzer, der nicht mit dem Studio in Verbindung steht, eine Portierung auf die neue Version per Crowdfunding zu finanzieren. Dabei sollte auch das Design der Integration so abgeändert werden, dass die Simulation auch im Hauptentwicklungszweig landen könnte. Die Kampagne war so erfolgreich, dass auch noch Geld für die Erweiterung der Funktionalität übrig war.
Die Früchte der Arbeit
Seit Version 2.61 ist die Ocean-Simulation nun in Blender als Modifier integriert. Das bedeutet, sie kann zum Verformen eines bestehenden Meshes eingesetzt werden. Als zusätzliche Option wird angeboten, ein vorhandenes Mesh komplett durch einen simulierten Ozean zu ersetzen. Die Änderungen sind dabei nicht-destruktiv respektive reversibel und können mit anderen Modifiern bzw. Simulationen wie Dynamic Paint kombiniert werden.
Einen einfachen Ozean können Sie erstellen, indem Sie einem beliebigen Mesh einen 'Ocean'-Modifier hinzufügen. Dieser ist von vornherein auf 'Generate' eingestellt. Das bedeutet, dass das Mesh komplett durch den Ozean ersetzt wird.
Eine Änderung auf 'Displace' lässt die Simulation auf die bestehenden Vertices des Meshes einwirken. Diese Option ist dann praktisch, wenn der Ozean nicht auf eine flache Fläche, sondern beispielsweise einen Text angewandt werden soll, oder wenn man die Anzahl der Faces aus Performance-Gründen genau kontrollieren will.
Eine weitere wichtige Option ist “Time”. Diese gibt an, an welchem Zeitpunkt (in Sekunden) man sich in der Simulation gerade befindet. Wenn man diesen Parameter animiert, animiert man also auch die Simulation und erhält einen wogenden Ozean.
Die Wellen der Simulation schließen in X- und Y-Richtung an, sind also 'seamless'. Dies lässt sich entweder ausnutzen, wenn man aus der Simulation eine Displacement-Map bäckt (dazu später mehr) oder indem man die Optionen “Repeat X/Y” nutzt. Dabei werden automatisch Kopien erzeugt, die direkt an das Mesh anschließen und damit für zusätzliche Ozean-Oberfläche ohne Extraberechnungen sorgen.
Weiterhin kann Schaum berechnet werden, wie er an den Spitzen von Wellen entsteht. Dieser wird in den Vertex-Farben des Meshes gespeichert. Hierbei muss beachtet werden, dass ein Wert von 0 für die normale Menge an Schaum steht und negative Werte für weniger, positive Werte für mehr Schaum sorgen.
Auch in anderen Programmen einsetzbar
Die Displacement-Map, die Schaum-Textur, und auf Wunsch auch die Normalen, können “gebacken” werden. Das bedeutet, dass sie als Bildsequenz im OpenEXR-Format auf die Festplatte ausgegeben werden. Dadurch können die Ergebnisse der Ozean-Simulation auch in anderen Programmen eingelesen werden.
Für den Blender-internen Render wird zudem automatisch eine Ocean-Textur erstellt, die für das Shading genutzt werden kann. Der Cycles-Render kann auf diese Texturen noch nicht zugreifen, für den normalen Anwendungsfall dürfte aber nur die Schaum-Textur notwendig sein, und diese ist, wie schon erwähnt, in den Vertex-Farben gespeichert, die über die “Attribute”-Node auch von Cycles eingelesen werden können.
Werden die Wogen geglättet?
Die restlichen Einstellungsmöglichkeiten der Ozean-Simulation beziehen sich auf die zugrundeliegende Physik respektive das Verhalten der Wellen und sollen im Folgenden vorgestellt werden.
Mit der Option "Resolution" lässt sich die Auflösung bzw. Genauigkeit der Simulation beeinflussen. Wenn die Simulation unter "Generate" betrieben wird, wird dabei auch automatisch die Anzahl der Vertices angepasst, sprich, die Auflösung der Wellen wird mit höheren Werten immer feiner. Höhere Werte bedeuten aber auch eine längere Simulationszeit. Man beachte, dass dabei die Form und Größe der Wellen verändert wird. Es ist also nicht möglich, eine Simulation zuerst in niedriger Auflösung zu erstellen und, wenn das Aussehen passt, über eine Erhöhung der Auflösung lediglich Details hinzuzufügen.
Die Einstellung "Spatial Size" hingegen ändert die Größe der Simulation. Im Falle von "Generate" wird dabei automatisch das Mesh angepasst. Die Einheit sind hier Blender-Units. Dabei sei zu beachten, dass sich andere Einstellungen dann relativ zur Größe stärker auswirken. Für einen Swimmingpool benötigt man daher andere Einstellungen als für den Atlantischen Ozean.
Über "Choppiness" lässt sich die Schärfe der Wellenspitzen steuern. Intern ändert dieser Wert die Verzerrung in X- und Y-Richtung, was dazu führt, dass bei zu hohen Werten Artefakte von sich überlappenden Flächen auftreten können.
"Scale" hingegen ändert die Stärke in alle Richtungen, was dazu führt, dass die Wellen größer werden, aber wieder die Gefahr von Artefakten mitbringt.
"Smallest Wave" ist eine weitere Möglichkeit, die Feinheit der Simulation zu steuern. Mit diesem Wert wird eingestellt, wie klein die Wellen werden dürfen. Beim Setzen von besonders großen Werten lässt sich die Simulation, die ja seamless ist, auch für wallende, abstrakte Hintergründe einsetzen.
"Wind Velocity" ist ein weiterer Wert, der mit Vorsicht zu genießen ist. Grundsätzlich wird über diesen die Geschwindigkeit des Windes reguliert, der über die Wasseroberfläche weht und dabei für Wellen-Turbulenzen sorgt. Dieser ändert aber nicht die Größe der Wellen, sondern nur ihre Bewegung. Sprich, wer einen Ozean-Sturm simulieren will, sollte neben dem Wert für die Windgeschwindigkeit auch die Größe der Wellen erhöhen, während für eine fast windstille Oberfläche der Wert entsprechend gesenkt werden sollte, sonst drohen Artefakte. Ein weiteres Beispiel, wie die einzelnen Einstellungen der Simulation untereinander interagieren.
"Alignment" regelt, wie stark die Wellen von der Richtung des Windes beeinflusst werden. Die Richtung selbst kann dabei über "Direction" gesteuert werden und der "Damping" regelt, wie stark Wellen abgedämpft werden, die sich entgegen der Windrichtung bewegen.
Fazit
Mit der Ozean-Simulation hat in Blender ein weiteres praktisches Werkzeug Einzug gehalten, mit den Ecken und Kanten, die man auch von diversen anderen Simulationen her kennt. Dank der Möglichkeit, die Ergebnisse zu exportieren, kann es auch genutzt werden um, einen Ozean für die Weiterbearbeitung in anderen Programmen zu erstellen, für die das HOT noch nicht portiert wurde. Wie beispielsweise Cinema4D.
Dieser Artikel erschien im Magazin Digital Production, Ausgabe 1301. Herunterladen können Sie ihn hier als PDF. Darüber hinaus gibt es noch ein Interview mit mit dem Initiator des Fundraisers, Todd McIntosh.