- Fix: smart_project/dissolve_limited angle_limit jetzt in Radiant (Blender 4.x/5.x) - Fix: Lightmap-UV-Kanal vor lightmap_pack aktiv setzen (UV0 nicht mehr ueberschrieben) - Fehlerbehandlung pro bpy.ops-Call; einzelner Rock-Fehler bricht Batch nicht ab - Modaler Batch-Modus mit Progress-Bar (ab modal_threshold) - Bevel + Weighted Normal Toggle - LOD-Set als fbx_type=LodGroup-Gruppe fuer Unreal - Preset-System (JSON) + eingebaute Presets - Platzhalter-Material-Zuweisung - Headless-Testskript (tests/test_rock_gen.py) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.4 KiB
Stylized Rock Generator (Blender Addon)
Batch-Generator fuer stylized Rocks in Blender, ausgelegt auf den Export nach Unreal Engine 5 ueber FBX.
Pipeline pro Rock: Basis-Mesh (Cube / Ico-Sphere) → Subdivision Surface → Displace mit prozeduraler Noise-Textur (Voronoi / Clouds / Distorted Noise) → zweistufiges Decimate → Limited Dissolve → Normalen-Reparatur → UV0 (Smart Project) + UV1 (Lightmap) → optional Bevel/Weighted Normal, Material, LOD-Set, randomisierte Skalierung/Rotation.
Getestet mit Blender 5.1.2 (Minimum laut bl_info: 4.2).
Installation
stylized_rock_generator.pyherunterladen.- Blender → Edit → Preferences → Add-ons → Install… → die
.pywaehlen. - Haken bei Stylized Rock Generator setzen.
- Panel: View3D → Sidebar (N) → Reiter "Rock Gen".
Update: einfach die neue .py erneut installieren (gleicher Modulname) oder das
Repo lokal ziehen und den Addon-Pfad in den Preferences auf den Repo-Ordner
zeigen lassen.
Features
- Basis-Formen: Cube oder Ico-Sphere, einstellbare Subsurf-Stufen.
- Noise/Displace: Voronoi / Clouds / Distorted Noise, Scale + Staerke, Seed. Seed-Variation ueber einen moderaten Welt-Offset (±25) vor dem Displace-Apply – Blenders prozedurale Texturen haben keinen echten Seed-Parameter.
- Cleanup: zweistufiges Decimate + Limited Dissolve, danach
normals_make_consistent(verhindert eingefallene/dunkle Flaechen). - UV fuer Unreal: UV0 (Smart Project) fuer Material-Texturen, UV1 (Lightmap) als separater, nicht ueberlappender Kanal fuer Static-Mesh-Lightmaps.
- Hard-Surface (optional): Bevel + Weighted Normal fuer einen "clean" Kantenlook.
- Material (Platzhalter): weist pro Rock ein Material zu und rotiert durch eine kleine Palette (Granite/Basalt/Sandstone/Mossy), damit nichts materiallos exportiert wird.
- LOD-Set: erzeugt LOD0–LODn als LOD-Gruppe fuer Unreal (siehe unten).
- Presets: eingebaute Presets (Kleiner Kiesel, Grosser Bruchfels, Lava-Rock)
plus eigene Presets als JSON (
rock_presets.jsonneben dem Addon). - Batch: synchron fuer kleine Mengen, ab
modal_threshold(Default 25) automatisch modal mit Progress-Bar – die UI bleibt bedienbar, ESC bricht ab. - Robustheit: Faellt ein einzelner Rock aus (z. B. 0 Faces nach zu aggressivem Decimate), wird nur dieser uebersprungen und aufgeraeumt, der Rest des Batches bleibt erhalten. Fehler landen in der System-Konsole.
LOD-Export nach Unreal
Blenders FBX-Exporter kennt keine eigene LOD-Option. Unreal erkennt eine
LOD-Gruppe aber, wenn das Eltern-Empty die Custom Property
fbx_type = "LodGroup" traegt und die LOD-Meshes in Reihenfolge (LOD0…LODn)
darunter geparentet sind. Genau das erzeugt der Generator.
Beim FBX-Export darauf achten:
- Custom Properties aktivieren (sonst geht
fbx_typeverloren). - Nur die LOD-Gruppe (Empty + Kinder) selektieren,
use_selectionan.
Beim Import in Unreal:
- Im FBX-Import-Dialog Import LODs aktivieren.
Referenz: Importing Static Mesh LODs Using FBX (UE Docs).
Tests
blender --background --python tests/test_rock_gen.py
Erzeugt 3 Rocks, prueft je Rock: keine losen Vertices, manifold, Normalen nach aussen (signed volume > 0), UV0 + UV1 vorhanden, und gibt eine Zusammenfassung (Vertex-/Face-Count) aus. Exit-Code 0 = alles bestanden, 1 = Fehler.
Changelog v2.0.0
Gehaertet & erweitert gegenueber v1.0.0:
- Bugfix:
smart_project(angle_limit=…)ist in Blender 4.x/5.x in Radiant ([0, 1.5708]) – der alte Wert66.0war ungueltig. Jetztradians(66°). - Bugfix:
dissolve_limited(angle_limit=…)erwartet Radiant; der Grad-Wert wurde ungewandelt durchgereicht → uebermaessiges Dissolve. Jetztradians(dissolve_angle). - Bugfix: Der Lightmap-Kanal wurde vor
lightmap_packnicht als aktiver UV-Layer gesetzt → UV0 konnte ueberschrieben werden. Jetzt explizit gesetzt, UV0 danach wieder als Render-Kanal. - Fehlerbehandlung um jeden
bpy.ops.*-Aufruf; einzelne Rock-Fehler brechen den Batch nicht mehr ab. - Nicht-blockierender modaler Batch-Modus mit Progress-Bar.
- Bevel + Weighted Normal als Toggle.
- LOD-Set als
fbx_type=LodGroup-Gruppe. - Preset-System (JSON) mit Panel-Dropdown.
- Platzhalter-Material-Zuweisung.