|
BTD /
Modul6BTD/Modul 6: Pipeline Engineering (USD, Alembic, I/O) Inhalte:
Vorlesung 6Pipeline Engineering – Datenschnittstellen, Automatisierung und Studio-PipelinesDiese Vorlesung behandelt die Integration von Blender in Produktionspipelines, Datenschnittstellen (USD, Alembic, FBX, GLTF) und Automatisierung von Import/Export-Prozessen. Ziel ist ein robustes, reproduzierbares und versioniertes Asset-Management. 1. Datenschnittstellen ÜberblickTypische Schnittstellen für Studio-Pipelines:
TD-Perspektive:
import bpy
print("Unterstützte Export-Formate:")
print(bpy.ops.wm.save_as_mainfile.poll())
print(bpy.ops.export_scene.fbx.poll())
print(bpy.ops.wm.usd_export.poll())
2. Import/Export Automatisierung via Python
import bpy
import os
folder = "//assets/fbx/"
for filename in os.listdir(folder):
if filename.endswith(".fbx"):
bpy.ops.import_scene.fbx(filepath=os.path.join(folder, filename))
print("FBX importiert:", filename)
import bpy
folder = "//assets/gltf/"
for filename in os.listdir(folder):
if filename.endswith(".glb") or filename.endswith(".gltf"):
bpy.ops.import_scene.gltf(filepath=os.path.join(folder, filename))
print("GLTF importiert:", filename)
import bpy
bpy.ops.wm.usd_export(filepath="//exports/scene.usd", selected_objects=False)
print("USD-Szene exportiert")
3. Objekte nach Typen organisieren
import bpy
for obj in bpy.context.scene.objects:
if obj.type == 'MESH':
col = bpy.data.collections.get("Meshes") or bpy.data.collections.new("Meshes")
if col.name not in bpy.context.scene.collection.children:
bpy.context.scene.collection.children.link(col)
col.objects.link(obj)
bpy.context.scene.collection.objects.unlink(obj)
elif obj.type == 'LIGHT':
col = bpy.data.collections.get("Lights") or bpy.data.collections.new("Lights")
if col.name not in bpy.context.scene.collection.children:
bpy.context.scene.collection.children.link(col)
col.objects.link(obj)
bpy.context.scene.collection.objects.unlink(obj)
Diese Logik bildet die Basis für die Übung 1 – Batch I/O Automation. 4. Versioniertes Asset-Management
import bpy
import os
from datetime import datetime
base_path = "//assets/characters/"
obj_name = "Hero"
version = 1
filename = f"{obj_name}_v{version:03d}.blend"
while os.path.exists(os.path.join(base_path, filename)):
version += 1
filename = f"{obj_name}_v{version:03d}.blend"
bpy.ops.wm.save_as_mainfile(filepath=os.path.join(base_path, filename))
print("Neue Version gespeichert:", filename)
log_path = "//assets/version_log.txt"
with open(log_path, "a") as f:
f.write(f"{datetime.now()} | {obj_name} | Version {version}\n")
print("Versionierung geloggt")
Diese Technik bildet die Grundlage für Übung 2. 5. Pipeline-Kompatibilitätsprüfung
import bpy
for mat in bpy.data.materials:
for node in mat.node_tree.nodes:
if node.type == 'TEX_IMAGE':
image = node.image
if image is None:
print(f"Warnung: Material {mat.name} hat kein Texture Image")
if mat.use_nodes and 'Principled BSDF' not in [n.type for n in mat.node_tree.nodes]:
print(f"Warnung: Material {mat.name} enthält keinen Principled BSDF")
Diese Checks helfen, Probleme beim Export in externe Engines zu vermeiden.
# Beispiel: prüfen, ob Materialien Alpha-Kanal korrekt gesetzt ist
for mat in bpy.data.materials:
if mat.use_nodes:
bsdf_nodes = [n for n in mat.node_tree.nodes if n.type == 'BSDF_PRINCIPLED']
for bsdf in bsdf_nodes:
if bsdf.inputs['Alpha'].default_value != 1.0:
print(f"Material {mat.name}: Alpha != 1.0 – prüfen für externe Engine")
Diese Logik bildet die Grundlage für Übung 3. 6. Studio-Pipeline IntegrationBest Practices:
import bpy
print("Pipeline-Ready Assets prüfen...")
for obj in bpy.context.scene.objects:
print(obj.name, obj.type)
7. Tool-EntwicklungsrichtlinienFür stabile TD-Tools:
# Beispiel: Operator-Feedback
import bpy
class TestOperator(bpy.types.Operator):
bl_idname = "object.test_operator"
bl_label = "Test Operator"
def execute(self, context):
self.report({'INFO'}, "Operator erfolgreich ausgeführt")
return {'FINISHED'}
bpy.utils.register_class(TestOperator)
8. Verbindung zu den ÜbungenDie Übungen zu diesem Modul setzen direkt auf den vorgestellten Konzepten auf:
Die Aufgaben finden Sie unter Modul 6 – Übungen. |