Tree Generator v1.21.0: Palme an Referenz + Sub-Count-0-Bug
"Sub Count = 0" schaltete die Sub-Aeste nicht ab (Curve to Points klemmt auf 1) -> duenne "Nadeln" bei Palme und Kaktus. Jetzt echter Geometry-Switch. Palme am TreeIt-Referenzbaum ausgemessen: kurze Wedelstiele (0.78 m statt 3.4 m), Stamm 4.4 m mit dickem Kronenschaft. 854 statt 1784 Tris. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+42
-20
@@ -1,7 +1,7 @@
|
||||
bl_info = {
|
||||
"name": "Stylized Tree Generator",
|
||||
"author": "D4rkst3r",
|
||||
"version": (1, 20, 0),
|
||||
"version": (1, 21, 0),
|
||||
"blender": (4, 2, 0),
|
||||
"location": "View3D > Sidebar > Tree Gen",
|
||||
"description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen",
|
||||
@@ -80,27 +80,30 @@ DEFAULTS = {
|
||||
# Presets: nur die Abweichungen von DEFAULTS.
|
||||
PRESETS = {
|
||||
"baum": {},
|
||||
# Palme: ein Palmenstamm ist KEIN Baumstamm - er hat nahezu konstanten
|
||||
# Durchmesser (kaum Taper), einen glatt geschwollenen Fuss ohne Wurzelbretter,
|
||||
# und die Wedel sitzen alle in EINER Krone ganz oben.
|
||||
# Palme - am TreeIt-Referenzbaum ausgemessen (palm07_0 + frond stem_1):
|
||||
# Stamm 4.33 m, Radius 0.133 unten -> ~0.086 Mitte -> 0.106 OBEN
|
||||
# (Kronenschaft!), 11 Seiten, nur 150 Tris.
|
||||
# Wedel-STIELE sind kurze Stummel von 0.49-0.80 m - die langen Wedel machen
|
||||
# dort die BLATT-Cards (Spannweite 3.3 m, eigenes Objekt). Mein Generator
|
||||
# liefert also nur die Stiele; die Fiederung kommt als _Leaf-Ebene dazu.
|
||||
"palme": {
|
||||
"Height": 6.0, "Trunk Radius": 0.115, "Bend": 1.1,
|
||||
"Taper": 0.22, # fast konstanter Durchmesser statt Kegel
|
||||
"Trunk Tip": 0.9, # Krone endet stumpf, nicht spitz
|
||||
"Branch Count": 15, "Branch Length": 3.4, "Branch Up": 1.05,
|
||||
"Branch Start": 0.95, "Branch End": 1.0,
|
||||
"Branch Bend": 0.35,
|
||||
"Branch Droop": 1.15, "Droop Curve": 2.4, # Bogen, nicht haengend
|
||||
"Branch Thickness": 0.32, # Wedelstiel ist kraeftig wie ein Besenstiel
|
||||
"Branch Taper": 0.38, # bleiben bis zur Spitze Stiel, kein Draht
|
||||
"Tip Blunt": 0.24, # stumpfes Ende statt Antenne
|
||||
"Root Flare": 0.55, # nur leichte Verdickung ...
|
||||
"Height": 4.4, "Trunk Radius": 0.133, "Bend": 0.7,
|
||||
"Taper": 0.35, # sanft, nicht kegelig
|
||||
"Tip Blunt": 0.7, # Krone bleibt dick (Kronenschaft) UND die
|
||||
# Stiele laufen nicht drahtig aus
|
||||
"Trunk Tip": 1.0,
|
||||
"Branch Count": 11, "Branch Length": 0.78, "Branch Up": 0.9,
|
||||
"Branch Start": 0.9, "Branch End": 1.0,
|
||||
"Branch Bend": 0.3,
|
||||
"Branch Droop": 0.5, "Droop Curve": 2.2,
|
||||
"Branch Thickness": 0.16,
|
||||
"Branch Taper": 0.45,
|
||||
"Root Flare": 0.5, # leichte Verdickung ...
|
||||
"Root Lobes": 0.0, "Root Lobe Depth": 0.0, # ... ohne Wurzelbretter
|
||||
"Crown Taper": 0.0, "Crown Bulge": 0.0,
|
||||
"Sub Count": 0, # Wedel-Fiederung macht der User als Blattwerk
|
||||
"Detail": 0.7, # mehr Segmente -> weicher Bogen, kein
|
||||
# langes gerades Endsegment als "Draht"
|
||||
"Sides": 9, "Branch Sides": 4,
|
||||
"Sub Count": 0, # Fiederung = _Leaf-Ebene
|
||||
"Detail": 0.55,
|
||||
"Sides": 11, "Branch Sides": 4,
|
||||
},
|
||||
"busch": {
|
||||
"Height": 1.6, "Trunk Radius": 0.07, "Bend": 0.4, "Taper": 0.8,
|
||||
@@ -864,8 +867,27 @@ def build_group():
|
||||
mesh_branch = _to_mesh(rsetp, "Geometry", V["Branch Sides"], 3400, 200)
|
||||
mesh_sub = _to_mesh(sbset, "Geometry", V["Sub Sides"], 3400, -500)
|
||||
|
||||
# FALLE: "Curve to Points" klemmt Count auf mindestens 1 -> Sub Count = 0
|
||||
# schaltet die Zweige NICHT ab, es entsteht trotzdem einer pro Ast (gemessen:
|
||||
# Sub Count 0 und 1 ergeben identische 583 Verts). Bei Palme und Kaktus waren
|
||||
# das duenne, gerade "Nadeln" neben den richtigen Aesten. Deshalb hier ein
|
||||
# echter Schalter, der die Sub-Ebene bei 0 komplett verwirft.
|
||||
sub_on = N("FunctionNodeCompare"); sub_on.location = (4400, -350)
|
||||
try:
|
||||
sub_on.data_type = 'INT'; sub_on.operation = 'GREATER_THAN'
|
||||
L(V["Sub Count"], sub_on.inputs[2])
|
||||
sub_on.inputs[3].default_value = 0
|
||||
except Exception:
|
||||
sub_on = N("ShaderNodeMath"); sub_on.location = (4400, -350)
|
||||
sub_on.operation = 'GREATER_THAN'; sub_on.inputs[1].default_value = 0.5
|
||||
L(V["Sub Count"], sub_on.inputs[0])
|
||||
sub_sw = N("GeometryNodeSwitch"); sub_sw.location = (4550, -250)
|
||||
sub_sw.input_type = 'GEOMETRY'
|
||||
L(sub_on.outputs[0], _sock(sub_sw, "Switch"))
|
||||
L(_out(mesh_sub, "Geometry"), _sock(sub_sw, "True"))
|
||||
|
||||
join = N("GeometryNodeJoinGeometry"); join.location = (4700, 300)
|
||||
L(_out(mesh_sub, "Geometry"), join.inputs[0])
|
||||
L(_out(sub_sw, "Output"), join.inputs[0])
|
||||
L(_out(mesh_branch, "Geometry"), join.inputs[0])
|
||||
L(_out(mesh_trunk, "Geometry"), join.inputs[0])
|
||||
stuv = join # Name beibehalten fuer den nachfolgenden Merge-Zweig
|
||||
|
||||
Reference in New Issue
Block a user