GeoTree: Procedural Trees in Geometry Nodes

As far as I know, the anime leaves are comprised of a series of leaf cards. That’s what the icon named “Billboard1” is supposed to represent. I could probably make something that will look more “anime” from a user’s perspective, but I’m not sure how I’d go about doing that. Besides, the nodegroup itself will probably have a better name. :slightly_smiling_face:

But if you need anything else, be sure to let me know!


I plan on making that it’s own leaf node to be tagged on at the end. It’s different enough that it’d probably be better just to make it separate. So yeah, it’ll need it’s own icon.

I’m also thinking about making a 3rd leaf node that produces the twigs and leaves together, a’la Modular Tree. That way, we’ll have my “looks okay, but not very realistic” leaves I like so much, anime leaves for people who want that, and the higher poly, more realistic leaves.

What I also need to do is write down a to-do list at some point. :stuck_out_tongue:

Yup. It’ll be called…



Actually, Ghibli Giblets would work too.


Would there be a way of ‘forking’ it, if it’s spline based, anyway?
Please don’t tell me there is some such thing as a valence 2+ spline vertex and I’ve somehow missed it in all those years…

greetings, Kologe

1 Like

:exploding_head: This tree is amazing! I don’t understand most any of it, but it looks so cool!


I wish there was a more elegant, natural solution, but there isn’t. DNorman’s method is about the only way to get a split from what I’ve seen.

1 Like

I wish there was but for the moment it is not possible to fork curves properly.
If it were possible it would open up incredible possibilities to nurbs surface modeling.


I can see why you got hooked on this I have dropped everything else and been playing with it since I downloaded the last version!

I have one question, before changing it all. It seems that in each node group you are storing a named radius attribute to pass it on to the next group. This means that each node group iteration is unique as it calls the radius for the last one and creates a new attribute for the next one.

Would it not make more sense that each group of branches, secondary branches and twigs had a radius input and output, that way it is just a question of iterating the same group and plugging in and out the radius?.

I could be missing something so correct me if I am.

1 Like

If I’m following you correctly, that is what I’m planning. bradius defines a maximum value that prevents the child branches from being spawned with larger ends than their parent, but it can be overridden to some extent through this node, which I do plan on exposing eventually.

You can make your branches thicker or thinner, but they’ll always be limited by the bradius and the taper driven by the float curve.

Yes I mean changing the store named attributes for capture attributes and passing them on, you could make different preset input values for branch twig etc.

So I could have a tradius for the trunk, lradius for the limb, bradius for the branch, etc. etc. etc.? That’s the way it was set up in the previous revs, but I wanted to make it more simple overall. The more generic and general purpose it is, the easier it is to expand upon at the node level, or use in various unexpected ways.

In fact, I just realized I don’t even need to have two named attributes. I can get away with bradius alone for the entire tree, and only use two tree nodes, the trunk and the branches, to make endless amounts of trees by stacking more branches on top of each other.

No you do not need it, you just need to keep passing on the new radius, but “radius” is always “radius”


I think we’re talking about the same thing here, just in a slightly different way. :stuck_out_tongue:

I call mine bradius cuz it sounds cool, but as of 20 minutes ago, it is now effectively the universal iterative radius value for the entire tree. My tree nodes will look like yours once I reconfigure everything.


Well they are not really mine, I am hacking yours to my taste! :rofl: You have done a really brilliant job with this.
Bare in mind that I would never have even tried from scratch, tweaking an already made system is easier than starting from zero.

The good thing about this method is that when you make improvements they will automatically apply to all levels of the branching.


I’ll say this much: it’s a helluva lot easier to mess with than the previous version. That thing was looking scary by the end there.


I mean, huge, complex, and inscrutable nodetrees are great for showing off on twitter and reddit, but at the end of the day, simple, modular, and reusable systems are the way to go. After all, if you’re gonna do the same thing six times, why not make it into a nodegroup and let the user decide how to handle things?


Got another question for you all.

I wanted to set things up so that you can adjust the angle of your limbs by their position on the tree using a float curve. I figured it’d be easy enough to do. Grab a capture attribute node set to float and point with a position node attached to the value and the incoming point line attached to the geometry, set up the float curve, then start adjusting away.

Well, that SORTA works. It does occasionally change the upward angle of a branch at certain positions, but mostly, it just outputs spastic weirdo nonsense.

Can anyone help me with this?

I am not quite sure what you want do do.
By adjusting the end points or the quadratic bezier you can get the branches to point up, down etc
Maybe this could be done with a curve I an not sure.

Another thing I want to do is change the trunk curve line to a quadratic bezier to be able to get trees to lean.
This could also be good to get them lean with the wind.

1 Like

It’ll be replacing the Upward Bias and Crown Upward Bias entries, which is just their angle upwards or downwards relative to the trunk. I thought adding a curve modifier to that rotation entry could provide some higher level control.

Though now that I’ve had a few minutes to think about it, it might not be that good of an idea, especially since I already have something that does a good enough job.

Not quite sure where those are, I still have to study this more.