3ds Max: Verteiltes Bucket Rendering mit Mental Ray
Tipps und Tricks für Autodesk 3ds Max 2010 und 3ds Max Design 2010
von Michael Langmayer, CE Senior M&E Application Specialist, AutodeskJeder, der mit Revit, Allplan, ARCHICAD, Vectorworks oder ähnlichen Programmen arbeitet kennt das Problem: Egal, wie schnell die Workstation ist, der Rendervorgang kann einfach nicht schnell genug gehen. Bei Verwendung des Mental Ray Renderers in 3dsmax 2010 (und älteren Versionen) gibt es eine relativ einfache und effiziente Möglichkeit, das Rendern eines Einzelbildes auf mehrere PCs im Netzwerk zu verteilen. Dabei braucht man nicht einmal extra Software-Lizenzen für die PCs, die nur mitrendern.
Beim Distributed Rendering rechnen alle CPUs lokal und im Netzwerk, limitiert durch das erworbene Lizenzmodell, an einem Bild. Beim "normalen" Netzwerkrendern rechnet jeder Rechner separat an einem Bild von vielen, bzw. an einem Animationsfile (avi, mpg, mov usw.). Ersteres ist für beispielsweise große Bilder mit langen Rechenzeiten von Nutzen, zweiteres für Animationen, bzw. für viele unterschiedliche Bilder.
Das Distributed Rendering mit Mental Ray auf einem gut eingerichteten Netzwerk ist auch kein Problem. Auf den Netzwerkrechnern sollte natürlich 3ds Max installiert sein. Diese Installationen benötigen keine Aktivierung, es sei denn, man hat mehr als eine Lizenz erworben und möchte an diesen Rechnern mit 3ds Max nicht nur rendern sondern auch arbeiten.
Voraussetzungen
Um das verteilte Bucket-Rendern verwenden zu können, muss man den Mental Ray Renderer verwenden und nicht den Scanline-Renderer. Außerdem muß auf jedem PC der für das "Mitrendern" verwendet werden soll, der Mental Ray Satellite Dienst installiert sein.
Standardmäßig ist dieser bereits während der Installation ausgewählt und ein Standard TCP/IP Port vergeben. Man findet diese Option während der Installation bei der Konfiguration der Komponente 3ds Max 32-Bit bzw. 3ds Max 64-Bit. Beide Versionen (32- und 64-Bit) verwenden einen gesonderten TCP/IP Port und dürfen nicht gemischt verwendet werden.
In obigen Dialog in der Konfiguration der Komponente "3ds Max" während der Installation ist der Mental Ray Satellite Dienst bereits per Vorgabe aktiviert und ein Standardport voreingestellt. Wenn es keine speziellen Gründe gibt, wird empfohlen diesen Port so zu belassen. Der Satellite Dienst ist zwingend notwendig, damit der jeweilige PC anderen 3ds Max Renderinstanzen unter Mental Ray als "Renderslave" dienen kann.
Wie funktioniert das?
Mental Ray teilt das Bild für das Rendering in viele kleine Abschnitte, auch "Buckets" genannt auf. Jedes Bucket wird in einem Thread berechnet. So kann man z.B. beobachten, dass auf einem PC mit einer Dualcore-CPU immer 2 Buckets auf einmal berechnet werden, bei einem Quadcore 4, bei 2 Quadcores 8 und bei 2 Quadcores mit HT gar 16. Wenn man nun einen anderen Computer im Netzwerk mitrendern lässt, bekommt dieser über das Netzwerk so viele Bildinformationen geschickt, dass er so viele Buckets berechnen kann wie er auf einen Rutsch schafft (ein PC mit einem Quadcore also z.B. 4 Buckets). Wenn der Slave damit fertig ist schickt er die gerenderten Buckets an den Master zurück und bekommt - falls noch vorhanden - neue Arbeit vom Master.
Der Geschwindigkeitsverlust durch die Datenübertragung übers LAN ist dabei in der Praxis selbst in einem LAN mit 100 MBit/s zu vernachlässigen. Trotzdem lohnt es sich bei Bildern deren Renderzeit ohnehin nur wenige Sekunden beträgt kaum, sie auf mehrere PCs aufzuteilen.
Natürlich ist es, gerade bei Renderings, die ohnehin nicht lange dauern, nicht sinnvoll im Vergleich zum Hostsystem allzu langsame PCs als Renderslaves zu verwenden. Sonst hat der Master seine Buckets evtl. schon längst fertig und wartet noch auf die "Zuarbeit" der Slaves, während er die verbleibenden Buckets in weniger Zeit schneller selber rendern könnte.
Zusammenfassend kann man also sagen, dass sich das Bucket-Rendern am ehesten bei Standbildern mit hoher Auflösung lohnt. Je schneller das Netzwerk, desto besser, aber der Einfluss ist hier nicht allzu dramatisch. Die Renderslaves sollten natürlich nicht unbedingt die verstaubten Krücken aus dem Keller sein, aber eine gute Mittelklassemaschine (oder mehrere) als Beistand für eine High-End Workstation lohnen sich bei wirklich großen Renderings bereits.
Beachtenswertes & Einschränkungen
Wie überall gibt es leider auch beim verteilten Bucket-Rendern Einschränkungen und ein paar Kleinigkeiten die beachtet werden sollten. Auf jeden Fall empfiehlt sich die Lektüre des Hilfe-Artikels Rollout "Verteiltes Bucket- Rendern" (mental ray-Renderer) in der Hilfe von 3ds Max zu lesen.
Folgende Optionen sollten aktiviert sein: "Platzhalter verwenden" im Roll-Out "Übersetzungsoptionen" beschleunigt das Rendern, da Geometriedaten nur nach Bedarf zum Renderer geschickt werden.
Im Roll-Out "Samplingqualität" sollte die Bucket-Reihenfolge auf "Hilbert" gestellt sein (ist bereits per Default so), da dann die wenigsten Datenübertragungen statt finden müssen.
Folgende Funktionen funktionieren beim verteilten Bucket-Rendern nicht:
- Konturenschattierung
- Rendern in Textur
Die Anzahl der Slave-CPUs (dabei werden die CPUs im Hostsystem nicht mitgerechnet) ist auf 8 begrenzt.
Einrichtung in den Rendereinstellungen
Hier ist im Prinzip nicht mehr viel zu tun. Wenn Mental Ray zum rendern der Szene gewählt ist, findet man im Tab "Verarbeitung" in den Rendereinstellungen ganz unten das Roll-Out "Verteiltes Bucket- Rendern". Hier setzt man den Haken bei "Verteiltes Rendern" und fügt der Liste unten über die Schaltfläche "Hinzufügen" alle Hosts (über die IP-Adresse oder den Hostnamen) hinzu, die am verteilten Rendern als Slave teilnehmen sollen. Bitte beachten: es rendern nur die Hosts mit, die in der Hostliste markiert sind!
Der Mental Ray Satellite Dienst
Der Mental Ray Satellite Dienst läuft komplett im Hintergrund als Windows-Dienst. Wenn ein Renderslave über den Satellite Dienst einen Renderauftrag bekommt, geht kein extra Programmfenster o.ä. auf wie dies beim Backburner der Fall ist.
Standardmäßig ist der Dienst so eingestellt, dass er beim Systemstart automatisch startet und unter dem lokalen Systemkonto läuft. Wenn verteilte Maps verwendet werden sollen, muss der Dienst, wie bereits kurz angesprochen, Zugriff auf die Texturen haben, die in der Szene verwendet werden. Es bietet sich natürlich an diese Ressourcen im Netzwerk abzulegen und über UNCPfade einzubinden, allerdings muss hier beachtet werden, dass auch die entsprechenden Zugriffsrechte vorhanden sind. Wenn man sich keine Freigabe anlegen möchte auf die ohne Authentifizierung Lesezugriff möglich ist, kann man den Satellite-Dienst in der Windows- Diensteverwaltung im Kontext eines anderen Benutzerkontos laufen lassen, das dann Zugriff auf die jeweilige Freigabe bekommt.
Der Prozess, der die Aufträge entgegen nimmt, heisst: "raysat_3dsmax2010_32server.exe" bzw. "raysat_3dsmax2010_64server.exe" und nimmt nur ca. 1,3 MB Speicher in Beschlag, ist also vom Ressourcenbedarf her zu vernachlässigen. Natürlich ist zu beachten, dass der Dienst beim Rendern 100% CPU-Zeit in Anspruch nimmt, nebenbei arbeiten ist also nicht wirklich möglich.
Sonstiges
Jetzt soll noch kurz auf einige Punkte eingegangen werden, die bisher nicht angesprochen wurden oder nicht allzu ausführlich behandeln wurden.
Bei Aktivierung der Option "verteilte Maps" werden Texturen nicht vom Render-Host auf die Slaves übertragen sondern von jedem Slave selbst geöffnet. Die Maps müssen sich dabei aber auf jedem Slave im selben Verzeichnis befinden (im Netzwerk auf Zugriffsreche für den Satellite- Dienst achten!), sonst kommt es zu Bildfehlern im Rendering (fehlende Texturen).
Verteiltes Bucket-Rendern lässt sich auch in Verbindung mit dem Backburner verwenden. Dann wird die Renderszene per Backburner an die Backburner-Server geschickt, die die einzelnen Bilder dann jeweils mit Hilfe von verteiltem Bucket-Rendern selbst + auf bis zu 8 Renderslaves bearbeiten können.
Nun weiterhin viel Spaß und viel Erfolg mit Autodesk 3ds Max und 3ds Max Design!
Autodesk und BuildingTools übernehmen keine Verantwortung für die Richtigkeit und Vollständigkeit der Inhalte in diesem Dokument. Unvorhergesehene inhaltliche Änderungen sowie Irrtümer in diesem Dokument behalten wir uns vor. Für möglicherweise fehlerhafte Angaben und deren Folgen übernehmen wir keinerlei Verantwortung bzw. Haftung. Das vorliegende Dokument und deren Inhalte sind urheberrechtlich geschützt. Es darf ohne schriftliche Erlaubnis nichts weiterverarbeitet oder weiterkopiert werden. Alle in diesem Artikel gebrachten Inhalte bleiben geistiges Eigentum des Verfassers.
"Beide Versionen (32- und 64-Bit) verwenden einen gesonderten TCP/IP
Port und dürfen nicht gemischt verwendet werden."
Hier muss ich nochmal nachhaken: Bedeutet dies, dass ich von einem 64
bit Arbeitsrechner aus keine 32 bit Rendersklaven miteinbeziehen kann?
[Hans Hummel | 04.01.2010]
"Distributed Rendering" sollte zwischen unterschiedlichen 32-bit und
64-bit Maschinen funktionieren . im Prinzip kann man hier jede
Win-Mühle im Büro mit einspannen - man soll eben an den
Porteinstellungen nix ändern. Grüße, Stefan Schrenk
3ds Max - Support und Verkauf durch BuildingTools GmbH
[Stefan Schrenk | 04.01.2010]
