Files
stylized-rock-generator/README.md
T
D4rkst3randClaude Opus 4.8 f5bbd1bc35 Beide Addons auf die EcoGame-Konventionen abgestimmt
Rock Generator 2.4.0:
- Benennung Fels_<Form>_<Klasse> statt Rock_000 (Praefix/Form/Klasse im Panel,
  Klasse S/M/L/XL, optionale Durchnummerierung bei Batches)
- Bake liefert jetzt <name>_albedo und <name>_normal. AO/Cavity wird per Option
  MULTIPLIKATIV ins Albedo gebacken (Staerke regelbar) - separate Roughness- und
  AO-Paesse sind Default aus, weil Roughness in EcoGame eine Zahl im Master-
  Material ist. Gemessen: Albedo-Mittelwert 0.549 -> 0.433 mit AO, Kontrast rauf.
- UV1 Lightmap Default AUS (EcoGame beleuchtet dynamisch)

Tree Generator 1.18.0:
- Benennung <Art>_<Variante>_S<Stufe>, z.B. Birke_01_S1..S4 (statt stage0..3);
  Art-Feld und Varianten-Nummer im Panel, Art leer = Preset-Name
- UV1 Lightmap Default AUS

README: Konventionen dokumentiert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-29 12:25:09 +02:00

10 KiB
Raw Blame History

Stylized Asset Generators (Blender Addons)

Dieses Repo liefert zwei Extensions ueber eine URL:

Addon Panel Zweck
Stylized Rock Generator Rock Gen Batch-Rocks + Textur-Bake + FBX/LOD-Export
Stylized Tree Generator Tree Gen Baeume/Palmen/Bueschen/Kakteen (Geometry Nodes) mit Wachstums-Stufen

Ein Blender-Extension-Repo kann mehrere Extensions ausliefern — server-generate listet jedes Zip in dist/. Ein „Check for Updates" aktualisiert also beide.


EcoGame-Konventionen (beide Addons)

Abgestimmt auf A:\eco\EcoGame (UE 5.8). Kurzfassung:

Benennung

  • Felsen: Fels_<Form>_<Klasse> — Form = Buchstabe (A, B, …), Klasse = S/M/L/XL. Die Klasse meint eine eigene Silhouette, nicht blosse Groesse: rein groesser/kleiner macht die Engine ueber ScaleMin/Max.
  • Baeume: <Art>_<Variante>_S<Stufe>, z. B. Birke_01_S1Birke_01_S4. Zusatz-Ebenen haengen hinten an: _Leaf, _Frucht.
  • Texturen: <name>_albedo und <name>_normal — mehr nicht.

