Files
stylized-rock-generator/README.md
T
D4rkst3randClaude Opus 4.8 c5bb3e2612 Stylized Rock Generator v2.0.0: Haertung, Presets, LODs, Material, Tests
- 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>
2026-07-29 06:24:06 +02:00

4.4 KiB
Raw Blame History

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

  1. stylized_rock_generator.py herunterladen.
  2. Blender → Edit → Preferences → Add-ons → Install… → die .py waehlen.
  3. Haken bei Stylized Rock Generator setzen.
  4. 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 LOD0LODn als LOD-Gruppe fuer Unreal (siehe unten).
  • Presets: eingebaute Presets (Kleiner Kiesel, Grosser Bruchfels, Lava-Rock) plus eigene Presets als JSON (rock_presets.json neben 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_type verloren).
  • Nur die LOD-Gruppe (Empty + Kinder) selektieren, use_selection an.

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 Wert 66.0 war ungueltig. Jetzt radians(66°).
  • Bugfix: dissolve_limited(angle_limit=…) erwartet Radiant; der Grad-Wert wurde ungewandelt durchgereicht → uebermaessiges Dissolve. Jetzt radians(dissolve_angle).
  • Bugfix: Der Lightmap-Kanal wurde vor lightmap_pack nicht 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.