From 20e8e2432203507e742a78942a5e0855cbb4e39f Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Fri, 7 Aug 2026 06:53:28 +0200 Subject: [PATCH] Tree Gen 1.43.0: UCX in _Pieces_All.fbx - und zwei Fehler, die dabei auffielen Die Gesamtdatei kam ohne Kollision an, waehrend die Einzeldateien welche hatten. Jetzt bekommt jedes Teil auch dort seine Huelle, gleiche Konvention wie beim Stand-Baum: UCX_ als Geschwister, kein Elternteil. Sie entstehen VOR dem Umsetzen der Pivots, weil in der Gesamtdatei alle Teile noch an ihrer Originalposition stehen. Beim Nachmessen kamen zwei Fehler heraus, die auch die BESTEHENDEN Einzeldateien betrafen: 1) Die Huellen umschlossen das Laub mit _tree_ucx las alle Vertices eines Teils, also auch die Blatt-Cards. Gemessen am baum-Preset war die Huelle dadurch 1.4- bis 2.1-mal so gross wie das Holz. Jetzt nur noch Material-Slot 0. Die Spielseite hatte das fuer ihre Interim-Boxen laengst so gemacht - zu Recht. 2) Das Aufweiten war fuer schlanke Teile kaputt Nach dem Vereinfachen wurde die Huelle durch Skalieren um die Huellenmitte aufgeblasen. Bei langgestreckten Teilen entgleist das: liegt eine Flaeche fast durch die Mitte, wird der Hebel winzig und der Faktor explodiert - gemessen 4.2 an einem Stammsegment mit Laenge zu Dicke 13:1. An der dicken Eiche blieb es bei 1.0-1.4, deshalb ist es nie aufgefallen; erst der Wechsel auf Rinde-only machte die Teile schlank genug. Jetzt wird je Flaeche der ECHTE Fehlbetrag gemessen und die Vertices um genau diesen Betrag nach aussen geschoben - eine Verschiebung in Metern, kein Verhaeltnis. Iterativ, weil ein Vertex mehreren Flaechen angehoert und entlang seiner eigenen Normale wandert (ein Durchgang liess einen Rest stehen, der Test schlug an). Bleibt danach etwas uebrig, faellt die Funktion auf die unvereinfachte Huelle zurueck. Ergebnis am 12-teiligen Baum: alle Huellen 14-31 Verts (Budget 32), keine groesser als das 1.35-fache ihres Holzes. test_faell_teile prueft die Gesamtdatei jetzt auf: je Teil genau eine Huelle, richtiger Name, kein Elternteil, und Huellengroesse gegen die RINDE. Gegenproben: ohne Rinde-Filter 10 Fehler (1.41x bis 2.06x), ohne Huellen in der Gesamtdatei 1 Fehler. 27 Tests bestehen. Co-Authored-By: Claude Opus 4.8 --- README.md | 37 ++++++ blender_manifest_tree.toml | 2 +- dist/index.html | 6 +- dist/index.json | 8 +- dist/stylized_tree_generator-1.42.0.zip | Bin 48711 -> 0 bytes dist/stylized_tree_generator-1.43.0.zip | Bin 0 -> 50130 bytes stylized_tree_generator.py | 147 ++++++++++++++++++++---- tests/test_faell_teile.py | 56 ++++++++- 8 files changed, 222 insertions(+), 34 deletions(-) delete mode 100644 dist/stylized_tree_generator-1.42.0.zip create mode 100644 dist/stylized_tree_generator-1.43.0.zip diff --git a/README.md b/README.md index 3e645d8..02f12d8 100644 --- a/README.md +++ b/README.md @@ -563,6 +563,43 @@ Der Kaktus erzeugt regulaer **0 Cards** — kein Ast ist duenner als `Max Radius und das ist botanisch richtig. Vorher lief das still durch und man stand vor einer leeren `_Leaf`-Ebene; jetzt sagt der Operator es und nennt den Regler. +### UCX auch in der Gesamtdatei - und zwei Fehler, die dabei auffielen + +`_Pieces_All.fbx` kam ohne Kollision an, waehrend die Einzeldateien welche +hatten. Jetzt bekommt jedes Teil auch dort seine Huelle, gleiche Konvention wie +beim Stand-Baum: `UCX_` als Geschwister, kein Elternteil. Sie +entstehen VOR dem Umsetzen der Pivots - in der Gesamtdatei stehen alle Teile +noch an ihrer Originalposition. + +**Die Huellen umschlossen das Laub mit.** `_tree_ucx` las alle Vertices eines +Teils, also auch die Blatt-Cards. Gemessen am `baum`-Preset war die Huelle +dadurch **1.4- bis 2.1-mal** so gross wie das Holz - beim obersten Stammsegment, +das die Krone traegt, 1.67x. Jetzt nur noch Material-Slot 0 (Rinde). Die +Spielseite hatte das fuer ihre Interim-Boxen laengst so gemacht. + +**Und das Aufweiten war fuer schlanke Teile kaputt.** Nach dem Vereinfachen +wurde die Huelle wieder aufgeblasen, damit alles hineinpasst - durch Skalieren +um die Huellenmitte. Bei langgestreckten Teilen entgleist das: liegt eine +Flaeche fast durch die Mitte, wird der Hebel winzig und der noetige Faktor +explodiert. Gemessen an einem Stammsegment (Laenge zu Dicke rund 13:1) +**Faktor 4.2**. Bei der dicken Eiche blieb es bei 1.0-1.4 - deshalb ist es nie +aufgefallen. Erst der Wechsel auf Rinde-only machte die Teile schlank genug, +dass es durchschlug. + +Jetzt wird nicht mehr skaliert, sondern je Flaeche der ECHTE Fehlbetrag +gemessen (wie weit liegt der schlimmste Quellpunkt vor ihrer Ebene?) und die +Vertices um genau diesen Betrag nach aussen geschoben - eine Verschiebung in +Metern, kein Verhaeltnis, sie kann nicht explodieren. Das laeuft ITERATIV: ein +Vertex gehoert mehreren Flaechen an und wandert entlang seiner eigenen Normale, +die Ebene verschiebt sich also nur um den projizierten Anteil. Ein Durchgang +liess einen Rest stehen (der Test schlug an), nach wenigen ist er weg. Bleibt +doch etwas uebrig, faellt die Funktion auf die unvereinfachte Huelle zurueck - +ein paar Vertices mehr kosten nichts, eine vierfach zu grosse Kollision schon. + +Ergebnis am 12-teiligen Baum: alle Huellen 14-31 Verts (Budget 32), keine +groesser als das 1.35-fache ihres Holzes. Gegenproben: ohne Rinde-Filter 10 +Fehler (1.41x bis 2.06x), ohne Huellen in der Gesamtdatei 1 Fehler. + ### Stamm-UCX fuer den Stand-Baum Die Stand-Baeume bekommen eine konvexe Kollisionshuelle um den **Stamm**, vom diff --git a/blender_manifest_tree.toml b/blender_manifest_tree.toml index 9008dab..9fe096c 100644 --- a/blender_manifest_tree.toml +++ b/blender_manifest_tree.toml @@ -1,7 +1,7 @@ schema_version = "1.0.0" id = "stylized_tree_generator" -version = "1.42.0" +version = "1.43.0" name = "Stylized Tree Generator" tagline = "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen" maintainer = "D4rkst3r" diff --git a/dist/index.html b/dist/index.html index dc287cb..d2ba893 100644 --- a/dist/index.html +++ b/dist/index.html @@ -50,17 +50,17 @@ 34.1KB - stylized_tree_generator-1.42.0 + stylized_tree_generator-1.43.0 Stylized Tree Generator Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen link 4.2.0 - ~ all all - 47.6KB + 49.0KB -

Built 2026-08-07, 04:18

+

Built 2026-08-07, 04:53

diff --git a/dist/index.json b/dist/index.json index 1ff78fc..0aca9b6 100644 --- a/dist/index.json +++ b/dist/index.json @@ -82,7 +82,7 @@ "id": "stylized_tree_generator", "name": "Stylized Tree Generator", "tagline": "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen", - "version": "1.42.0", + "version": "1.43.0", "type": "add-on", "maintainer": "D4rkst3r", "license": [ @@ -98,9 +98,9 @@ "Mesh", "Modeling" ], - "archive_url": "./stylized_tree_generator-1.42.0.zip", - "archive_size": 48711, - "archive_hash": "sha256:e1b5eb8cb83ecabb60d24ce9c6be75be4c3d168aee86b9a3baa2856bdf440e80" + "archive_url": "./stylized_tree_generator-1.43.0.zip", + "archive_size": 50130, + "archive_hash": "sha256:2d87c780f90befc057e6895762c151bd6f4e9514485f5eb98b64993f6304893f" } ] } \ No newline at end of file diff --git a/dist/stylized_tree_generator-1.42.0.zip b/dist/stylized_tree_generator-1.42.0.zip deleted file mode 100644 index 23215e2d885e80aa8517ec2bbabe1faaae9dd848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48711 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 H00000KK-t( diff --git a/dist/stylized_tree_generator-1.43.0.zip b/dist/stylized_tree_generator-1.43.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..dd3a23fa7a076713ed50df5d17c40d7e621327ad GIT binary patch literal 50130 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
*Sr^sp3@y&v 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 literal 0 HcmV?d00001 diff --git a/stylized_tree_generator.py b/stylized_tree_generator.py index c1858f5..8e3a169 100644 --- a/stylized_tree_generator.py +++ b/stylized_tree_generator.py @@ -1,7 +1,7 @@ bl_info = { "name": "Stylized Tree Generator", "author": "D4rkst3r", - "version": (1, 42, 0), + "version": (1, 43, 0), "blender": (4, 2, 0), "location": "View3D > Sidebar > Tree Gen", "description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen", @@ -2211,6 +2211,13 @@ def _tree_ucx(quell_objs, name, max_verts=32, punkte=None): return None quelle = [v.co.copy() for v in bm.verts] + + # Rohzustand sichern. Das Vereinfachen unten kann bei LANGGESTRECKTEN + # Teilen entgleisen - siehe die Notbremse nach dem Aufblasen. + bm.verts.index_update() + roh_verts = [v.co.copy() for v in bm.verts] + roh_faces = [[v.index for v in f.verts] for f in bm.faces] + winkel = math.radians(1.0) while len(bm.verts) > max_verts and winkel < math.radians(60.0): bmesh.ops.dissolve_limit(bm, angle_limit=winkel, @@ -2224,29 +2231,75 @@ def _tree_ucx(quell_objs, name, max_verts=32, punkte=None): bm.normal_update() # Das Vereinfachen schneidet Ecken ab - die Huelle waere danach KLEINER als - # das Teil und der Spieler wuerde einsinken. Exakt so weit aufblasen, dass - # wieder alles hineinpasst. + # das Teil und der Spieler wuerde einsinken. Also wieder aufweiten. + # + # NICHT durch Skalieren um die Huellenmitte. Das war der erste Ansatz und + # entgleist bei langgestreckten Teilen: liegt eine Flaeche fast durch die + # Mitte, wird der Hebel winzig und der noetige Faktor explodiert. Gemessen + # an einem Stammsegment des schlanken "baum"-Presets (Laenge zu Dicke rund + # 13:1) kam Faktor 4.2 heraus - die Huelle war viermal so gross wie das Holz. + # Bei der dicken Eiche blieb es bei 1.0-1.4, deshalb ist es lange nicht + # aufgefallen. + # + # Stattdessen je Flaeche den ECHTEN Fehlbetrag messen (wie weit liegt der + # schlimmste Quellpunkt vor ihrer Ebene?) und die Vertices um genau diesen + # Betrag nach aussen schieben. Das ist eine Verschiebung in Metern, kein + # Verhaeltnis - sie kann nicht explodieren. if bm.faces and quelle: - mitte = Vector((0.0, 0.0, 0.0)) - for v in bm.verts: - mitte += v.co - mitte /= max(len(bm.verts), 1) - faktor = 1.0 - for f in bm.faces: - n = f.normal - if n.length_squared < 1e-12: - continue - d = n.dot(f.verts[0].co) - basis = d - n.dot(mitte) - if basis <= 1e-9: - continue - for co in quelle: - noetig = (n.dot(co) - n.dot(mitte)) / basis - if noetig > faktor: - faktor = noetig - if faktor > 1.0: - for v in bm.verts: - v.co = mitte + (v.co - mitte) * faktor + def _rest(): + """Groesster Abstand, mit dem ein Quellpunkt noch draussen liegt.""" + r = 0.0 + for f in bm.faces: + n = f.normal + if n.length_squared < 1e-12: + continue + d0 = n.dot(f.verts[0].co) + r = max(r, max((n.dot(co) - d0) for co in quelle)) + return r + + # ITERATIV. Ein Vertex gehoert mehreren Flaechen an und wandert entlang + # SEINER Normale - die Ebene verschiebt sich dadurch nur um den auf sie + # projizierten Anteil, also weniger als noetig. Ein einzelner Durchgang + # laesst deshalb einen Rest stehen (gemessen, der Test schlug an). Jeder + # weitere Durchgang verkleinert ihn; nach wenigen ist er weg. + for _ in range(8): + rest = _rest() + if rest <= 1e-4: + break + schuld = {} + for f in bm.faces: + n = f.normal + if n.length_squared < 1e-12: + continue + d0 = n.dot(f.verts[0].co) + ueber = max((n.dot(co) - d0) for co in quelle) + if ueber > 1e-9: + for v in f.verts: + if ueber > schuld.get(v, 0.0): + schuld[v] = ueber + if not schuld: + break + for v, d in schuld.items(): + n = v.normal + if n.length_squared < 1e-12: + continue + v.co = v.co + n.normalized() * d + bm.normal_update() + + # Notbremse: geht es nicht auf, ist die vereinfachte Huelle als + # Kollision unbrauchbar - dann lieber die unvereinfachte mit ein paar + # Vertices mehr. + if _rest() > 1e-4 and roh_faces: + bm.free() + bm = bmesh.new() + neu_v = [bm.verts.new(c) for c in roh_verts] + bm.verts.ensure_lookup_table() + for f in roh_faces: + try: + bm.faces.new([neu_v[i] for i in f]) + except ValueError: + pass # Doppelflaeche - die gibt es schon + bm.normal_update() bmesh.ops.triangulate(bm, faces=bm.faces[:]) me = bpy.data.meshes.new("UCX_" + name) @@ -2257,6 +2310,27 @@ def _tree_ucx(quell_objs, name, max_verts=32, punkte=None): return ob +def _rinden_punkte(ob): + """Weltkoordinaten der RINDEN-Vertices (Material-Slot 0) eines Faell-Teils. + + Blatt-Cards gehoeren nicht in eine Kollisionshuelle: sie stehen weit vom + Holz ab, und der Spieler soll gegen den Ast stossen, nicht gegen das Laub. + Gemessen an der Eiche blaeht das Laub die Huellen-Diagonale beim Ast um + 8-19 % auf - und beim OBERSTEN Stammsegment, das die Krone traegt, um 67 % + (1.75 m statt 1.05 m). + + Fallback auf alle Vertices, falls ein Teil keinen zweiten Slot hat: ein + reines Stammsegment ist ohnehin komplett Rinde. + """ + me = ob.data + if len(me.materials) > 1: + idx = {vi for p in me.polygons if p.material_index == 0 + for vi in p.vertices} + if idx: + return [ob.matrix_world @ me.vertices[i].co for i in idx] + return [ob.matrix_world @ v.co for v in me.vertices] + + def _stamm_punkte(tree_obj, matrix): """Stamm-Koordinaten vom Fuss bis zum KRONENANSATZ, in Weltkoordinaten. @@ -3044,9 +3118,26 @@ class TREEGEN_OT_export_pieces(Operator): # Damit Unreal den zusammengesetzten Baum deckungsgleich rekonstruieren # kann: hier stehen alle Teile noch an ihrer Originalposition. if s.piece_export_combined and teile: + # Auch die Gesamtdatei bekommt je Teil seine Huelle - dieselbe + # Geschwister-Konvention wie beim Stand-Baum: `UCX_` + # neben dem Teil, kein Elternteil. Vorher kam die Datei ohne + # Kollision an, waehrend die Einzeldateien welche hatten. + # + # Sie entstehen HIER und nicht in der Schleife weiter unten: dort + # sitzt jedes Teil schon auf seinem eigenen Massenmittelpunkt, in + # der Gesamtdatei stehen alle noch an ihrer Originalposition. + hullen = [] + if s.piece_ucx: + for t in teile: + h = _tree_ucx(None, t.name, max_verts=s.piece_ucx_verts, + punkte=_rinden_punkte(t)) + if h is not None: + hullen.append(h) _deselect(context) for t in teile: t.select_set(True) + for h in hullen: + h.select_set(True) context.view_layer.objects.active = teile[0] bpy.ops.export_scene.fbx( filepath=os.path.join(verzeichnis, basis + "_Pieces_All.fbx"), @@ -3055,6 +3146,11 @@ class TREEGEN_OT_export_pieces(Operator): use_triangles=True, use_custom_props=True, colors_type='SRGB', add_leaf_bones=False, bake_anim=False, path_mode='AUTO', apply_scale_options='FBX_SCALE_ALL') + for h in hullen: + hm = h.data + bpy.data.objects.remove(h, do_unlink=True) + if hm.users == 0: + bpy.data.meshes.remove(hm) # --- Je Teil eine Datei, Pivot = Massenmittelpunkt -------------- geschrieben = 0 @@ -3063,7 +3159,10 @@ class TREEGEN_OT_export_pieces(Operator): t.data.transform(Matrix.Translation(-schwer)) t.matrix_basis = Matrix.Identity(4) - hull = _tree_ucx([t], t.name, max_verts=s.piece_ucx_verts) \ + # Huelle aus der RINDE, nicht aus allen Vertices: das Laub blaehte + # sie beim obersten Stammsegment gemessen um 67 % auf. + hull = _tree_ucx(None, t.name, max_verts=s.piece_ucx_verts, + punkte=_rinden_punkte(t)) \ if s.piece_ucx else None _deselect(context) diff --git a/tests/test_faell_teile.py b/tests/test_faell_teile.py index ca688d9..9e85679 100644 --- a/tests/test_faell_teile.py +++ b/tests/test_faell_teile.py @@ -13,6 +13,7 @@ Aufruf: blender --background --factory-startup --python tests/test_faell_teile.p """ import os import sys +import math import tempfile import importlib.util from collections import Counter @@ -171,13 +172,64 @@ if blatt_summe != cards_gesamt: if gesamt: bpy.ops.wm.read_factory_settings(use_empty=True) bpy.ops.import_scene.fbx(filepath=os.path.join(OUT, gesamt[0])) - teile = [o for o in bpy.context.scene.objects if o.type == 'MESH'] + meshes = [o for o in bpy.context.scene.objects if o.type == 'MESH'] + teile = [o for o in meshes if not o.name.startswith("UCX_")] + hullen = [o for o in meshes if o.name.startswith("UCX_")] alle = [o.matrix_world @ v.co for o in teile for v in o.data.vertices] hoehe = max(c.z for c in alle) - min(c.z for c in alle) - print("Gesamtdatei: %d Teile, Hoehe %.2f m" % (len(teile), hoehe)) + print("Gesamtdatei: %d Teile, %d Huellen, Hoehe %.2f m" + % (len(teile), len(hullen), hoehe)) if len(teile) != len(einzeln): fails.append("Gesamtdatei hat %d Teile, einzeln waren es %d" % (len(teile), len(einzeln))) + + # Die Gesamtdatei kam frueher OHNE Huellen an, waehrend die Einzeldateien + # welche hatten - gemeldet von der Spielseite, die interimsweise eigene + # Boxen setzen musste. Je Teil GENAU eine Huelle, gleiche Konvention wie + # beim Stand-Baum: `UCX_` als Geschwister, kein Elternteil. + namen = {o.name for o in teile} + for h in hullen: + if h.parent is not None: + fails.append("Gesamtdatei: Huelle '%s' haengt unter '%s'" + % (h.name, h.parent.name)) + if h.name[4:] not in namen: + fails.append("Gesamtdatei: Huelle '%s' gehoert zu keinem Teil" + % h.name) + fehlend = sorted(n for n in namen if ("UCX_" + n) not in + {h.name for h in hullen}) + if fehlend: + fails.append("Gesamtdatei: %d Teile ohne Huelle (%s)" + % (len(fehlend), ", ".join(fehlend[:3]))) + + # Und die Huelle umschliesst das HOLZ, nicht das Laub. Beim obersten + # Stammsegment, das die Krone traegt, war der Unterschied gemessen 67 % + # (Diagonale 1.75 m statt 1.05 m) - eine Kollision, die weit ins Laub ragt. + nach_name = {o.name: o for o in teile} + for h in hullen: + koerper = nach_name.get(h.name[4:]) + if koerper is None: + continue + hc = [h.matrix_world @ v.co for v in h.data.vertices] + rinde_idx = {vi for p in koerper.data.polygons + if p.material_index == 0 for vi in p.vertices} + if not rinde_idx: + continue + rc = [koerper.matrix_world @ koerper.data.vertices[i].co + for i in rinde_idx] + + def spanne(pts): + lo = [min(c[i] for c in pts) for i in range(3)] + hi = [max(c[i] for c in pts) for i in range(3)] + return math.dist(lo, hi) + + h_d, r_d = spanne(hc), spanne(rc) + if h_d < r_d * 0.95: + fails.append("%s: Huelle %.2f kleiner als die Rinde %.2f" + % (h.name, h_d, r_d)) + if h_d > r_d * 1.35: + fails.append("%s: Huelle %.2f gegen Rinde %.2f (%.2fx) - sie " + "umschliesst das Laub mit" + % (h.name, h_d, r_d, h_d / r_d)) # Zusammengesetzt muss der Baum wieder seine volle Hoehe haben - das ist # der Beleg, dass die Teile deckungsgleich rekonstruierbar sind. if hoehe < 3.0: