Recent Changes - Search:

Blender Technical Director?

pmwiki.org

edit SideBar

BTD /

Modul5

BTD/Modul 5: Geometry Nodes & Simulation

Inhalte:

  • Partikel, Fluids, Smoke, Cloth
  • Simulation Caching und Performance
  • Geometry Nodes für prozedurale Tools
  • Node Groups dokumentieren und versionieren
  • Pipeline-Integration von Simulationen (Alembic, USD)

Vorlesung 5

Geometry Nodes & Simulation – Prozedurale Tools und Simulations-Pipelines

Diese Vorlesung behandelt die Automatisierung und Pipeline-Integration von Simulationen sowie prozedurale Tool-Erstellung mit Geometry Nodes. Ziel ist es, reproduzierbare, skalierbare Systeme für Produktion und technische Qualitätssicherung zu entwickeln.


1. Einführung in Geometry Nodes

Geometry Nodes ermöglichen:

  • Parametrische Modellerstellung
  • Prozedurale Anpassungen
  • Wiederverwendbare Node Groups
  • Pipeline-kompatible Assets
import bpy

# Prüfen, ob das aktive Objekt einen Geometry Nodes Modifier hat
obj = bpy.context.active_object
for mod in obj.modifiers:
    if mod.type == 'NODES':
        print("Geometry Nodes Modifier gefunden:", mod.name)

2. Geometry Nodes – Node Tree Grundlagen

Jeder Geometry Nodes Modifier besitzt einen Node Tree:

  • Nodes sind Data Blocks
  • Inputs/Outputs steuern Parameter
  • Node Groups ermöglichen Standardisierung
mod = bpy.context.object.modifiers.get("GeometryNodes")
if mod:
    tree = mod.node_group
    print("Nodes im Modifier:", [node.name for node in tree.nodes])

3. Erstellen eines parametrischen Tools (Grundlage Aufgabe 1)

  1. 3.1 Modifier und Node Tree anlegen
import bpy

obj = bpy.context.active_object
geo_mod = obj.modifiers.new(name="ProceduralWall", type='NODES')
geo_mod.node_group = bpy.data.node_groups.new("WallGenerator", 'GeometryNodeTree')
tree = geo_mod.node_group
nodes = tree.nodes
links = tree.links

  1. 3.2 Node Group Inputs definieren
group_input = nodes.new('NodeGroupInput')
group_output = nodes.new('NodeGroupOutput')
tree.inputs.new('NodeSocketFloat', 'Length')
tree.inputs.new('NodeSocketFloat', 'Height')
tree.inputs.new('NodeSocketInt', 'Segments')
tree.outputs.new('NodeSocketGeometry', 'Geometry')

  1. 3.3 Beispielhafte Node-Verknüpfung
cube_node = nodes.new('GeometryNodeMeshCube')
links.new(cube_node.outputs['Mesh'], group_output.inputs['Geometry'])

Parameter wie Größe, Segmente und Material können über Inputs gesteuert werden.


4. Partikel- und Fluid-Simulation (Aufgabe 2)

  1. 4.1 Partikel-System anlegen
import bpy

obj = bpy.context.active_object
psys = obj.modifiers.new("Particles", type='PARTICLE_SYSTEM')
psys_settings = bpy.data.particles.new(name="ParticleSettings")
psys.particle_system.settings = psys_settings

print("Partikel-System erstellt:", psys.name)

  1. 4.2 Fluid-Simulation vorbereiten
import bpy

obj = bpy.context.active_object
fluid_mod = obj.modifiers.new(name="FluidSim", type='FLUID_SIMULATION')
fluid_mod.fluid_type = 'DOMAIN'

print("Fluid-Simulation Modifier angelegt:", fluid_mod.name)

Hinweis: Für Domain & Flow müssen zusätzliche Objekte konfiguriert werden.


  1. 4.3 Simulation als Cache exportieren (Alembic)
import bpy

bpy.ops.wm.alembic_export(filepath="//cache/particle.abc", selected_objects=True)
print("Simulation als Alembic exportiert")

  1. 4.4 Automatisches Baking von Simulationssystemen (Bonus)
import bpy

for obj in bpy.data.objects:
    for mod in obj.modifiers:
        if mod.type in {'FLUID_SIMULATION', 'PARTICLE_SYSTEM'}:
            bpy.context.view_layer.objects.active = obj
            bpy.ops.ptcache.bake_all()
            print("Baked:", obj.name, mod.name)

5. Simulation Cache Management (Aufgabe 3)

  1. 5.1 Cache-Informationen prüfen
import bpy
import os

for obj in bpy.data.objects:
    for mod in obj.modifiers:
        if mod.type in {'FLUID_SIMULATION', 'PARTICLE_SYSTEM'}:
            path = mod.point_cache.filepath if hasattr(mod, 'point_cache') else "n/a"
            size = os.path.getsize(path) if os.path.exists(path) else 0
            print(obj.name, mod.name, "Cache:", path, "Größe:", size)

6. Node Groups dokumentieren und versionieren

Node Groups erleichtern:

  • Wiederverwendung
  • Standardisierung
  • Versionskontrolle in Pipelines
import bpy

for ng in bpy.data.node_groups:
    print("Node Group:", ng.name)

Versionierung kann über Namenskonventionen wie ToolName_v001` erfolgen.


7. Performance-Optimierung bei Simulationen

Wichtige Maßnahmen:

  • Reduzierung unnötiger Substeps
  • Optimierung der Cache-Größe
  • Nutzung von Alembic oder USD für Interoperabilität
  • Evaluierung nur bei Änderungen
import bpy

for obj in bpy.data.objects:
    for mod in obj.modifiers:
        if mod.type in {'FLUID_SIMULATION', 'PARTICLE_SYSTEM'}:
            mod.show_viewport = False  # Performance beim Arbeiten verbessern

8. Pipeline-Integration von Simulationen

Simulationen sollten standardisiert exportiert werden:

  • Alembic für Geometrie & Animation
  • USD für Asset-Exchange
  • Automatisierte Benennung & Pfade
import bpy

bpy.ops.wm.alembic_export(filepath="//cache/sim_cache.abc", selected_objects=True)

9. Verbindung zu den Übungen

Die Übungen dieses Moduls bauen direkt auf den vorgestellten Konzepten auf:

  • parametrische Geometry Nodes Tools
  • Partikel- und Fluid-Simulation
  • Cache-Verwaltung und Export

Die Aufgaben finden Sie unter Modul 5 – Übungen.


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