Recent Changes - Search:

Blender Technical Director?

pmwiki.org

edit SideBar

BTD /

Modul6

BTD/Modul 6: Pipeline Engineering (USD, Alembic, I/O)

Inhalte:

  • Datenschnittstellen: USD, Alembic, FBX, GLTF
  • Import/Export-Automatisierung via Python
  • Blender in größere Studio-Pipelines einbinden
  • Strukturierung großer Produktionen (Shot-/Asset-Bibliotheken)
  • Tool-Entwicklungsrichtlinien (Code-Stil, UX)

Vorlesung 6

Pipeline Engineering – Datenschnittstellen, Automatisierung und Studio-Pipelines

Diese 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 Überblick

Typische Schnittstellen für Studio-Pipelines:

  • **USD** – universelle Szenenbeschreibung, hierarchisch, unterstützt Versionierung
  • **Alembic (.abc)** – Geometrie, Animation, Caching
  • **FBX (.fbx)** – weit verbreitet, Skelette, Animation
  • **GLTF (.gltf/.glb)** – Echtzeit-Engine-kompatibel, PBR-Materialien

TD-Perspektive:

  • Standardisierung
  • Performance
  • Reproduzierbarkeit
  • Engine-Kompatibilität
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

  1. 2.1 FBX Import
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)

  1. 2.2 GLTF Import
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)

  1. 2.3 USD Export
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

  1. 4.1 Version automatisch hochzählen
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)

  1. 4.2 Log erstellen
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

  1. 5.1 Material- und Textur-Check
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.


  1. 5.2 Warnungen in der Konsole
# 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 Integration

Best Practices:

  • konsistente Dateinamen
  • Versionierung im Dateinamen
  • automatisierte Imports/Exports
  • zentrale Logging-Systeme
  • Pipeline-kompatible Assets für Alembic, USD, FBX, GLTF
import bpy

print("Pipeline-Ready Assets prüfen...")
for obj in bpy.context.scene.objects:
    print(obj.name, obj.type)

7. Tool-Entwicklungsrichtlinien

Für stabile TD-Tools:

  • **Code-Stil:** PEP8-konform, lesbare Funktionen, klarer Namensraum
  • **UX:** Panel-Struktur, Operator-Feedback, Undo-Support
  • **Dokumentation:** Inline-Kommentare, Node Groups beschreiben, Versionierung
  • **Wiederverwendbarkeit:** Parameter, Node Inputs, Modularität
# 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 Übungen

Die Übungen zu diesem Modul setzen direkt auf den vorgestellten Konzepten auf:

  • Batch I/O Automation (FBX, GLTF, USD)
  • Versioniertes Asset-Management
  • Pipeline-Kompatibilitätsprüfung von Materialien

Die Aufgaben finden Sie unter Modul 6 – Übungen.


Edit - History - Print - Recent Changes - Search
Page last modified on December 14, 2025, at 11:59 PM UTC