GeoTree: Procedural Trees in Geometry Nodes

Not understanding much of this conversation, but the trees look great! :smiley:

3 Likes

This will be the last shot of the old general store I’ll ever post, but I wanted to show how I was able to increase detail while cutting my polycount down by 3 quarters. I redid a couple of trees, the grass, a few plants, and the bushes. Plus, the trees aren’t instanced like they were before.

Originally, it was around 1,000,000 tris. Now it’s about 260,000ish.

15 Likes

Sooo…

A very rudimentary procedural tree generator. Do let me know what you think of it. The parameters labels are not very intuitive, please tell me if you can think of better ones! You don’t get beautiful trees instantly but have to tweak the seed value till you get something nice-ish

NewTree_Gen.blend (2.5 MB)

6 Likes

Yeah, that’s about fairly well brilliant.

Let me play around with it a little more, and I’ll come back with some suggestions.

1 Like

Okay, first and foremost, I’d expose a min/max scale for the individual leaf cards. I play with that setting quite a bit to make my trees look either fuller or more threadbare.

Also, a way to stretch and move the canopy without effecting the underlying tree mesh would be nice.

Lastly, I’d try to throw in a few extra shapes to generate leaves from, and maybe add a boolean node to get some more variation into the mix.

Other than that, it’s pretty damn neat.

Edit: Oh, and despite my earlier recommendation, I found that the trees generally look better when you let the point instance place the leaf cards per vertex, rather than use a point distribute to randomize them across all the faces. The cards are more aligned with the underlying geometry they’re grabbing their normal shading from.

…though there are times when you do want that randomization, so maybe a way to pick and choose which type of tree you want would work here.

2 Likes

Can you elaborate on that?

A boolean, so that all your separate spheres can merge together into a more bulbous shape if they get close enough. I think that’s possible with geo nodes.

Edit: try a subsurf node after the boolean too.

A Boolean node makes the computation very slow and almost impossible to work with. A remesh would be a better option. In fact, I had tried it and didn’t like the way it looked. Having non-manifold, intersecting shapes makes the tree look more natural.

Subdividing the mesh results in a huge increase in the number of verts, resulting the same in instances. This is again slow and also does not look very nice as it becomes kind of uniform

2 Likes

Lets goooo

  • Added option to choose between per vert and random distribution (Weird how the boolean input shows up as an integer instead of a checkbox)
  • Added much needed leaf density slider
  • Added min-max for leaf and branch size
  • Added independent transform options for trunk and canopy
  • A number of changes to make the results more consistent

NewTree_Gen.blend (2.7 MB)

I say folks, we would have become millonaires if we had been smarter and not made the blend file public

5 Likes

We can still charge for it. Just don’t tell anyone about this thread. :stuck_out_tongue:

3 Likes

The thread is probably going to be pinned for everyone to behold it’s beauty

4 Likes

Of course they’d do that after we decide to get greedy. :face_with_symbols_over_mouth:

2 Likes

One quick really weird question that I can’t seem to find after a few minutes of Googling.

How do you make multiple objects unselectable? It’d suck if my only option would be to toggle the restriction, and swish my way through a few hundred objects.

Here is the best thing I found:
https://blender.stackexchange.com/questions/60544/how-to-toggle-selection
Long story short, there is no good way to toggle selectability through a hotkey. But it looks possible to automate using scripts.

EDIT: I found a way. Select them all and alt-click the selectable property in either the outliner or the properties panel.

1 Like

Bleh. I was hoping for something a little more straightforward.

I think I’ve come up with a good solution to all the shortcomings of these geo node trees. The only downside is that it’s a bunch of steps you have to follow, but you get trees with properly UVed textures, and you can cull from collections, rather than having to rely on a single alpha.

I’m going to play around with it a bit more, but I’ll likely write a quick tutorial sometime today.

Here’s my file. You lose a good bit of tweakability, but you get cleaner looking trees.

NewTree3.zip (2.1 MB)

To give the digest version of what I did, I used geo nodes to distribute the cards, then I made the instances real, joined them all together, added and applied the data transfer, split the object by loose parts, applied two locked track constraint to the first card so that it follows the camera, applied a copy rotation constraint to the rest of the leaf cards, targeting the first, then finally added a cube that encompasses the entire tree, set it to display as wireframe, and parented all the various parts to it.

There is quite the exchanging of files on this topic. Should we create a github repo and use blender’s link feature to link the files? I think that would be a much cleaner way to work on a project. (Assuming that this project will get pretty large and complex in the future)

We could (I’d have to learn how to use Github first though), but really, it’s only a complicated issue at this very moment. Once we’re able to grab face corner data through the attribute transfer node, the whole process will become incredibly easy. It’s only the workarounds we’re having to use in lieu of at the moment that are complex.

Even if attribute transfer was able to change normal data, it would still remove the UV, as altering normals requires the instances to be made real. In fact, adding any “attribute” node after the point instance makes the instances real.

It is a known bug / limitation that making instances real erases the UV data

https://developer.blender.org/T87590

2 Likes

Just me screwing around a bit.

9 Likes