Maya 6: Motion Vectors und Occlusion Baking
Transcription
Maya 6: Motion Vectors und Occlusion Baking
144 : 01 : 05 : DIGITAL PRODUCTION WORKSHOP Aufgrund des technischen Fortschritts bei den Render Engines lassen sich durch Verfahren wie Raytracing und Ambient Occlusion immer realistischere Bilder generieren. Trotz zunehmend höherer Prozessor-Taktraten laufen diese Vorgänge jedoch sehr langsam ab und eignen sich deshalb nicht uneingeschränkt für den Einsatz in zeitkritischen Produktionen. Dieser Workshop zeigt anhand einer simplen Beispielszene, wie sich mithilfe einiger Tricks Szenen für ein schnelleres Rendering optimieren lassen. Die Beispielszene dieses Workshops nach dem Compositing Maya 6: Motion Vectors und Occlusion Baking Immer wieder tauchen im Internet wunderbare Bilder auf, die auf eindrucksvolle Weise demonstrieren, zu welchem Realismusgrad die heutigen Renderer fähig sind. Versucht man jedoch, diese Features in den eigenen Animationen einzusetzen, stößt man sehr schnell an Grenzen. Schließlich haben die wenigsten User eine Multi-Prozessor-Renderfarm unter dem Schreibtisch stehen und können es sich leisten, mitunter zwölf Stunden und länger auf die Berechnung eines einzelnen Frames zu warten. Solche Zeiten kommen leicht zustande, wenn Features wie Ambient Occlusion, Raytracing und Motion Blur zur selben Zeit in komplexen Szenen eingesetzt werden. Das folgende Beispiel hat seinen Ursprung in einer aktuellen Produktion, bei der eine große Rasenfläche im Bild zu sehen sein soll. Das Gras selbst wurde mithilfe von Paint Effects erstellt. Da alle anderen Elemente der Szene mit Mental Ray gerendert wurden, galt es den Look der Grasfläche an die übrigen Layer anzugleichen, die mit Ambient Occlusion und teilweise sogar mit Final Gathering berechnet wurden. Paint Effects lassen sich unter normalen Umständen nur mit dem Maya Software Renderer generieren. Als Post-Effekt weisen sie zudem noch die üblichen Probleme wie mangelhaftes Anti-Aliasing auf. Aus diesen Gründen musste in der genannten Produktion ein Workaround gefunden werden, um eine höhere Bildqualität zu erzielen. Dazu wurden die Paint Effects Strokes in Polygone umgewandelt, so dass es möglich war, diese mit Mental Ray zu rendern. Allerdings erwies es sich als schier unmöglich, so viele Polygone mit Ambient Occlusion und Motion Blur gleichzeitig zu berechnen. Die Lösung bestand darin, diese Informationen zu baken. Dieser Prozess wird im Folgenden etwas deutlicher erläutert. Als Testsystem für diesen Workshop diente ein Pentium 4 mit 3,5 GHz und einem GByte RAM. SETUP DER BEISPIELSZENE Der Boden ist eine einfache Nurbsplane, auf die eine Erdtextur gemappt wurde. Die Rendercam sollte animiert sein, um die Auswirkungen des Motion Blurs besser zu verdeutlichen, da die Bewegung des Grases allein zu subtil ist. Unter dem Menüpunkt „Rendering – Paint Effects – Get Brush“ lässt sich der Visor aufrufen. Hier lassen sich viele Paint Effects Presets auswählen. Unter „Grasses“ sollten Sie „GrassWindNarrow.mel“ wählen, da es sich dabei um einen animierten Stroke handelt. Zeichnen Sie ein paar Strokes auf die Groundplane und aktivieren Sie in den Settings unter „Shadow Effects – Fake Shadow“ den Punkt „3D Cast“. Bei Bedarf kann man nun noch ein wenig die Settings „tweaken“, um einen schöneren Look zu erzielen. Zudem wird noch ein Light Setup benötigt, wobei beim Keylight Raytrace-Shadows aktiviert sein sollten, damit für die Paint Effects auch ein Schatten generiert wird. Bild 01 zeigt das Setup der Szene. Rendern Sie einfach mal ein Bild aus der Mitte der Animation mit dem Maya Software Renderer, damit sie eine Vergleichsmöglichkeit haben. Raytracing und Motion Blur sollten dabei aktiviert sein [Bild 02]. Um das Gras mit Mental Ray rendern zu können, müssen wir es zunächst in Geometrie umwandeln. Wählen Sie dazu alle Strokes aus und klicken Sie auf „Modify – Convert – Paint Effects to Polygons“. Sie werden sehen, dass die Szene nun einen ziemlich hohen Polycount aufweist. Unsere Beispielszene hatte nach dem Konvertieren circa 100.000 Polygone. Wenn Sie nun dieselbe Szene mit Mental Ray rendern, fällt zunächst einmal auf, dass die Renderzeit bei aktiviertem Raytracing und Motion Blur merklich ansteigt. Auch optisch unterscheidet sich das Bild deutlich von der mit Maya-Software gerenderten Variante [Bild 03]. DIGITAL PRODUCTION : 01 : 05 : 145 MAYA 6: RENDERING MIT MENTAL RAY [01] Das Setup der Szene [02] Paint Effects mit Maya Software Renderer: Schnell aber nicht unbedingt überzeugend, die Renderzeit betrug 06:31 Minuten (Raytracing, Motion Blur) Das Gras wirkt insgesamt dichter und plastischer, im Allgemeinen vom räumlichen Eindruck her aber nach wie vor recht flach. Um hier einen besseren Eindruck von Plastizität zu erwecken, bietet es sich an, einen Occlusion Pass mithilfe des Dirtmap Shaders zu rendern (siehe Maya-Workshop in der DP 02:04). Allerdings ist es kaum möglich, die Szene in einer halbwegs akzeptablen Zeit mit Motion Blur zu berechnen [Bild 04]. [03] Paint Effects, konvertiert in Polygone, gerendert mit Mental Ray. Renderzeit: 15:58 Minuten (Raytracing, Motion Blur) [04] Dieselbe Szene rendert ohne Motion Blur deutlich schneller. Renderzeit: 1:08 Minuten (Raytracing, kein Motion Blur) MOTION VECTORS Um dieses Problem zu umgehen, kann man den Motion Blur im Compositing mithilfe des Plug-Ins „Reelsmart Motion Blur V.3“ hinzufügen. Dadurch lassen sich die Renderzeiten stark verkürzen. Zu diesem Zweck muss ein Motion Vector Pass gerendert werden, in dem die Bewegungsinformationen der Szene als RGB-File kodiert werden. Dies ist mit dem Mental Ray Shader „lm_2dmv“ möglich (siehe Weblink im Kasten „Das brauchen Sie für diesen Workshop“). Nach der Installation finden Sie diesen unter den Mental Ray Materials. Weisen Sie den Shader der gesamten Geometrie Ihrer Szene zu. In den Mental Ray Render Globals müssen folgende Einstellungen vorgenommen werden [Bild 05]: Raytracing: off. Erklärung: Zum Berechnen der Motion Vectors wird kein Raytracing benötigt. Calculation: Motion Blur: Exact Deformation. Erklärung: In diesem Beispiel würde auch theoretisch „Transformation“ ausreichen, da die Bewegung im Bild durch die Kamerafahrt zustande kommt. Deformation ist jedoch um einiges genauer und sollte zum Beispiel immer dann aktiviert werden, wenn sich Geometrie verformt. Shutter: 0.001. Erläuterung: Setzen Sie diesen Wert nicht auf Null, da in Maya sonst überhaupt kein Motion Blur berechnet wird. Verwenden Sie stattdessen den kleinstmöglichen Wert. Framebuffer Attributes: Data Type: RGBA (Short) 4x16 Bit. Erklärung: Um eine höhere Genauigkeit zu erzielen, sollte die Szene mit 16 Bit per Kanal gerendert werden. Um diese Informationen weiter zu verwenden, müssen Sie in den Common Render Globals ein Bildformat wählen, das in der Lage ist, diese Informationen abzuspeichern (etwa SGI). [05] Render Globals zum Berechnen der Motion Vectors Translation: Customization: Export Verbosity: Progress Messages Export Custom Motion: On Motion Back Offset: 0.000 Nach dem Rendern per „Render – Batch Render“ werden Sie eine Art Falschfarben-Bild erhalten, in dem die Bewegungsinformationen gespeichert sind. Sehr wichtig: Rendern Sie in diesem Fall nicht im Render View und speichern Sie das Bild eigenhändig ab. Nur über die „Batch Render“-Funktion lassen sich die vollen 16 Bit pro Kanal in ein File schreiben. Nachdem das Rendering beendet 146 : 01 : 05 : DIGITAL PRODUCTION WORKSHOP [06] Notieren Sie den Wert unter „Max Displace“ [07] Unter „Normalize Size“ muss der Wert ausgewählt werden, der dem notierten Wert „Max Displace“ am nahsten liegt [08] Motion Vector Pass. Renderzeit: 00:18 Minuten (kein Raytracing, kein Motion Blur) ist, notieren Sie sich den im Maya Output Window ausgegebenen Wert für „Max Displace“ [Bild 06]. Dieser gibt Auskunft über die schnellste in diesem Frame vorkommende Bewegung. Wenn Sie den Shader für Ihre Animation einrichten, sollten Sie also das Frame einmal testrendern, welches augenscheinlich die stärkste Bewegung der gesamten Animation aufweist. Für diesen Wert müssen Sie nun unter „Normalize Size“ den nächstgelegenen Eintrag in den Shader-Parametern selektieren [Bild 07]. Rendern Sie die Szene erneut per Batch Render, um den finalen Motion Vector Pass zu erhalten [Bild 08]. [09] Die Settings für das Texture Baking Selektieren Sie die Groundplane. Durch einen Klick auf „Convert“ wird der Baking-Prozess gestartet, der durchaus etwas länger dauern kann. Dafür erspart man sich im Nachhinein jedoch lange Renderzeiten durch Raytracing. Nach dem Vorgang wird der Dirtmap Shader automatisch durch einen Surface Shader mit der gebakten Textur ersetzt. DAS BRAUCHEN SIE FÜR DIESEN WORKSHOP AMBIENT OCCLUSION BAKING Der Ambient Occlusion Pass lässt sich mithilfe des Dirtmap Shaders rendern. Allerdings zeigt sich, dass auch hier die Renderzeiten aufgrund des Raytracings relativ lang sind. Um dies zu umgehen, wird die „Ambient Occlusion“-Information in die Szene gebaked. Sie muss auf diese Weise nur einmal berechnet werden. Danach ist es möglich, die Animation ohne Raytracing deutlich schneller zu rendern. Dazu kommen zwei verschiedene Techniken zum Einsatz: Texture Baking für den Boden und Vertex Baking für das Gras. Dies ist allerdings nur dann sinnvoll, wenn es sich bei den Objekten, die gebaked werden sollen, um statische Hintergrundelemente handelt, die nicht in irgendeiner Art und Weise mit animierten Objekten interagieren. Weisen Sie für das Texture Baking der Groundplane den Dirtmap Shader zu und stellen Sie sicher, dass in ihm die Werte für die Far und Near Clipping Plane entsprechend der Szenengröße korrekt eingetragen sind. Selektieren Sie unter „Render – Lighting/ Shading“ den Punkt „Batch Bake“ (Mental Ray). Die Settings lauten wie folgt [Bild 09]: Use Face Normals: On Normal Direction: Surface Front Bake to one map: On Bitte nicht vergessen, die richtige Kamera auszuwählen. Die Auflösung der Textur richtet sich nach der jeweiligen Szenengröße und hängt davon ab, wie nah die gebakten Objekte zu sehen sein werden. Um den in diesem Maya-Workshop vorgestellten Workflow selbst auszuprobieren, brauchen Sie eine Reihe von MayaShadern, die jedoch allesamt kostenlos erhältlich sind. Zudem benötigen Sie ReelSmart Motion Blur Pro V.3. Eine kostenlose Demo-Version (mit Wasserzeichen) ist auf der RE:VisionFX Website erhältlich. Die Vollversion kostet 149,95 Dollar. Dirtmap Shader: Daniel „theBigMuh“ Rind’s Homepage, http: //animus.brinkster.net/downloads/Dirtmap.zip Z Shader: Pavel „Puppet“ Levin’s Homepage, www.puppet.cgtalk.ru/download/index_e.shtml Motion Vector Shader: LaMaison Homepage, www.alamaison.fr/3d/lm_2DMV/lm_2DMV.htm Vertex Color Shader: MR_cpvPACK v1.0, www.highend3d.com/maya/plugins/ ?group=mayaplugins§ion=rendering Maya Files für lm_2DMV: Horvatth Szabolcs Homepage, www.impresszio.hu/szabolcs/MentalRay/ lm_2dmvMayaFiles.htm RE:Vision FX ReelSmart Motion Blur V.3: Demo-Version-Download, www.revisionfx.com/mblurdownloads.htm DIGITAL PRODUCTION : 01 : 05 : 147 MAYA 6: RENDERING MIT MENTAL RAY [10] Flowchart des finalen Composits Das Vertex Baking ging folgendermaßen vonstatten: Für die Grashalme wurde die Occlusion Information nicht in eine Textur, sondern als Vertex Color gebaked. Dies bot sich an, da es keinen Sinn machen würde, das Gras per „Automatic Mapping“ abzuwickeln. Für diesen Fall müsste in eine sehr große Textur gebaked werden, da das automatische Unwrapping die UVs sehr unökonomisch platziert. Streng genommen ist es in diesem Fall – zumindest vom physikalischen Standpunkt aus betrachtet – eigentlich nicht richtig, Ambient Occlusion zu baken, da es sich bei dem Gras um animierte Objekte handelt. Bei diesen ändert sich genau betrachtet der Occlusion Wert von Frame zu Frame. Da es sich bei der Szene jedoch um eine Kamerafahrt handelt, ist zu bezweifeln, dass der Betrachter dies auch tatsächlich bemerkt. Die Occlusion Information wird nur für jeden Vertex gespeichert. Dazwischen wird interpoliert. Da das Gras aber eine relativ hohe Vertexdichte besitzt, resultieren daraus keine Probleme. Wählen Sie die in Polygone umgewandelte Grasgeometrie aus und baken Sie die Ambient Occlusion Information, ähnlich wie bereits oben beschrieben. Jedoch muss dieser Vorgang diesmal über den Befehl „Edit Polygons – Colors – Prelight (Mental Ray)“ geschehen. Wenn Sie alle Einstellungen richtig vorgenommen haben und ihre Grafikkarte die Darstellung von Vertex Colors unterstützt, sollte das Ergebnis des Bakings direkt nach Abschluss der Kalkulation im Maya Viewport zu begutachten sein. Um die in das Gras gebakte Occlusion Information zu rendern, brauchen Sie einen speziellen Shader (mr_CPV, siehe Weblink im Kasten), der sich nach der Installation einfach dem Gras zuweisen lässt. Für das Rendern des Ambient Occlusion Passes können Sie nun Raytracing und Motion Blur in den Render Globals deaktivieren, was zu einem beachtlichen Geschwindigkeitszuwachs führen sollte. DEPTH CHANNEL Die Tiefeninformation wird mithilfe eines speziellen Mental Ray Shaders berechnet (siehe Kasten). Dieser ermöglicht das Speichern des Z Channels im Floating-Point-Format, wodurch im Gegensatz zum sonst gebräuchlichen 8Bit-Format deutlich mehr Tiefeninformationen verfügbar sind. Allerdings muss Ihre Com- [11] Die korrekten Einstellungen in ReelSmart Motion Blur Pro V.3 positing-Software auch in der Lage sein, diese Informationen zu verarbeiten. Ansonsten reicht es, den Z Channel ganz normal als 8 Bit RGB File abzuspeichern. Der Shader ist leicht einzustellen und rendert sehr schnell. Tragen Sie einfach die richtigen Werte für die Near und Far Clipping Plane ein. COMPOSITING Da es sich um einen Maya-Workshop handelt, soll an dieser Stelle nicht zu genau auf den Compositing-Prozess eingegangen werden. Der in Abbildung 10 dargestellte Flowchart gibt Aufschluss über den Aufbau des Composites, falls nicht ganz klar ist, wie die einzelnen Passes kombiniert werden müssen. Den Post-Blur finden Sie nach der Installation unter dem Menüpunkt „RE:Vision Effects – Motion Vectors“. Im Filterdialog ist unter „Motion Vectors“ nur der entsprechende Layer zu selektieren. Der Wert unter „Max Displace“ entspricht demselben Wert, der im Shader unter „Normalize Size“ eingetragen wurde. Ein „Blur Amount“ von „1“ entspricht vollem Motion Blur. Alle höheren Werte machen eigentlich keinen Sinn. Die Slider für „Vector Scale X“ beziehungsweise „Y“ können außer Acht gelassen werden. Sie dienen lediglich dazu, die Richtung des Blurs zu beeinflussen, was in den seltensten Fällen Sinn macht [Bild 11]. T Manuel Macha Der Autor (www.manuelmacha.de) beschäftigt sich seit 1998 mit 3D-Grafik und ist als Freelancer mit Fokus auf Modeling, Rigging, Texturing und Animation tätig. Zur Zeit arbeitet er als Modeling-Supervisor für Paprikaas Animation Studios / Shortcut Entertainment Italy an einem Full CGI Feature Film.