Textur-Bake

  • Nur Albedo + Normal. Roughness ist im Master-Material eine Zahl, keine Textur.
  • AO/Cavity wird ins Albedo multipliziert (Option „AO ins Albedo einrechnen", Staerke regelbar). Dunkle Ritzen und helle Platten stecken im Farbbild — das traegt den Stylized-Look. Separate Rough-/AO-Paesse sind Default aus.
  • 1024 px reicht fuer stylized Formen.
  • Tileable (4D-Torus) passt zum triplanar mappenden Master-Material.

Mesh

  • Echte Meter, Ursprung unten-mittig, FBX pro Asset bzw. LOD-Gruppe.
  • UV1 Lightmap ist Default aus — EcoGame beleuchtet dynamisch.
  • Meshes brauchen keine eigenen Materialien; in UE bekommt alles die Material-Instanz vom Master. Ein Platzhalter im FBX ist okay.
  • Scale-Randomisierung nur fuer die Form (nicht-uniform) nutzen, nicht fuer die Gesamtgroesse — sonst multipliziert sie sich mit ScaleMin/Max der Engine.

Stylized Tree Generator

Parametrischer Geaest-Generator (Stamm + Aeste + Sub-Aeste) als Geometry-Nodes- Gruppe. Blaetter/Krone macht man selbst — das Addon liefert die Struktur.

  • Presets: baum, palme, busch, tanne, eiche, birke, weide, toter_baum, kaktus — die Silhouette steuert die Kronenform (Crown Taper / Crown Bulge, Idee aus modular_tree / Weber-Penn).
  • Tri-Budget: alle Presets liegen unter dem Projektlimit (Baum ≤2500, Busch ≤800). Stellschrauben: Detail (Segmente) und Sides / Branch Sides / Sub Sides (Profilaufloesung je Ebene — Stamm rund, Zweige nur Dreiecke).
  • Wachstums-Stufen: Haken setzen + Anzahl waehlen → Setzling bis ausgewachsen, gleicher Seed = dieselbe Baum-Identitaet (fuer Wachstums-Systeme im Spiel).
  • Live bearbeiten: Nach dem Erzeugen liegen alle Regler am Modifier GN_Tree — im Viewport ziehen, der Baum aktualisiert sich sofort.
  • Export: „Modifier anwenden" friert das Ergebnis als normales Mesh ein.

v1.1.0: Aeste folgen jetzt der Elternkurve (Tangent/Normal aus Curve to Points, Goldener Winkel = Phyllotaxis) statt einer aus Weltkoordinaten gerechneten Richtung — Sub-Aeste standen vorher wie Nadeln quer zum Ast. Neu: Tip Blunt (Baum laeuft spitz aus, Kaktus endet stumpf).

Der kaktus nutzt Droop Curve fuer den Saguaro-Ellbogen (Arm laeuft flach raus und knickt dann steil hoch). Offen ist dort nur, dass die Rippen (Ribs) im Shading kaum sichtbar sind.


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.

Installation als Extension (via URL, mit Auto-Update)

Ab Blender 4.2 / 5.x als Remote-Extension-Repository einmal die URL eintragen, danach gehen Updates per Klick.

  1. Das Gitea-Repo muss oeffentlich sein (sonst kann Blender die Raw-URL nicht ohne Login laden).

  2. Blender → Edit → Preferences → Get Extensions → oben rechts das Dropdown → Repositories → „Add Remote Repository".

  3. Als URL eintragen:

    https://git.d4rkst3r.de/D4rkst3r/stylized-rock-generator/raw/branch/main/dist/index.json
    
  4. „Check for Updates" aktivieren, bestaetigen. Die Extension erscheint in der Liste → Install.

Updaten (Maintainer-Seite):

  1. version in blender_manifest.toml (und bl_info["version"] in der .py) erhoehen.
  2. ./build.ps1 (oder blender --command extension build … + … server-generate …).
  3. git add -A && git commit -m "vX.Y.Z" && git push.
  4. Nutzer: in Blender Check for UpdatesUpdate.

Das gebaute Zip + index.json liegen in dist/ und werden bewusst mitversioniert, damit die Raw-URL sie ausliefert.


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.3.0

  • Textur-Bake auf Zell-Look umgestellt: Voronoi „Distance to Edge" liefert hand-painted Zellen mit dunklen Outlines statt organischem fBm-Rauschen. Neu regelbar: Grundfarbe und Zellgroesse. Weiterhin nahtlos tileable.

Changelog v2.2.0

  • Textur-Bake-Button: backt ein nahtlos tileables Stylized-Rock-Set (BaseColor / Normal / Roughness / AO) als PNG. Nahtlos durch 4D-Torus- Projektion der UV (cos/sin von U und V) → tilet in beide Richtungen ohne Naht, ideal fuer Triplanar in Unreal.
  • Anleitung zur UE-Material-Verdrahtung: siehe docs/UE_Material_Triplanar.md.

Changelog v2.1.0

  • FBX-Export-Button (UE-ready): exportiert jeden Rock / jede LOD-Gruppe als eigene FBX mit use_custom_props=True (fuer fbx_type=LodGroup), Triangulate und passendem Smoothing (EDGE bei Auto-Smooth, sonst FACE). UE-Import-Tipp: Normal Import Method auf „Import Normals" stellen, „Import LODs" an.
  • Shading-Toggle: Faceted / Smooth / Auto-Smooth-nach-Winkel.
  • Pro-Rock-Varianz: Noise-Scale & Displace-Staerke zwischen Min/Max plus optionale nicht-uniforme Skalierung → ein Batch wirkt variantenreich.
  • Boden abflachen (Bisect) + Origin unten-mittig → Rocks stehen in UE plan auf.

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.