From 794ed4ba38e7e381ddfd99aaedeaad69f71f3879 Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Wed, 29 Jul 2026 11:37:52 +0200 Subject: [PATCH] Tree Generator v1.12.0: Gabelung statt Nadeln, Droop-Kurve regelbar - 'Sub Start'/'Sub End' + hoeheres 'Sub Up': Zweige folgen ihrem Elternast und bilden Y-Gabelungen (Weber-Penn "split") statt seitlich abzustehen - 'Droop Curve': 2 = weicher Bogen (Palme), 4+ = scharfer Ellbogen (Kaktus) Co-Authored-By: Claude Opus 4.8 --- blender_manifest_tree.toml | 2 +- dist/index.json | 8 +++--- dist/stylized_tree_generator-1.10.0.zip | Bin 15650 -> 0 bytes dist/stylized_tree_generator-1.12.0.zip | Bin 0 -> 15970 bytes stylized_tree_generator.py | 34 ++++++++++++++++-------- 5 files changed, 28 insertions(+), 16 deletions(-) delete mode 100644 dist/stylized_tree_generator-1.10.0.zip create mode 100644 dist/stylized_tree_generator-1.12.0.zip diff --git a/blender_manifest_tree.toml b/blender_manifest_tree.toml index b0c7ffd..5f65411 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.10.0" +version = "1.12.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 fe2b845..fc36ca4 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.10.0", + "version": "1.12.0", "type": "add-on", "maintainer": "D4rkst3r", "license": [ @@ -48,9 +48,9 @@ "Mesh", "Modeling" ], - "archive_url": "./stylized_tree_generator-1.10.0.zip", - "archive_size": 15650, - "archive_hash": "sha256:995b37759449eab7f767bc87dcd7917bdac4382c3a2a8d37e1e0c9dc9d11eb30" + "archive_url": "./stylized_tree_generator-1.12.0.zip", + "archive_size": 15970, + "archive_hash": "sha256:f0dd283fe891b98f295882a73ba8d7f5dd9618d2367558ba580f3880fba5cc1c" } ] } \ No newline at end of file diff --git a/dist/stylized_tree_generator-1.10.0.zip b/dist/stylized_tree_generator-1.10.0.zip deleted file mode 100644 index a9a1bd948d7be969df29e37e42eaff1bc938d993..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15650 zcmZ|0V~{R9&@DPP_Sm*<+qP}n-ecRgZQHhO>lx3!?|1H>drzH{RI(~bSO4frx;ovp z6lFlcP=SDepn%MDesoO_A3uqJfq-WJ8)*OS8rz!Lo0>Tr*csVdnVY$|(z`m?*{Uf{ zTMsk->B0F%6t(b>WA0F$8*y@zM1a|bQ=7nTNF^xA*$K$tLf} zqlAzN=a)#gTJJoCcVAtP=chkFyHoj}e}NSLe>RPN%9BRn0Rr0I00M&j&!z?jR`yn| z1_tzwUcG*|&f6VL2mdOwJO0s;bFV9%jYl6NNy@)dKQ_3irGrW1sFcGA z?Z#DHtO<+>EdJeQ-z3|5fD!^Dm!veG>+iczutT%r2o^8yXMmXq zJ{b%0Mfx%6J!SMhE~%Z5E9f^I8J&-FQ1RZH78}m8;2Rw?*rEdGpzC}GV%e9uhUj`2G;j-&_pea*J-_ZWsUTxVVr!py*eEfZWXjB{H!b?LjT z^~m?EM*R%PcSw3xM;GjY;VU5H|9dBj6P{BKR2nku+n|)oJ0utkiImg~pY^5hFbtGK zZ5lXt!50xh>^}wO1PgoE%a7+roUf1Hpc)FS_mE%u7?IJ!Cg(Nf9|(p#P`Ak$*onvBy{YRbTsfl+u0NdE)6em^>)Ch{#s!W6%PuEkHA5kQ81j7& zJ*L?3#&-lOWbEeb$7$jiPOjz{e$GC;h=?_;VO&AO8Jp)7gJPup9)|^)t9vI7B=V#I zFlBwX5coUf#Ewa#!mkMh{zeh4)*!W7$388B%B4np5Vdj(VKH(g*z*?TSG{eAN*CXL~D@UFc?27N%QBt_gFD*pb1Lt?F=Xn&9Phb#A5e3qZ*;GdOnre%Mlc}C%axIdHR zSq~3vupc0p6QC`c-ndqd=AeHIN1=_{yXztE z_;(l#v*pHUz;OZtB9>RJCyjJ|1~(%m{l8z45+FJPk3cvVV~#C8{$lVuV@oV%1->$C z3cQ|FAafaa24s)yYuf?x`P>Q0eOslUpp9k`B>_c1-{#QQ*v>>!h8UU;up_lDF!5Z` zUV<*~IaO3tu5;*~0s95H65r$vKLW~G9%~Z)^Neze%i6I0E#hfcAS@O(D zm?y9?2M1~r^q{g^J`8#k_>NRrEDQv2AQP714NUr!Q=8Lyz@S5ifLevg`o*T09&{iu%QNQaU=8TI?BR;`CGgI>4QKrcHV6Y3BLvV0 z%u0i(;{dz3;6;$;wH!FCRKURI{_b{ozb&&LjzoN+kY)GR8GeU^be06K{s%13z~Av@ zpny<3#vl?V)q7e)hb6> zNkx)u597nqM2RSP$W{*cwZ$^7|~F-u|((vl9m8bdUMwpBLH!DnMP=Egzf{Su8P7^jQs6ula-+|ttvmga{5u#SwjgP*5M>9Z7>og0?xI%W>;Gl#qnR9|fTU@%=gB zn}t>oJ|vsZ<-tGRgf?D4>IT2VXXtSh;ssDh5r~-skg`xOR7^7SJsJo$^j=0l1tB}4 zP}ddprz{aLAEO}WH5d>dQ|M-rw4#pNBK&*kfQKaUWjM5AzoQ8t z*5y1>eR|+On_x9$2q!{Z(!75G$EA?EZrwV*$q(mhiCOR_EwVJ?4%5qtATc(VbfiEj z=)F{iNkt^QwZ4QjZCB73zAhw#46^M8NeK8Y_4;7SB2AxEMV*;N|NetQx*3^O|WpM^Ry?HtUsNR?K?dt6?Wnw9|a{ zU0^@;hN}|yWT6yyvpVM)(62{#%vJtvwoO&9Hp7W5E@VC!GK;G5$B-T#(-Dr`d_fGN zQzPRSqh|S%u{IUhM-*LDCvuLJlgPwS=$vIPeuFxzbYM(!&;%Zz|A7!>Rh8E0POLaI zVI_;aqtQw3684PAx8$!9Cs@$#pJr&D@&sTLKyWk^kQD%{YvOO)=-n0Dmv^0Ezzv1g!Ca9ju@KCFqFijc9GW! z3`CJ!cI4n_QrHp*UKMiQ1?q5m(e3-Y9&~$#^>&pJXIs5hW<`7yD0nFu7e=>JxAt2L zfFU>3Ahh(lG)P=^x?O#vOLv>Jy8=CAMuWCp5UtGRVDCJJ%B7=iTdYDN=_nFAuM!%( z!QQVN*bN?5jEB_T4+uBdi#=Z-vb3Fgy#YQ98UBiGZ@=+Rcx#M@0_S`9K4b8=>FoLz z<#?ot35OeCUc%iUU92Z zofS?jK?C0++=vFvpBmlhj`Ka=AB{37YnSNjNS}pU+aIUVXkSxMs`S)FLfXS7^e1M29nr z8I;6!J7=U9sAAbkjm`PTVv6L1%SXy6s8&a$$>=`v`6{dqmUugbURVsa!n@6@YssQw7pC7JV8g&F!H^Y5eAK+VyyEt4z7D%( zWjH)ioJnEp!281nq{|u4V+_Q6q#NN%I5ijk`I47RMjHB&XWj6qk;=D|Axt*BnST(f zHjCkvMmZm7AI9}|5Y%g(aPsK6{>dX@mHIJc*B?>pvbWYPGKA>1X!>2s^@>~{?Q06X zp!Zyw!PB+|1&&%66`a~+JFC73;wUV=LZ`3lLw=GtrV%XNLX3)&e2S&|Q_S8CM0gn7 zr83U`i}rrV_fv`_3d-90EOZ?6sE`BXD^blnDz}#739@!tIosC~GYI6g$<9B5t=)8= zxl*4Bv=2MY18h*~!1R0LaqFh2r_ z9Sf(>34ykGm1EN3K>;2jv8Wf}AA|1R}uinyv53nu5E< zY6*4Xzxy=)`7t-X9i9EGfYE=Wsrc%C`LmZRC2;aS2&R@AI|z+4<)D>j&^l%Vm0W`Gtqapk8b5zS{TlS-M8__1@kM-!I;0+qMa zhFPZUYUppit6sSKP~Bhlnes6&DJK{EeBGYO7HlL}@f zIcE zjw5(GN;IYn`+yL%;)-@mD>N%&O)&I8-_ z?3lDo#kX8fyFH02wOMCLyBdGn6)?k_p??r)*^Vrj)un&e0xmIE*)h##QFDmZJLS6~ ztIgrrpkKO1mnovzHi2kt(sR*6m|<0$&L9*!MWx+Gg`i`sy0(C(ZKM7Qy0gB=qZG0F z+JP&vr~dJw$AvFmg9sFt>4o#LcVs>=#c^yhYiopDeMp%#(kZC&dUdjgNVElANzrj^ zzE{t`MXhbbGf|1HUQBt!#tEDhU%gq3ncIL!v8Dz-G7RdAUJfTOlzR@dYcgr-nRb?0 zG8YVey;+<~I6z001@R^b<`nT6;Ih`OcpIdVdAxpk^F}49^A0}Hzwnmo!g&o%SGVZC z#}m&1@+`fvGMyl)^H=SV{S{<~UZ9jQV2ed{Q1bhS`bFb9^#E%bB5Ali1SRQ&_ri(~ z4TTF{`)1dYCD@-I@PQ^I7y|Nl7yp(GKB(n7r>C)3SqrD1-G3hY&_$&=m7GhoVHTUx zsI>_#vXc@~F+zaxNHOtkAP?Bh_F|wnS?c0?f(cYKEq~$`JroK;yA!>grJz-by&g&~ zG8C=vP=UlZPOu^fHd81p)>il*-n?&u;39n>)ZI-kHBUHu!>8qf^#n?j+LAg`mgGD= zv4K7`{9&8|Q)sc-QieLgZCZXTI28BYKHRe6p+ZPd=OnSAchepoNeq@AhBuGrU>Ql1%e|5kJyS5$Vrd5Lu0E;_ONj$?RM6 zhf+U*jiG!8KcGGXD?@f}D!VoiI~o)akE^}|tl?uvS%$bIyFAJ!q%z$*jJX~KL!ylc z{wal9m|4_%*w8E{+!O^$v(+^oFH5Z#o2V1$ZfO$4g0=0FXJXwuV##f8Z8P`0#D~UT z{`}uiW4is`8$)9`2#NA@rxl@cbq)&jVOU$vZn32W2xdF0s448E?DHP3b61{6Crax( zM~Y3Ee8EDIawPe!oK?RaH})CF@L`0I`a>Mo#L!cMAE8apxJ*r-69OA=g2Oc=WESrx z^3i4UW70{|XK{SsC!!AQOG@Nr6y#{Vb%h0{`c0Z&hazb14^@J!pt1OU&MfV4*0FBA z^|7mtIol(~FVl>^gZzd7&4t9l9SP^M^MHN3AG{6{dkd_^RdZOF9v!cOk7A7ME;pu% z=t4;E(m}p*Pv;>b>|dzteZ)YD3eLx~?|VqPw2@z5dXxV8CC9MGLd>k~d$^|pEBI@a z1i>LH!mq`6ixjaZBTx38izW`#`KOSnCPn!8Oqe!`9o7_%9gRX18Zlux*&}N#`xHy8 zr&5J6H{@}_e?}ftL5P^{@LzncN1`Ammkl)BVQcYfG=2WAohk>Ft!w%80*LkQvYy*K z4?$f+ZA$D3$ZB3c%=Y8#QUprcDf$6 zARjs|Hbz(!ZuI$_lOLHv;y3QDRc$ytIR3bK@pTIPLxatMA1D&5`rQY}3O3EQ1E2P#>J}6H{THrU_*~(detH+sQ ztl3gdOI=4;qC?5!gJxulSdk?StU#k-5FIrldGdxXi^~QLLIRHo93_fZLTQo9rDazz z`=jGNBZgwR6esZ%wzn*slprQP(#DoggKNK+djd_;j?#bq8B7M7t9oAi!zD=E#okb9 z&|0O^FY4z=_$I{|=#hOTU!_T{#p{&VsK=;daPSHE`P52G0k$mJ;(Yaikw|+ z5`X;O*I-EfspoQs^OFWV1sT8qsm;H6^xw1Z?Wl+vQPH7wf>n^FUKExJrugH_m~JMd z!zcQL2j?t6(I}c}4r?11KH)&+k2{PM)L29+*r}VD{49AIVQeX_9P`&#h#9^T<^)HM z9DfT|@KsC(nrC#Nv|u`nl#rH_3|<+TNRm3uvY68fL|C!(4Dud#O6|O$+`wM_-%Ln+ zR|bm%zhhKfH;fdg2@Q0JKKjaCdS;X~!}TI5-=e19=6Km3?dvObtXxu>`$`BEPpuZ? zvy7u@Y%9=&gpkIB0eNs$E2ApxSGnkvT(VpxZL>1h^xksRw8Ld=l{I8u5<%g$1IA3O zI=zM4JsaIP{|(`2XF>2gP212vNl>V#sp-0In{ zZFg5=jBHG+4D?`{aa8YBsIBnZx=8&~s_6PQZAtoD5y5ou)lb0rc z;6!J4O?McWV|NhLHrNdXO)r5OyavZLAEKykqT# z>Lfc=Kk+Q}=nM}8-88juq*cZ=5V+~&QuILaJLbA60CsHJvP0z6mmTfeJ(ac$dhNSkkv_}k5z>>7ilrLnp;%sfY542 zoSHk%l@XJIkbDt0yCy0TREJ@~DW3{`EIM9Ig@y{qe9;oE?a8wG^sWSWo)%wA^$Jwx zY9vTma7vy)RJW}w*v#BmJAGHjv}WjS>-5fP_WvjRx~%c&bdoL zR?mZUrGI9(b>Whql5@vUx<1bI$s1*>eCnOw;dh@L{G98!J@>{>#l0V?4Un$$p!E_A zk*GTnE*yL2ck14wu;1^lfiu$-jmPxHIU!B7`t`ZozD!!gKPKTaA5fx8EX5$zD#X@{ z6SpEM30A}`mCh!Hg-4H=V*fF<8UI&u@=+c++>sQ+*&}@jy}vnLMH=0k=ij**ss$BM zqL1KUSW2^OnI8$7jBT(|auKt&O#|1lMONzVK-M;Khy%v%)LmkI6^>+9^Jb^D0T18T$fTO zlD?n1)}c`h?=d(EDsWq3VTF;G_ZtlI=*VSG*<4%*G~}JJTh#}|A{CmcwkV04d_jSp z{tjHdIDvirU0CVxB{&JHCNh&(j)fY#L&Ka@MBj`OYJHEOTB~r7g`B5|}yhPd03f6~vOZRww3#yllhQ>+#u@7EdpZ$d)BqawT09l}cB z=UR&3G-kJujC3CH>)ZMB_2c9PZFD#jduyvMywrV1CjoPF0)p^YZ);)m7GCHch2T_Z zUt5=T8$1T4vOOz82gcesgi&zm^ZnWPuYgaa(~agop|)qYxA*F4TiJBaz2AkASl=2IMMdNDB;vAcqE%7YMS3 z-x6nJur)@^0!J!@xd((KvM0rhX8TM~!ZBTsesS}<5~K{-M+;SBIvT8stPm5Nh?P}q zxkg0(GE?FZuL%L&OObg{75zlrVtvcXtVrqPXtB%Ekh_JXf4$|0+9c`1P6%;N1E^_z zjhvsapGRQU1Y=!{Cgn;6fs9hJ!@b*26$}Iz;U_xbbA%$l% zQ_Ir@U+A=$dWcG z617THkB?g~f{n)gR<7#?wGApqJR(j(UXa#2A+?%oi4Tj#xo|_FCLAHN=O$n2K7Nol zV-;BI8G;6~Z6_fPjTAQt1B}{SiKWU!YmbBGD*CmKiMa}7BOuFiax3I7x|)e#u}LMr zBSMgJ)60P2>JOS^sk)wFSrM9+ON84CD#G&lD>@hW!W3};8vg!tU`p_39T%lBVI9>r zS_|bf+_Gz^L4)q${Hf>3rHkfeQvd=UZ>b0``2H#r>bI)-%6n=NQQj~!&t$Sz%=!;* zyA_+g3grDlha7Ct+sDL%>Cv@y=QgA30%q-Hc3L?@WgNW}4Eu|o$!8K>k4~tp$c;*b zt7jW1WDNQTE_o5QP`3Z)*BCDO>tW%$KaCAi?8=Z5r>)p2ak^Knli)sMiWouYk~9h)vMb!n*NGXf5IdaF`^$j z$&i6OOCGkqArTOIY@04UXO`jf(NIc4(|RJBD$lyBV57IO?Wx<4v;|lYCWwt$l$leO zYE{9reIA6MdljbsySmWgZ)=w69W=dqdKk)ytw+Qn*E`@;mrh>Gs4DB|&bf=E%~V=B zBvEObW9#|^;OksKb4NhJB~iXVO(j%S$W}~sk05Cqk%?fuf-*CwyS)_j^9qHcoWlDV zYiI$9khp_%4S)|kDvCZcQYBjykEtyEh?Vc?Uvm;ILyR$lVG`xpm(%RQ+cIkTCxWUo zthJ=3eDzDp<>v`3;l7XJOV%Z^dP}G6+`JM@ZgxMAptOIcu;*7)`UIXY8rTGA9MR#q zI7$kUuX8iMi)fdbjg7W)kVd_+_)YXQF}K&1pIt>B$%8k`-r4bVakeLyAGtf(@%*~k z*^r-4jc%ag;-Du#x8@=xu-9|8|7IXNA5+`xbW(Gt*Z=!>)R}-UuDu~K0K!s#v^iLr ze3plsVywB2Vn{iVEm2Qp+`0ee(qp^J!>x$gjoQcK_{xyqK^sBLMO!Y4Mx!mehc>B- z`?1PJ?bvwB(N>FV25G@I1v+JmXGu-Xs+7dN_70$=Rx87yIte2+V6Z8m?0_yak7E6{ zY&If7UrkDFQ}-^hDm+B9-nL722xPFvV0!v#xGoH}gD%&cnzLF$J{#33WqnVT!%<3^ zxst9Hp2dZn;`lJuHLKex)ttaU{rJ~|o?FH9Xq%h2Qiv`70@L}UCS$}DFl*@q7$|=o zP0Qxkg2@8Nlz$o+@SP$tJbfN@W)@HtQx`&<*8BP9Ks%T|6hWVu-Wm9u(rImENtE$hQ$@o zwy1Xl;!0>68BBR3rF)v-V4~;5+V4%mzH`!=%P}t|0u`dS>gXrMMdk_Z2}+`;=E-Fp zFAsHGhMFhFgaR^SUz9WCBbWMz9sy0g#Q zulWLmX;=Ewir}@E zYn6*d`rZQO@&tW!0Q6W3aOX?Yx&dAVRd?o4%IiojRa^a=nVW1S}O@^{Gc@45kC{3Q~%1CmQG4Ev{oF><6M3<*>qZ{vk^2sn7yp}qaHkd-BQcP?vy6zAAAv@$} zFFK5%x4KTgi%j@mHvM3}_9$?Mwz*70JIn;iaA0_Z3NXykhUi%%!6H;hQe7v(4_?)_ z8Kpf;XwoTkI!%_)wn2obM8P6@WJy~*=oXF5LjD;E)$osq+g{P46Y{Ow`|cIK!zbiO zZH`38?nu$re94qrB=`KJYRQ$aDACkr$&MZ|>41$jEmG+{VkwT(&h0rp(yMQ=PTjf? zP>QEEs}%^-3)HEGPW^&m_{DIPrt3>)K=MozBe0#Ja1(oZ5rtJxpdQyS>=qM$;)!uW z(mZ2Z#Vmd=XK5FEXoT0YEdOBoBVQ)FJYz=iOLP%Wb#5q~bJV(l4dN<+Z<)M(Qzzn)&x zVfLYAMb)b!5x&~Mvdp>A2>2Lx3f+Z<A4NCuSp2)(0CcXLKGD2V8Ym z5H$v=>xOdTXr@Ho=((z=r`dGyyh@*B*Nt~F^E8U|` znuW*e`(v4a66N0&+E3}Q> z=05hMDX&H766uImQ+oE34js1;x&^pxY-?&f6D$R8={aDZNcN+X(?Y-lr}X4Gk97(n`{s8+B6c3u<_UQ1czZS8X9xgm&$_`33Fs5Gv+ z@@G6Go0B~||2R`6iL1f<$LUKepoTiaKG$wHI{W}9nQXgz4=pKBejsU#J3~*=T0LBI8m*P(gnVlP}mgK6X>o4F3Ugyzl<{ND_UO`q-pIT5X>2h_zLESSF z_ES6Xry{u-6dN0T=1x1bZ&hYyU@A#IiX+h{`%SQue5@`F4p4)P9L3KI>9^pTs_@ao zGi~`hhX?{#)9F^lvC3fJ?80@D8r8OU6;aY=I(rI(U#{|o89nB7%}c3&HIp%LS_(zn zE`C#t-K%S5JrtqyHW;)X_Vjr|M0lLqP2)PjCf#z4Ro{JrgnfG%(D21T_;mbEJ(ez(J~xxGLx0IJFY7 z3K$Z}^j}@H8e}O6Z%@}KK3qj`qjRVa60sI(laZ*_iPN-8AW>)gdI8)Ox3_^suBc`F zHB^OtqM4mg3M8PoNVqTbEEM|`epJQ+BdBjDEoU-?4IaraZUD!O6~Cq;LXlEQW6P5!3~4E)G;BIR z6vO0QgmxlkU>>8{p81Xni$>HLnW@L#vyg}>MrqCU5e)U z7B}d*h`=!(4%O45xGz%S;Wg|EW@7|`*rw@3kUs0Vs6URolR2|uN_>MWb4F-`hZyvI z%=;8()eH?bmx1mZU^aH=kMT?c??c5WWTc__;h;OSiA9 z+Y`7pv)&0Gx=ZW=KDxZk)TOtNpKH|y9ItjXFz~&oqi&8Pq|^-De6^*h#7ZdtI}co_CByqsSFXQr$b z8&>@b>`nF;zIxU#E`>_+4AoO5%$}!P_AryHWhqTwhgZ@!hi4F*dys29>okc-2@2@%O80>`b1YW5t} z0<2l5-1EFK8aVX2Vdw~X&V=Oz25X-qKp5{0y=cd3nf11Cc9|F?I{FB*du>EjV#LX{;~g`*MD*(I!EZ5pa;B1L zh25#n1hY$d;AHe1eMpR0(CIcoqX{{*-~B*kCRsWEB3wJMU7Y_xC_EeWm#KrZjUd>v zo})cb%Tl{BjI*EWo%HzH)jxr#xgtYn3R~7p7%A$FYhR<#N54-aQ?jIP#fz12sk!|^ zZPDH&wk$}48v^JiocpIOjM^$-Eq!Vn?8Q%~X zCi05p6g=$nN@^-|+WAL*udlxoFSiwIV93=Fru(QbVO@u+h3n$+l6a6>@;Z7Wg+kt~GPf6l@bU z{kn>FCng2Lnq(QTjLo3z)v4zfG4)xyNA8FWMiA~*c_&AR!;q&6rbbb*uLfxN4_5gP zdD8TM395$!YGTDc9>|K>Sv3g6trgYuDcbB)B*hyN!s7<|Tivhu@9U@FAfky6;-l%@ z(5K{=1fmtV{_vn-b&7J*HwmF);nTn%7vmQVOW|A=u!JXcHy2Wz-}br0vDqvVwP)CA z%2b6434zS1E`x_XdGkxE#@!2q6^x+FdK3tyDry zpDZTk9-JpR^N?wHz$dkhZrb$_k2H6T%S?n6KZ5DWTPRZ#&to%lCJNw+Y88CII6E}( z0L%E4D!)wV3k-Ym_VmW*MS*~uG#t$#;&lyu=C^?5>hAXOarX0`F2fmY$Qm&9u^^@% z&&cs=mc98VF&Sw%E1|V5Lon9=$y-1(F&jPQMkKF8CDhT)z1ZTYk@TD^yIQXC^{J*W z0i6G~1rg^hwy_ja%nSn5gdmZY_&o|x zy!Y+O)`P#N>ml?!_3-)3Aa^P_i4Ebtq>Foh0?5l^C8H6r1w5vgq+XIU$&RJ7e}Sm9 zV@}(oFGM;h3$H^)Aq^X2m^^fRcw@7+&ueyxo8Bd~)|F z+x4|CF!cm2h_e3#v8ipx`7RAH*Na0LXDv{yTzuIHvRI8RIIsCywrX<%Oq=!a(AERcrz#Ww`TPF($qzWpfydzTlA3yduJ@e;ufrb221OgDb?F>Y zh27CNTX{+*wKqO$B_Jjc+uOHnG~ryElgPJsaEGCZS7GSF^bc)j=wfb%RjSATp6Wh7 zwtRxL9F^OlN$QHnK{=4000rJ)DuZZSy;BW>*i&SS8JA}9?o%t&|mWyjC;#jUb} zVuZ43`V~f)s{76<*cBZ#){-V>WgSz!`tz*zGLXFh~7U3+lj z31YjEV@HsF!`_`PA6u);bE(Tk)=VK6Jbd`C0o>gNL>p+g*x{9V=mt<(X#GV4@bR!OOgppr& zD>@+&VN{K?X(th)bdu0f2?6N?<(?Q|!|;$xI1!)|*<#B>!T~}>j;8Rr8v{-vO&%Lf zqJiV&ZChI)raq=~6<1QOv9Iou!<=cxKtIQPcmzZ7SNSko9}RYKHJkR>g(_eTl<+tM zQg)2gVKW^WOHQbv>jer! z77kbq$iY6&FQ8nXpzs#Aa(*qoI;0gsau;n(D3Tfq#u{?RK>jKXJ+IvF%xkzF!>U&z zc&2d@%*1vA>9G9JL4`(RW|RzpD9qfrqT61y4n$Vw5bQmVxFz>P-%8p94SP<3Pd`&S z@yp@xnEQLLo1xaboxLm%qo55SyXMClRYQ>33lS916Ze1BE4F!N{yc+FDeQ-3{M%SG zK+;=tTq{WY1hN*gEoV*Ssfo-&L5nW(IuzEMB0kn$dSEKMZx@80At$qd0EQBCOlaFo z-pf(Svs(27`TaI!eKTiqLCB7BIglfI_-7-MGyGAFc}iJY9YZ=-DDI8s)KoO+x!~y$ zd}3CC;P`ov2{DoQ-4GYd5KYOdKs?!YvOg#d1Gd8Mmmm?38ib9Fa$q_zF%{b)>1^9F zQzd4i`1rAj1ZwxEKFr9OD@cT|m`RcRd%39CTa>=Uw#)E-7Zm)ZYm*g&KPNY0kXj&( zB#O0;S3Lge$iJBW!NZab;ybHlR=f0luWZUR*BR#7&V<_HsQ$#DcIt{fuorkc0lNQe zq@8ID1zvuRJ`6s~CG2Ub`*C}EarWUn`#3i_I{L9Yxt(y<=##$Zw7)=HLE=)S=Kc)5G%Y zD-l@d^<$yuQLu1M^D(L}cZH#9n=?5l5hwJSBE3|1jH%ptzj<* zYCoA=4JyNyOc4f?I6o?r${i11bqlgKPJIF#m|$9|g7nb)BMn$**^p^WBe&@6X=7Ds9qk9s>V8KD>Y~ESpUc z7*jcB8Z2Wia=XJh!T4O;b;k)iHOA+*l)YT8^2Q%ejq#MB>kNh&o)(AsXN`i&Co$9j zCMK&4<#k#Bezh1qA;%?qf!BXj#Zp1@3PvRSf5?&;zl@QHzc))MY)D&9$MjK&l|`kn zeU3dOu~s~x_?EJy`6Jrfqo()bYCOEb*tG#@RCZ5QVENH>@YQp`SZ{@gs3tVRUeBqQ z)QYuTm~l7>3#L(m?%BSyq;07DrafunKmGjLRP)qeV!vp`mC`tP+?{S9H3Ar0GR z`%X;iK8n_y!e_e!`nIWiV$u%Q>XcGhGxQD)^m7u!)sLsykK>20U%AYbE>U|y&My+w z$XU^8c>le<$GnzY2hW+JaR7qdEV7=(vh9;1K_F2=ZU|{SOm( I|7Z3808qCpF#rGn diff --git a/dist/stylized_tree_generator-1.12.0.zip b/dist/stylized_tree_generator-1.12.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..7dd44899cb275d5878affc883896742ce2a87242 GIT binary patch literal 15970 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 Q670X}_g`EP_@C4N0;vJX-v9sr literal 0 HcmV?d00001 diff --git a/stylized_tree_generator.py b/stylized_tree_generator.py index fc88c79..f378080 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, 10, 0), + "version": (1, 12, 0), "blender": (4, 2, 0), "location": "View3D > Sidebar > Tree Gen", "description": "Parametrischer Baum-/Palmen-/Busch-Generator (Geometry Nodes) mit Wachstums-Stufen", @@ -38,11 +38,14 @@ DEFAULTS = { "Branch End": 0.95, "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 "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) + "Sub Start": 0.45, # Ansatzbereich der Zweige am Ast ... + "Sub End": 0.95, # ... nahe 1.0 + hohes Sub Up = Gabelung "Sub Length": 0.55, - "Sub Up": 1.4, + "Sub Up": 2.2, # hoch = Zweig folgt dem Ast (Gabel statt Nadel) "Sides": 12, # Stamm rund genug fuer die Wurzelbretter # (+104 Tris ggue. 8 - gemessen, lohnt sich) "Branch Sides": 4, # Aeste sparsamer @@ -129,14 +132,15 @@ PRESETS = { # Droop nach oben kruemmen (Saguaro-Silhouette). Keine Sub-Aeste. "kaktus": { "Height": 3.0, "Trunk Radius": 0.28, "Bend": 0.08, "Taper": 0.10, - "Branch Count": 2, "Branch Length": 1.6, "Branch Up": 0.05, - "Branch Start": 0.28, "Branch End": 0.5, + "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": -2.2, # negativ = Arme kruemmen nach OBEN (Saguaro) + "Branch Droop": -3.0, # negativ = Arme kruemmen nach OBEN (Saguaro) + "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, - "Tip Blunt": 0.45, + "Sub Count": 0, "Crown Taper": 0.0, "Root Flare": 0.25, + "Root Lobe Depth": 0.0, "Tip Blunt": 0.45, "Sides": 16, "Branch Sides": 12, "Ribs": 9.0, "Rib Depth": 0.09, }, } @@ -211,9 +215,12 @@ def build_group(): # Droop darf NEGATIV sein: dann kruemmen sich die Aeste nach OBEN # (= 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("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) + add_in("Sub Start", 'NodeSocketFloat', DEFAULTS["Sub Start"], 0.0, 1.0) + add_in("Sub End", 'NodeSocketFloat', DEFAULTS["Sub End"], 0.0, 1.0) add_in("Sub Length", 'NodeSocketFloat', DEFAULTS["Sub Length"], 0.05, 5.0) add_in("Sub Up", 'NodeSocketFloat', DEFAULTS["Sub Up"], -3.0, 3.0) add_in("Sides", 'NodeSocketInt', DEFAULTS["Sides"], 3, 32) @@ -543,8 +550,10 @@ def build_group(): L(rfac.outputs[0], _sock(rscale, "Scale")) # Droop: Spitzen haengen nach unten (Palmwedel) -- quadratisch = schoene Kurve - dsq = N("ShaderNodeMath"); dsq.location = (1350, -320); dsq.operation = 'MULTIPLY' - L(rspar.outputs["Factor"], dsq.inputs[0]); L(rspar.outputs["Factor"], dsq.inputs[1]) + # Droop-Kurve: Exponent 2 = weicher Bogen (Palmwedel), hoeher = der Arm + # bleibt erst flach und knickt dann scharf ab (Saguaro-Ellbogen). + dsq = N("ShaderNodeMath"); dsq.location = (1350, -320); dsq.operation = 'POWER' + L(rspar.outputs["Factor"], dsq.inputs[0]); L(V["Droop Curve"], dsq.inputs[1]) dmul = N("ShaderNodeMath"); dmul.location = (1500, -320); dmul.operation = 'MULTIPLY' L(V["Branch Droop"], dmul.inputs[0]); L(dsq.outputs[0], dmul.inputs[1]) dneg = N("ShaderNodeMath"); dneg.location = (1650, -320); dneg.operation = 'MULTIPLY' @@ -567,9 +576,12 @@ def build_group(): # Curve to Points keine Punkte -> es entsteht schlicht nichts (kein Fehler). strim = N("GeometryNodeTrimCurve"); strim.location = (2100, 520) L(_out(rsetp, "Geometry"), _sock(strim, "Curve")) + # Wo am Elternast die Zweige sitzen. Nahe 1.0 zusammengedraengt + hohes + # "Sub Up" ergibt eine GABELUNG (Weber-Penn "split") statt seitlicher + # Kinder - das ist der Unterschied zwischen "Stab mit Nadeln" und Geaest. try: - _sock(strim, "Start").default_value = 0.3 - _sock(strim, "End").default_value = 0.9 + L(V["Sub Start"], _sock(strim, "Start")) + L(V["Sub End"], _sock(strim, "End")) except KeyError: pass sp = N("GeometryNodeCurveToPoints"); sp.location = (2250, 520)