Tipps für Animationen (in Blender 3D)

Ich habe vor einiger Zeit den Auftrag bekommen, einen kleinen Kurzfilm zu erstellen. Da ich sonst solche Filme eher Privat entwickle, habe ich nun meine Herangehensweise deutlich verändert. Das durch die neuen Arbeitsschritte erlangte Wissen möchte ich nun teilen, um anderen den Einstieg in solch ein Projekt zu vereinfachen.

Für den Kurzfilm habe ich die kostenlosen Programme Blender 3D, Gimp und Audacity benutzt. Für das Storyboard und die nachträglichen Effekte habe ich Photoshop und Adobe After Effects verwendet.

  • Der erste Punkt in meiner Liste klingt so selbstverständlich, dass er schon fast für überflüssig gehalten werden kann: Ein Storyboard. Ein gutes Storyboard ist die wichtigste Grundlage für einen Animationsfilm. Erst wenn das Storyboard fertig ist, kann mit der Arbeit an den einzelnen Szenen begonnen werden. Diese Erfahrung habe ich als erstes gesammelt. Denn ich habe zu Beginn einige Szenen aus einer frühen Version unseres Storyboards erstellt. Doch der Kunde hat sich das Ganze jedoch anders vorgestellt. Weshalb ich manche Szenen, die bereits fertig waren, nicht mehr verwenden konnte. Ein Storyboard muss übrigens nicht immer gezeichnet sein, wie man es häufig bei aufwändigen Hollywood-Filmen sieht. Unser Storyboard bestand zum Beispiel aus zusammen geschnittenen Fotos, ein paar einfachen Stichmännchen-Zeichnungen, ersten groben 3D-Modellen und Photoshop-Effekten. Es geht bei einem Storyboard schließlich nur um die Vermittlung bzw. Veranschaulichung der Idee.
  • Sobald das Storyboard fertig ist und vom Kunden abgesegnet, habe ich die benötigten Szenen erstellt. Leider habe ich mit einer sehr langen Ozeanszene meinen Computer ziemlich ins Schwitzen gebracht. Hätte ich die Szene allein auf meinem PC berechnet, dann wäre der Film wohl erst in 4 Jahren fertig geworden. Stattdessen habe ich das Berechnen auf den Firmenserver ausgelagert. Dieser Server hat sehr viel mehr Rechenvolumen als ein normaler Desktop-PC. Nachdem das Blender 3D Programm von unserem Administrator auf dem Debian-Server installiert wurde, habe ich mit einfachen Kommandozeilenbefehlen die Szene auf dem Server berechnen lassen.
    Ein Beispielbefehl zum berechnen einer Szene:
    bin/blender -b file.blend -x 1 -o //tmp -f PNG -s 0001 -e 2000 -a
    1. bin/blender ist der Dateipfad zu Blender
    2. -b gibt an welche Datei gerendert werden soll. Dahinter wird der Dateipfad geschrieben.
    3. -x gibt lediglich an, dass Blender die Dateinamenerweiterungen ansetzen soll, also .png oder .avi. Der Ausdruck „-x 1“ bedeutet, dass eine gerenderte Datei beispielsweise „0010.png“ und nicht „0010“ heißt. Durch die Endung können Programme leichter mit der Datei umgehen.
    4. -o gibt den Ordner an, in den die gerenderten Dateien gelegt werden. Der dahinter angegebene Dateipfad wird erstellt falls er nicht existiert.
    5. -f gibt an, welches Ausgabeformat gerendert werden soll. Während des Rendervorgangs meiner Szene funktionierte das aber nicht richtig.
    6. -s Gibt den Startframe der Animation an.
    7. -e Gibt den Endframe der Animation an.
    8. -a Gibt an, dass eine Animation gerendert werden soll. Ohne das -a würde der Server entweder nichts oder nur ein Bild rendern.

    Man kann diese Befehle auch auf dem eigenen PC über die Kommandozeileneingabe/Konsole nutzen. Das hat bei großen Blenderdateien den Vorteil, dass Blender gleich mit dem Rendern anfängt, ohne vorher die Datei darstellen zu müssen.
    Wichtig ist, dass die aktuellen Einstellungen der Blenderdatei zum Rendern benutzt werden. Ausgabeordner, Start- und Endframe können zwar angepasst werden, das Dateiformat sollte aber in der Blenderdatei korrekt eingestellt sein.
    befehlDie vielen Errors am Anfang des Rendervorgangs sind normal und sollten kein Problem darstellen.

    Der rot markierte Bereich zeigt den Befehl. Es wird die Datei „example.blend“ von Frame 3 bis Frame 150 gerendert und als .png in dem Ordner „example_speicherort“ gespeichert. „nr_“ in diesem Beispiel bei jedem Bild vorne angeführt.

  • Gerade gegen Ende des Projekts habe ich noch mehr Leistung zum Rendern benötigt. Blender bietet hier zwar einen eingebauten Netzwerkrenderer, der macht aber öfters Probleme (unvollständig gerenderte Bilder, Computer im Netzwerk ohne Renderauftrag uvm.). Stattdessen habe ich einen anderen Weg zum Netzwerkrendern benutzt:
    Ich habe in der zu rendernden Datei angegeben, dass vorhandene Dateien nicht überschrieben werden sollen, Platzhalter erstellt werden und das als Ausgabeformat PNG-Bilder erstellt werden. Zusätzlich habe ich das Rendern über die schon beschriebenen Kommandozeilenbefehle gestartet. Das habe ich auf allen Computern getan und als Ausgabeordner einen gemeinsamen Netzwerkordner angegeben.settings
    Wenn das Rendern über die Kommandozeile gestartet wird, dann checkt Blender erst einmal ob die Datei nicht schon vorhanden ist. Falls ein Computer bereits an der Datei rendert, dann finden die anderen Computer den Platzhalter und überspringen die Bildberechnung. Sie gehen automatisch weiter zum nächsten freien Bild. Sobald das Rendern in diesem Fall aus dem Programm heraus startet, dann rendert der Computer das Bild erst einmal bevor er nach Platzhaltern sucht. Auf diese Art kann ich alle PCs des Büros und den Server an eine Szene setzen, ohne dass Frames doppelt berechnet werden.
  • Ich habe schon erwähnt, dass mein Ausgabeformat der 3D-Szenen tausende PNG-Bilder sind. Das hat einen Grund, den ich auch erst während des Projekts gelernt habe.
    Es kann mal sein, dass ein PC während des Rendervorgangs abstürzt. Das passiert zum Beispiel, wenn nicht genügend Arbeitsspeicher vorhanden ist. Sobald bei diesem Absturz das Ausgabeformat AVI ist, dann weist die Filmdatei an dieser Stelle einen Fehler auf. Dieser macht sie für die meisten Programme unbrauchbar. Zwar kann die Datei wieder hergestellt werden, aber die Mühe kann man sich sparen. Deshalb empfehle ich im Vorfeld PNG als Ausgabeformat zu wählen. Denn PNG lässt sich verlustfrei komprimieren und hat zusätzlich einen Alphakanal, der sehr viel Zeit einsparen kann.
  • Der zusätzliche Alphakanal hat mir bei der Nachbearbeitung des Videomaterials sehr geholfen. Ich habe die zu rendernden Szenen in Einzelteile, zum Beispiel Vordergrund und Hintergrund, zerlegt um etwas mehr Rendergeschwindigkeit herauszuholen. Diese einzelnen Szenen habe ich dann nachträglich übereinander gelegt und so einen identischen Effekt erzielt. Diesen Trick kann man auch super für Übergänge nutzen. Die folgenden vier Bilder zeigen den Prozess:
    1. bg Der statische Hintergrund. Er muss nur einmal gerendert werden und kann so etwas aufwändiger sein.

    2. walk Der animierte Vordergrund. Alles abseits der Figur ist Transparent. Der Schatten der Figur wurde jedoch auch mitgerendert.

    3. img In dem fertigen Bild wurde die Figur nur über den statischen Hintergrund gelegt. Durch den Schatten scheint die Figur tatsächlich in der Szene herumzulaufen, obwohl nicht einmal die Perspektive stimmt.

Abschließend habe ich versucht folgende Standardtricks zum Beschleunigen der Bildberechnung anzuwenden.

Dazu gehören:

  • Anti-Aliasing runtersetzen
  • unnötige Berechnungen herausnehmen (in meinem Beispiel brauche ich kein Subsurface Scattering)
  • die Octreezahl anpassen (Versuch & Irrtum, was am schnellsten ist)
  • die Raytracingauflösung runterschrauben
  • und prinzipiell unnötige Einstellungen, 3D-Objekte und Effkte vermeiden. Aber auch das hat natürlich seine Grenzen. Die bereits erwähnte Ozeanszene hat trotz dieser kleinen Tricks, trotz des Netzwerkrenderns und trotz der Miteinbeziehung des Servers geschätzt 10 Tage bei einer  Auflösung von 960px x 540px gebraucht.

Du kannst die Beispieldatei, mit der die GIF-Bilder erstellt wurden, einfach herunterladen indem du diesen Beitrag über Facebook, Twitter oder Google+ teilst.


  • Diesen Beitrag weiterempfehlen:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Lösen Sie bitte die Rechenaufgabe. *