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>
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
# 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 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.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)](https://dev.epicgames.com/documentation/en-us/unreal-engine/importing-static-mesh-lods-using-fbx-in-unreal-engine).
|
||||
|
||||
---
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
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.
|
||||
Reference in New Issue
Block a user