I am trying to create a procedural tree by distributing 1st order branches from a trunk through a 'distribute points on faces' node, 2nd order branches from 1st order branches, and so on. However, currently all instances of 1st order branches are identical, which could be solved by giving the 'distribute points on faces' node of each instance a different seed, but I have yet to find a way to differentiate between instances. Can this be done in blender 3.0?

I included a .blend file of an abstract tree, with trunk, branches, and points on branches, which illustrates that all branches are identical.

screen shot

blend file


1 Answer 1


Yes! :) It can be done. I believ that the best way to grow up a general tree in blender 3.0 and 3.1 is to use curves in geometry nodes. In the node setup below all branches are unique. Also branches change there start thickness and start angle along the trunk.

For Blender 3.1.

enter image description here

  1. With the "Noise Texture" node you have ability to change deviations of trunk and branches.
  2. Exact count of branches is equal to the "count" value in "Curve To Points" node.
  3. With the left "Map Range" node you can control trunk thickness.
  4. With the right "Map Range" node you can control branches thickness.
  5. With the central "Map Range" node you can control branches start angle.
  6. With the "Value" node connected to "substract" math node you can make all branches a bit thiner then trunk.
  7. With "Trim curve" node you can remove branches from the unwanted areas of the trunk. Now this node remove branches from the lower half of the trunk.

For Blender 3.0.

enter image description here

The node setup is very similar. But in blender 3.0. curve parametr do not work correctly via capture attribute. So you should use position Z axis instead of it.

  • $\begingroup$ Exactly what I need, thank you so much for this node setup! I'm structuring it right now, and expanding it, so I can generate 2nd order branches, 3rd order branches and so on. I'll share my node setup when done... $\endgroup$
    – eezacque
    Commented Jan 19, 2022 at 18:16
  • $\begingroup$ @eezacque you are welcome :) $\endgroup$
    – 3Dhedgehog
    Commented Jan 19, 2022 at 18:40
  • 1
    $\begingroup$ Looks like you hit a subtle difference between blender 3.0 and blender 3.1. Correct me if I'm wrong, but I think in 3.0 the To Max value of the middle Map Range node is ignored? The problem seems to be that in 3.0, the Curve parameter is not correctly captured? Any thoughts on this? $\endgroup$
    – eezacque
    Commented Jan 20, 2022 at 18:23
  • $\begingroup$ @eezacque Yes, you are right. Probably curve parametr is not correctly captured in blender 3.0. But you can try to use Z position instead of it. $\endgroup$
    – 3Dhedgehog
    Commented Jan 20, 2022 at 19:05
  • $\begingroup$ @eezacque I edited my answer, and add illustration specially for blender 3.0. $\endgroup$
    – 3Dhedgehog
    Commented Jan 20, 2022 at 19:25

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .