DrQueue: Distributed rendering (Blender)

Da ich bis zu diesem Zeitpunkt kein gutes Howto zum Thema distributed rendering mit Blender gefunden habe, will ich hier erklären wie ich zu einer brauchbaren Lösung gekommen bin.

DrQueue

Ich gehe hier davon aus, dass auf irgend eine Art und Weise das Verzeichnis /home/share/blender auf allen Rechnern verfügbar ist. Dies kann z.B. über ein NFS-Mount, ein SMB-Mount oder ein SSH-FS erreicht werden. Howtos dazu sollte es schon zu genüge im Internet geben.

Setup mit Ubuntu Hardy Heron


# Pakete installieren (blender nicht zwingend auf allen Rechnern nötig)
sudo apt-get install blender drqueue tcsh

Anschließend müssen wir alles was in /var/lib/drqueue/ ist in /home/share/blender kopieren (bei jeden Upgrade des Pakets entsprechend wiederholen!). Der Einfachheithalber habe ich komplette Lese- und Schreibzugriffe für alle User/Rechner erlaubt. Vermutlich kann man hier noch einiges einschränken, sollte man Sicherheitsbedenken haben.
Außerdem noch die Datei /home/share/blender/etc/blender.sg editiert werden. #!/bin/tcsh muss oben eingefügt werden, damit es auch richtig als tcsh-Skript interpretiert wird.

Allgemein

Im Paket drqueue enthalten sind drqueue.master, drqueue.slave und drman (und noch weitere, die wir nicht benötigen). Alle erwarten gesetzte ENV-Variablen DRQUEUE_ROOT und DRQUEUE_MASTER. Daher bietet es sich an um diese binaries mini-Skripte zu bauen, die diese Variablen entsprechend setzen, was dann z.B. so aussieht:

#!/bin/bash
# Startet DrQueue.slave und setzt ENV-Variablen

export DRQUEUE_ROOT="/home/share/blender"
export DRQUEUE_MASTER="10.42.28.1"
drqueue.slave

Beachte: auch der master braucht die Information, wer der master ist!

Hat man alle Skripte angelegt, kann nun ein erster Test erfolgen. Einfach auf einem Rechner drqueue.master, drqueue.slave und drman starten. Letzteres ist eine simple GUI, mit der die nötigsten Handgriffe erledigt werden können. Unter "computers" sollte man einen Slave sehen.

Will man nun viele Rechner in die Farm aufnehmen, muss auf jedem der slave gestartet werden. Automatisieren kann man sich dies z.B. über ein Skript dass auf jeden eine SSH-Verbindung aufmacht (über Kerberos-Tickets oder Keys) und den slave startet.

#!/bin/bash
# Damit kein Passwort bei jedem SSH eingegeben werden muss, vorher Kerberos Ticket holen

export DRQUEUE_DIR="/home/share/blender"

# Start master
/home/share/blender/blender_master &

# Start clients
ssh tafelrunde1 $DRQUEUE_DIR/blender_slave &
ssh tafelrunde2 $DRQUEUE_DIR/blender_slave &
ssh tafelrunde3 $DRQUEUE_DIR/blender_slave &
/home/share/blender/blender_slave

Wie nun ein distributed rendering angeworfen wird, soll unter "Blender erklärt werden".

Blender

Das eigentlich zu rendernde File muss soweit fertig konfiguriert sein, als würde man es auf einem Rechner rendern. Außerdem sollte man sich die Zahl der zu rendernden Frames merken. Das File legen wir in /home/share/blender/blend/.

In der GUI kann per Rechtsklick ein neuer Job hinzugefügt werden. Über den Reiter "??" kann ein tcsh-Skript erzeugt werden, was alle nötigen Parameter richtig setzt. Hier einfach blender auswählen und das .blend file aus /home/share/blender/blend/ aussuchen. Dann wieder in den ersten Reiter dem Ganzen einen Namen verpassen und anschließend noch die Zahl der zu rendernden Frames einstellen.
Dann kanns auch schon losgehen. Die Ergebnisse landen per default alle in /tmp des Masters (oder des GUI-Starters). In den Details des Renderings werden alle Frames aufgelistet. Interessant ist der Exit-Code. Ist dieser nicht 0, so kann man sich das Frame-Log anschauen und sehen, was schief gelaufen ist.

Konvertierung

Brauchbare Filmchen erzeugt man z.B. relativ effizient, indem man in blender jpgs als Render-Ziel anwählt und sie anschleißend z.B. mit mencoder konvertiert:

# JPG to AVI
mencoder "mf://*.jpg" -mf fps=25 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4

Links

Kommentare

Habe z.Z. leider keine

Habe z.Z. leider keine "Renderfarm" mehr um das zu überprüfen. Ich kann mich auch nicht mehr erinnern. Aber wahrscheinlich war der Code des Skripts in tcsh-Syntax?

Gibts einen bestimmten Grund

Gibts einen bestimmten Grund für die tcsh?

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
  • Keine HTML-Tags erlaubt
  • Zeilen und Absätze werden automatisch erzeugt.

Weitere Informationen über Formatierungsoptionen

Image CAPTCHA
Enter the characters shown in the image.
Inhalt abgleichen