Kurz gesagt
- Movie Render Graph-Callbacks können benutzerdefinierte Logik vor und nach dem Start und Abschluss eines Renderjobs oder Shots ausführen.
- Die Callback-Klasse wird von MovieGraphScriptBase abgeleitet; die entsprechenden Funktionen werden überschrieben.
- Für shotbasierte Callbacks lässt sich die Option Flush Disk Writes Per Shot im Global Output Settings Node aktivieren.
- Damit die Callback-Klasse bei jedem Start des Unreal Editors verfügbar ist, kann die entsprechende Python-Klasse aus einer init_unreal.py-Datei importiert werden.
Movie Render Graph (MRG) in Unreal Engine 5.4 bietet ein Callback-System, mit dem sich zusätzliche Schritte vor und nach Renderjobs ausführen lassen. Laut der offiziellen Dokumentation von Epic Games werden diese über den Execute Script Node eingerichtet, der dem Graph hinzugefügt wird. Dieser Leitfaden behandelt die grundlegende Einrichtung für Teams, die beim Renderstart Vorbereitungen treffen, nach Abschluss eines Jobs Ausgabedaten prüfen oder Abläufe pro Shot ausführen möchten.
Wann sind Callbacks nützlich?
Ein Callback ist benutzerdefinierter Code, der an einer bestimmten Stelle im Renderablauf ausgeführt wird. Für den Start und das Ende eines Jobs gibt es Job-Callbacks; für den Beginn und Abschluss jedes einzelnen Shots können Shot-Callbacks verwendet werden. So lassen sich beispielsweise nach Abschluss eines Jobs die Ausgabedaten prüfen oder nach einem Shot die zugehörigen Dateipfade verarbeiten.
Mit dem Execute Script Node in MRG können Callbacks in die Graph-Konfiguration eingebunden werden. Die Callback-Klasse wird von MovieGraphScriptBase aus der Python-API von Unreal abgeleitet. Die entsprechenden Funktionen werden mit @unreal.ufunction(override=True) überschrieben. Nach der Registrierung lässt sich eine Callback-Klasse über das Auswahlmenü im Execute Script Node verwenden.
1. Movie Render Queue-Plugin und Graph einrichten
Aktivieren Sie zunächst im Unreal Editor unter Edit > Plugins im Bereich Rendering das Movie Render Queue-Plugin und starten Sie den Editor neu. Im Projekt muss eine Level Sequence zum Rendern vorhanden sein.
Movie Render Graph ist über die Movie Render Queue erreichbar. Der Ablauf in Epics Dokumentation sieht folgendermaßen aus:
Öffnen Sie das Fenster der Movie Render Queue über
Window > Cinematics > Movie Render Queue.Klicken Sie auf die Schaltfläche zum Rendern und wählen Sie die betreffende Level Sequence aus.
Öffnen Sie im Menü
Unsaved Configder Spalte Settings die OptionMovie Render Graph (Beta).Erstellen Sie über
Create New Asseteinen Movie Render Graph, benennen Sie ihn und speichern Sie ihn.Öffnen Sie die erstellte Graph-Konfiguration über die Spalte Settings und bearbeiten Sie sie.
Im bestehenden Workflow können Movie Render Queue (MRQ) und Movie Render Graph gemeinsam eingesetzt werden. MRQ bietet eine Oberfläche zum Einreihen von Jobs und für Batch-Renderings, während MRG Renderabläufe über einen knotenbasierten Graph konfiguriert.
2. Python-Callback-Klasse erstellen
Das folgende Beispiel zeigt Callbacks für den Start und den Abschluss eines Jobs. on_job_finished wird ausgeführt, wenn der Renderjob abgeschlossen ist; der Callback kann sowohl bei erfolgreichem Abschluss als auch im Abbruchfall verwendet werden. Über das Attribut success in den Ergebnisdaten lässt sich prüfen, ob der Job erfolgreich war.
import unreal
@unreal.uclass()
class CallbackOverrides(unreal.MovieGraphScriptBase):
@unreal.ufunction(override=True)
def on_job_start(self, in_job_copy):
super().on_job_start(in_job_copy)
unreal.log("Render işi başlıyor")
@unreal.ufunction(override=True)
def on_job_finished(self, in_job_copy, in_output_data):
super().on_job_finished(in_job_copy, in_output_data)
unreal.log("Render işi tamamlandı veya iptal edildi")In diesem Beispiel wird beim Start und Abschluss des Jobs ein Logeintrag erstellt. Bevor Sie eigene Logik hinzufügen, sollten Sie klären, in welcher Phase der Callback ausgeführt wird und welche Daten er erhält. Job- und Graph-Konfigurationen werden dem Callback als Kopien übergeben. Änderungen im Callback wirken sich daher nicht direkt auf das ursprüngliche Asset in der Warteschlange aus.
Damit die Klasse im Menü des Execute Script Node angezeigt wird, muss sie registriert werden. Im Beispiel von Epic wird die Klasse für die aktuelle Sitzung registriert. Wenn sie bei jedem Start verfügbar sein soll, können Sie die Klasse aus einer der Dateien unter /Content/Python/init_unreal.py importieren. Dadurch wird sie beim Start des Editors geladen.
3. Zwischen Job- und Shot-Callbacks wählen
on_job_start wird beim Start eines einzelnen Renderjobs ausgeführt; on_job_finished läuft am Ende des Jobs. Enthält eine Level Sequence mehrere Shots, können on_shot_start und on_shot_finished jeweils für jeden Shot verwendet werden. Der Shot-Start-Callback wird ausgeführt, bevor der Shot eingerichtet wird. Der Shot-Abschluss-Callback erhält die Ausgabedaten des betreffenden Shots.
Shot-Callbacks lassen sich auf zwei Arten aktivieren: Aktivieren Sie im Global Output Settings Node des Graphen die Option Flush Disk Writes Per Shot oder überschreiben Sie in der Klasse die Funktion is_per_shot_callback_needed, sodass sie True zurückgibt. Aktivieren Sie diese Option nicht unüberlegt: Epic weist darauf hin, dass sie die Renderzeit verlängern kann, da auf das Schreiben der Dateien auf die Festplatte gewartet wird.
Was bringt das für Architektur- und Archviz-Workflows?
Visualisierungsteams, die mehrere Einstellungen oder Szenen in eine Warteschlange stellen, können wiederkehrende Abläufe mithilfe von Job- und Shot-Callbacks in den Renderprozess einbinden. Der Zugriff auf Ausgabedaten und Dateipfade nach Abschluss eines Jobs schafft beispielsweise eine Grundlage dafür, die von einzelnen Shots erzeugten Dateien an einen nachfolgenden Verarbeitungsschritt weiterzugeben. Die Dokumentation beschreibt jedoch weder einen bestimmten Dateibenennungsstandard noch eine fertige Archviz-Automatisierung; diese Logik muss projektspezifisch entwickelt werden.
Wenn eine Integration mit einer Renderfarm oder einem anderen Prozess vorgesehen ist, sind auch die Optionen für lokales Rendering und Rendering in einem separaten Prozess in MRQ relevant. Für das Rendering in einem separaten Prozess müssen die Projektänderungen gespeichert sein. Testen Sie die Callbacks mit einem kleinen Job, bevor Sie die tatsächlichen Abgabeeinstellungen verwenden. Prüfen Sie insbesondere, wie sich die Option zum Schreiben der Dateien pro Shot auf die Renderzeit auswirkt und ob die Klasse beim Start des Editors geladen wird.
Häufige Fehler
Nach der Aktivierung des Movie Render Queue-Plugins vergessen, den Editor neu zu starten.
Davon ausgehen, dass Shot-Callbacks automatisch ausgeführt werden; die Voraussetzung für das Schreiben pro Shot muss separat aktiviert werden.
Den Abschluss eines Jobs ausschließlich als erfolgreiches Rendering interpretieren. Der Callback kann auch im Abbruchfall aufgerufen werden; prüfen Sie den Erfolgsstatus.
Annehmen, dass Änderungen an der kopierten Job- oder Graph-Konfiguration im Callback das ursprüngliche Asset in der Warteschlange aktualisieren.
Übersehen, dass das Warten auf das Schreiben der Dateien nach jedem Shot die Renderzeit verlängern kann.
Quellen
2 QuellenQuelltexte werden nicht neu veröffentlicht; kurze Zitate sind gekennzeichnet, der Rest ist eigene Zusammenfassung und Einordnung.
Für Architektur- und Visualisierungsbüros in der Türkei liegt der eigentliche Nutzen von Callbacks im Potenzial, wiederkehrende Prüfungen nach dem Rendern oder shotbasierte Abläufe in einen strukturierteren Workflow einzubinden. Gerade bei Präsentationen mit vielen Shots bietet der Zugriff auf Jobdaten und Dateipfade einen nützlichen Ausgangspunkt für die Entwicklung eigener Automatisierungen.
Diese Funktion ist jedoch keine fertige Renderfarm-Lösung für sich; die Python-Klasse muss eingerichtet und passend zur Projektstruktur getestet werden. Das Warten auf das Schreiben der Dateien pro Shot kann sich auf die Renderzeit auswirken. Büros sollten die Callbacks vor der Abgabe mit einem kleinen Job prüfen und bei der Verwendung des Renderings in einem separaten Prozess daran denken, die Projektänderungen zu speichern.
Häufige Fragen
Wofür sind Movie Render Graph-Callbacks gedacht?
Sie führen benutzerdefinierten Code vor und nach dem Start oder Abschluss eines Renderjobs beziehungsweise Shots aus. Job- und Shot-Callbacks lassen sich über den Execute Script Node im Graph konfigurieren.
Wie aktiviert man Shot-Callbacks in Unreal Engine?
Aktivieren Sie die Option `Flush Disk Writes Per Shot` im Global Output Settings Node. Alternativ können Sie in der Callback-Klasse die Funktion `is_per_shot_callback_needed` überschreiben und `True` zurückgeben.
Wie lässt sich die Callback-Klasse bei jedem Start des Editors verfügbar machen?
Die Klasse kann aus einer der Dateien unter `/Content/Python/init_unreal.py` importiert werden. So wird sie beim Start des Editors geladen.



