Zum Rendern von Landschaften werden gerne Height Maps eingesetzt, wie sie z.B. von World Machine ausgespuckt werden. Leider ist das auch eine ausgesprochen Polygon-intensive Angelegenheit. Wenn man auf herkömmliche Art eine Ebene unterteilt, um ihr dann ein Displacement zu verpassen, benötigt man bei einer 8K-Map bereits mehr als 67 Millionen Vertices, um die Auflösung der Map vollständig auszunutzen. Das geht natürlich auf die Performance.
Vor allem der OpenGL-Viewport in Blender leidet unter zu viel Geometrie, denn eine Verdoppelung der Vertex-Anzahl bedeutet hier eine Halbierung der Update-Frequenz. Dieser Zusammenhang ist der im Hintergrund arbeitenden Technologie geschuldet und bereitet bei allen Engines Probleme, die nicht auf Raytracing setzen.
Logarithmisch
Die Render Engine Cycles hat hingegen deutlich weniger Probleme mit viel Geometrie, da hier eine Verdoppelung der Vertices die Render-Geschwindigkeit nicht halbiert. Vielmehr arbeiten die Gesetze des Pathtracing logarithmisch. Sprich Cycles kann mit großen Polygonzahlen deutlich besser umgehen als der Viewport in Blender. Jetzt könnte man natürlich für die Arbeit im Viewport die Anzahl der Unterteilungen herunterschrauben, wie das auch im Subsurf-Modifier vorgesehen ist, oder aber auf adaptive Subdivisions direkt in Cycles setzen. Der Vorteil: Es wird immer nur so weit unterteilt wie nötig und die Extra-Geometrie ist nur für die Render Engine sichtbar, während der OpenGL-Viewport sich gar nicht damit herumschlagen muss.
Unberührbar
Nicht nur die Unterteilung der Geometrie, auch das Displacement passiert erst zur Renderzeit. Konkret bedeutet das, dass es für andere Komponenten in Blender wie beispielsweise Physik- Simulationen nicht sichtbar ist. Sie können nicht damit interagieren. Wir können in unserem Beispiel also ein Gebirge aus World Machine rendern, aber darauf keine Lawine simulieren. Für solche Aufgaben muss auf traditionelles Displacement mit dem entsprechenden Modifier zurückgegriffen werden oder noch besser auf ein Proxy-Objekt, während das eigentliche Objekt dann doch mit adaptiven Subdivisions gerendert wird.
Experimentell
Leider befinden sich die adaptiven Subdivisions zur Renderzeit in Version 2.79 noch im experimentellen Stadium. Das bedeutet zum einen, dass es hier und da noch zu Problemen kommen kann. Die Render-Ansicht updatet z.B. manchmal nicht, was man allerdings durch manuelles Umschalten mittels Shift+Z leicht in den Griff kriegt. Zum anderen heißt experimentell bei Cycles, dass man die Features erst aktivieren muss, indem man das „Feature Set“ in den Render Einstellungen von „Supported“ auf „Experimental“ setzt.
Verstreut
Wahrscheinlich auch aufgrund des noch experimentellen Stadiums sind die Optionen, welche man einschalten muss, um in den Genuss von Adaptive Subdivisions mit Displacement in Cycles zu gelangen, noch recht verstreut. Zuerst muss dem Objekt, welches man unterteilen und verzerren will, ein Subdivision Surface Modifier gegeben werden, in dem „Adaptive“ eingeschaltet werden muss. Hier kann man nochmal auf Objekt-Ebene die Unterteilung mit einem Multiplikator feintunen. Denn nicht alle Objekte in einer Szene müssen zwingend gleich stark unterteilt werden. Auch beim Material, welches dem Objekt zugewiesen wurde, gibt es noch eine Einstellung zu tätigen. Unter Settings im Dropdown-Menü bei „Displace“ ist „True“ auszuwählen. In den Render-Optionen finden sich noch allgemeine Einstellungen für Adaptive Subdivision. Am wichtigsten ist dabei die „Subdivision Rate“, denn die Objekte werden anhand ihrer Entfernung zur Kamera unterteilt. Stellt man den Wert auf 1 Pixel ein, so wird das Objekt so lange unterteilt, bis einzelne Flächen in einem Pixel Platz finden. Diese Einstellung ist für das Rendering Standard und kann als optimal angesehen werden. Der Ausgangswert für den Viewport ist mit 8 Pixeln etwas grob eingestellt. Hier ist etwas Experimentieren angesagt.
Verstreute Einstellungen – Um Adaptive Subdivision in Blender Cycles nutzen zu können, muss an vielen Schrauben gedreht werden. Man aktiviert es, indem das Feature Set auf „Experimental“ eingestellt wird. Dann benötigt das Objekt, welches automatisch unterteilt werden will, einen Subdivision Surface Modifier, in dem ebenfalls die adaptiven Subdivisions eingeschaltet werden müssen. Will man außerdem noch das Displacement nutzen, so muss man in den Optionen für das Material, welches man dem Objekt zugewiesen hat, Displacement auf „True“ einstellen.
Nur in eine Richtung
Displacement in Cycles funktioniert nur mit Graustufen- bzw. Height Maps und somit auch nur entlang einer Richtung bzw. Achse – die der Normalen. Für dreifarbige Vector Displacement Maps muss also weiter auf den Displace Modifier zurückgegriffen werden. Dafür kann man bei „Displacement“ mit „Cycles“ auf die Mächtigkeit der Node-basierten Bearbeitung der Displacement-Texturen zurückgreifen. Besonders erfreulich ist, dass sowohl Bild- als auch prozedurale Texturen unterstützt werden.
Einfach einstecken
Nach den vielen Vorbereitungen ist der Rest sehr einfach. Eine Graustufentextur in den Displacement Socket des Material Output Nodes und man kann das Ergebnis im Live Render Viewport bewundern. Für viele Anwendungen ist das Displacement aber etwas schwach bis nahezu nicht sichtbar. Verstärken kann man es mit einem Math Node, der auf „Multiply“ gesetzt ist.
Fazit
Adaptive Subdivisions in Kombination mit Displacement ist eine erfreuliche Erweiterung für das Rendering mit Cycles in Blender. Wir hoffen, dass die Kinderkrankheiten bis zur Version 2.8 behoben sind, damit es endlich das experimentelle Stadium verlassen kann. Vielleicht wird bis dahin auch ein Weg gefunden, die Bedienung zu vereinfachen.
Dieser Artikel erschien im Magazin Digital Production, Ausgabe 1802. Herunterladen können Sie ihn hier als PDF.