Tree Generator v1.13.0: Kaktus als echter Saguaro + Trunk Tip

Beide Arme laufen flach raus, knicken und steigen parallel zum Stamm, ohne ihn
zu ueberragen (Droop und Hoehe aufeinander abgestimmt). Neu 'Trunk Tip': steuert,
ob der Stamm duenn auslaeuft oder mit stumpfer Kuppe endet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-29 11:44:16 +02:00
co-authored by Claude Opus 4.8
parent 794ed4ba38
commit 10b27a25a9
6 changed files with 17 additions and 12 deletions
+9 -4
View File
@@ -1,7 +1,7 @@
bl_info = {
"name": "Stylized Tree Generator",
"author": "D4rkst3r",
"version": (1, 12, 0),
"version": (1, 13, 0),
"blender": (4, 2, 0),
"location": "View3D > Sidebar > Tree Gen",
"description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen",
@@ -39,6 +39,8 @@ DEFAULTS = {
"Branch Bend": 0.75, # Krummheit je Ast/Zweig (0 = gerade Staebe)
"Branch Droop": 0.0, # >0 haengt nach unten (Palme), <0 kruemmt nach oben (Kaktus)
"Droop Curve": 2.0, # 2 = weicher Bogen, 4+ = scharfer Ellbogen
"Trunk Tip": 0.3, # Anteil von Tip Blunt fuer die Stammspitze;
# klein = laeuft duenn aus, 1.0 = stumpfe Kuppe
"Branch Thickness": 0.32, # Ast-Dicke relativ zum Stamm
"Branch Taper": 0.55, # schwach verjuengen -> Roehre statt Kegel/Dorn
"Sub Count": 2, # Sub-Aeste je Hauptast (0 = aus)
@@ -131,15 +133,17 @@ PRESETS = {
# Kaktus: dicker, kaum verjuengter Stamm, wenige Arme, die per NEGATIVEM
# Droop nach oben kruemmen (Saguaro-Silhouette). Keine Sub-Aeste.
"kaktus": {
"Height": 3.0, "Trunk Radius": 0.28, "Bend": 0.08, "Taper": 0.10,
"Height": 3.4, "Trunk Radius": 0.28, "Bend": 0.08, "Taper": 0.10,
"Branch Count": 2, "Branch Length": 1.9, "Branch Up": 0.12,
"Branch Start": 0.30, "Branch End": 0.46,
"Branch Bend": 0.0,
"Branch Droop": -3.0, # negativ = Arme kruemmen nach OBEN (Saguaro)
"Branch Droop": -1.35, # negativ = Arme kruemmen nach OBEN (Saguaro);
# zu gross und die Arme ueberragen den Stamm
"Droop Curve": 4.5, # spaeter, dafuer scharfer Ellbogen
"Branch Thickness": 0.72, # Arme fast so dick wie der Stamm
"Branch Taper": 0.12, # Arme bleiben dick statt spitz zuzulaufen
"Sub Count": 0, "Crown Taper": 0.0, "Root Flare": 0.25,
"Trunk Tip": 1.0,
"Root Lobe Depth": 0.0, "Tip Blunt": 0.45,
"Sides": 16, "Branch Sides": 12, "Ribs": 9.0, "Rib Depth": 0.09,
},
@@ -216,6 +220,7 @@ def build_group():
# (= Kaktus-Arme statt Palmwedel).
add_in("Branch Droop", 'NodeSocketFloat', DEFAULTS["Branch Droop"], -3.0, 3.0)
add_in("Droop Curve", 'NodeSocketFloat', DEFAULTS["Droop Curve"], 1.0, 8.0)
add_in("Trunk Tip", 'NodeSocketFloat', DEFAULTS["Trunk Tip"], 0.05, 1.0)
add_in("Branch Thickness", 'NodeSocketFloat', DEFAULTS["Branch Thickness"], 0.05, 1.0)
add_in("Branch Taper", 'NodeSocketFloat', DEFAULTS["Branch Taper"], 0.0, 1.0)
add_in("Sub Count", 'NodeSocketInt', DEFAULTS["Sub Count"], 0, 12)
@@ -347,7 +352,7 @@ def build_group():
# Stammspitze duenner auslaufen lassen als die Aeste: sonst endet der Stamm
# mit einem sichtbaren flachen Deckel. Ein eigener, kleinerer Mindestwert.
ttip = N("ShaderNodeMath"); ttip.location = (-420, -80); ttip.operation = 'MULTIPLY'
L(V["Tip Blunt"], ttip.inputs[0]); ttip.inputs[1].default_value = 0.3
L(V["Tip Blunt"], ttip.inputs[0]); L(V["Trunk Tip"], ttip.inputs[1])
tmulr = N("ShaderNodeMath"); tmulr.location = (-260, 60); tmulr.operation = 'MULTIPLY'
L(inv.outputs[0], tmulr.inputs[0]); L(tdome.outputs[0], tmulr.inputs[1])
tmaxr = N("ShaderNodeMath"); tmaxr.location = (-110, 60); tmaxr.operation = 'MAXIMUM'