diff --git a/blender_manifest_tree.toml b/blender_manifest_tree.toml index 502829f..58aa4af 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.4.0" +version = "1.5.0" name = "Stylized Tree Generator" tagline = "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen" maintainer = "D4rkst3r" diff --git a/dist/index.json b/dist/index.json index 67429f5..d170991 100644 --- a/dist/index.json +++ b/dist/index.json @@ -32,7 +32,7 @@ "id": "stylized_tree_generator", "name": "Stylized Tree Generator", "tagline": "Parametrische Baeume, Palmen, Bueschen mit Wachstums-Stufen", - "version": "1.4.0", + "version": "1.5.0", "type": "add-on", "maintainer": "D4rkst3r", "license": [ @@ -48,9 +48,9 @@ "Mesh", "Modeling" ], - "archive_url": "./stylized_tree_generator-1.4.0.zip", - "archive_size": 11373, - "archive_hash": "sha256:421a702f2e5b088988db638dd7cbfb49de8126397476cfe192441bf069983c55" + "archive_url": "./stylized_tree_generator-1.5.0.zip", + "archive_size": 11772, + "archive_hash": "sha256:fe45391647074729afaac194801ab55c0d004c38f36b94737fdd6715e9c9501c" } ] } \ No newline at end of file diff --git a/dist/stylized_tree_generator-1.4.0.zip b/dist/stylized_tree_generator-1.4.0.zip deleted file mode 100644 index 52cb92a..0000000 Binary files a/dist/stylized_tree_generator-1.4.0.zip and /dev/null differ diff --git a/dist/stylized_tree_generator-1.5.0.zip b/dist/stylized_tree_generator-1.5.0.zip new file mode 100644 index 0000000..8d87d57 Binary files /dev/null and b/dist/stylized_tree_generator-1.5.0.zip differ diff --git a/stylized_tree_generator.py b/stylized_tree_generator.py index 48409e0..907d053 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, 4, 0), + "version": (1, 5, 0), "blender": (4, 2, 0), "location": "View3D > Sidebar > Tree Gen", "description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen", @@ -326,9 +326,23 @@ def build_group(): pass L(dirv.outputs[0], _sock(align, "Vector")) - inst = N("GeometryNodeInstanceOnPoints"); inst.location = (1050, 320) + # Aeste an die ELTERNDICKE anpassen: "Instance on Points" wertet Felder auf + # der Punkt-Domain aus, dort liefert "Input Radius" den Stammradius genau am + # Ansatzpunkt. Ohne das sind Aeste oben (duenner Stamm) genauso dick wie + # unten - und damit dicker als der Stamm selbst. + prad = N("GeometryNodeInputRadius"); prad.location = (900, 120) + pratio = N("ShaderNodeMath"); pratio.location = (1050, 120); pratio.operation = 'DIVIDE' + L(prad.outputs[0], pratio.inputs[0]); L(V["Trunk Radius"], pratio.inputs[1]) + pscale = N("ShaderNodeMapRange"); pscale.location = (1200, 120) + L(pratio.outputs[0], pscale.inputs["Value"]) + pscale.inputs["To Min"].default_value = 0.35 # nicht ganz kollabieren lassen + pscale.inputs["To Max"].default_value = 1.0 + pscale.clamp = True + + inst = N("GeometryNodeInstanceOnPoints"); inst.location = (1400, 320) L(_out(c2p, "Points"), _sock(inst, "Points")) L(_out(bsetr, "Curve"), _sock(inst, "Instance")) + L(pscale.outputs[0], _sock(inst, "Scale")) if align is not None: L(align.outputs[0], _sock(inst, "Rotation")) @@ -439,9 +453,22 @@ def build_group(): pass L(sdir.outputs[0], _sock(salign, "Vector")) - sinst = N("GeometryNodeInstanceOnPoints"); sinst.location = (2850, 520) + # Zweige ebenso an die Dicke ihres Elternastes koppeln. + sprad = N("GeometryNodeInputRadius"); sprad.location = (2700, 300) + sbaseref = N("ShaderNodeMath"); sbaseref.location = (2700, 180); sbaseref.operation = 'MULTIPLY' + L(V["Trunk Radius"], sbaseref.inputs[0]); L(V["Branch Thickness"], sbaseref.inputs[1]) + sratio = N("ShaderNodeMath"); sratio.location = (2850, 240); sratio.operation = 'DIVIDE' + L(sprad.outputs[0], sratio.inputs[0]); L(sbaseref.outputs[0], sratio.inputs[1]) + sscale = N("ShaderNodeMapRange"); sscale.location = (3000, 240) + L(sratio.outputs[0], sscale.inputs["Value"]) + sscale.inputs["To Min"].default_value = 0.4 + sscale.inputs["To Max"].default_value = 1.0 + sscale.clamp = True + + sinst = N("GeometryNodeInstanceOnPoints"); sinst.location = (3150, 520) L(_out(sp, "Points"), _sock(sinst, "Points")) L(_out(ssetr, "Curve"), _sock(sinst, "Instance")) + L(sscale.outputs[0], _sock(sinst, "Scale")) if salign is not None: L(salign.outputs[0], _sock(sinst, "Rotation")) sreal = N("GeometryNodeRealizeInstances"); sreal.location = (3000, 520)