Get the latest Blender, older versions, or experimental builds.
Stay up-to-date with the new features in the latest Blender releases.
Access production assets and knowledge from the open movies.
Documentation on the usage and features in Blender.
Latest development updates, by Blender developers.
Guidelines, release notes and development docs.
A platform to collect and share results of the Blender Benchmark.
The yearly event that brings the community together.
Support core development with a monthly contribution.
Perform a single donation with more payment options available.
Theory - Basics
Example - Rock Generator
Theory - Data Structure
Example - Simple Rock Scattering
Theory - Fields
Example - Advanced Rock Scattering
Example - Tree Generator
Theory - Attribute Propagation
Example - Grass Tuft Generator
You can join Blender Studio for €11.50/month and get access to all of our training & film content
May 16th, 2022
Download the file created in this video here: tree_generator_tutorial.blend
Join to comment publicly.
This course is so well-designed, Simon! I love the mix of theory and practical applications. I enjoy your clear explanations most of all.
@Kevin Healy Thank you :)
thak you so much for the Course I love it
This has been outstanding! Thank you very much!
I wish we had such a great tutorial in China.thank you very much!
awesome tutorial! thanks
Thank you Simon!
For the tree bending part, could you have switched out the initial 'Mesh Line' node you used for the Layers for an arc or some other curve?
@Jim Conrad Yes, definitely. The difference is that then you'd also have to make sure the instance rotation follows the tangent of the curve. But that's a great idea, there are always multiple ways to doe something with nodes :)
At the end you mention "This was quite a large node tree to setup" -No, it was not. I came to learn this, I thought this was going to be the "warm up" exercise 😅 JKD. It's been amazing to follow along. Thanks for this video.
Thank you so much Simon! Great explanation. Already want to put it in practice.
Мany thanks. The great job for us.
Always, I am learning about GeometryNodes while translating English into Japanese.
I think it's a very informative video!
By the way, will Geometry Nodes become more mainstream than Animation nodes?
@Toshinari Yanagi Geometry Nodes are directly integrated into the Blender code. That means that the toolset is much more grounded and compatible with the rest of Blender. Animation Nodes, as an addon have the benefit that they can develop independently and are not restricted with their design and performance, which makes the development a bit more free and fast.
But in the long run, pretty much everything you can do with animation nodes should be available in Blender by itself, be that with Geometry Nodes, or future additional node systems.
Also: The original author of the Animation Nodes addon, Jacques Lucke, is the lead developer on the Geometry Nodes project. Afaik he himself is not much involved with maintaining and expanding animation nodes anymore.
@Simon Thommes Thanks for your reply.
That was great to hear and very refreshing!
I started with the animation node rather than the geometry node and was wondering which one I should keep using.
But thanks to you I have solved it.
Incredibly well done. Ty!
This one felt way more digestible than the advanced rock scattering in some way. I got a question in mind also: What if we want to texture the model we're creating with geometry nodes way more complex rather than just assigning a color. When we change the size and all, how the textures would look that way? Like where comes the uv unwrapping and assigning different texture maps in play and do they response to the changes of the size of the model automatically? Because after manually you unwrap a thing and texture, scaling just messes up the textures etc.
@Fatih Pehlevan There are no tools for UV unwrapping specifically in Geometry Nodes yet. Those will come eventually though.
You can opt for procedural shading methods where you don't rely on UVs or try to output Attributes that you use as texture coordinates, like UVs. UVs are also just a vector attribute.
@Simon Thommes I don't think procedural shading will be an option for me because I'll export things to Unreal. I'm gonna create a parkour for a game and thinking about creating different pieces of the parkour with using a geometry nodes setup because they'll have a lot of common parts in them. Kind of resembles the rock generator. I'll probably texture parkour pieces in Unreal or Substance Painter so I have a feeling that I'll still need to uv unwrap every piece manually to get good results with texturing in a different software. I'm also a newbie to geometry nodes so maybe I need to do more research into this to understand how the second part you mentioned in your comment can help me in uv unwrapping and exporting process.
@Fatih Pehlevan For UV unwrapping comlex model procedurally you will need to wait for geometry nodes to have nodes for this out-of-the-box or use additional scripts that automate the process separately instead.
The other thing that I was describing of build the UVs with nodes is really quite cumbersome and complicated, involves a bunch of math and is only really viable for quite simple models because of that.
@Simon Thommes Got it. Thank you for being generous and sparing your time to read and answer my questions Simon. Much appreciated!
am I wrong in assuming that geometry nodes are like coding with python but instead of writing thee codes you use the already defined nodes like puzzle pieces?
@chriskamau5 To some degree, yes. The functions that are exposed to you with geometry nodes are very different to what is exposed in the python API, and they are much more performant than what you could implement with python only. So in that sense they are quite different.
But in the general idea, geometry nodes are a visual programming language and you can think of using them like coding.
When I used the first transform with 90 degree rotation along Y axis my result with boolean difference was plane in the shape of a branch slice. It wasn't "cut in half". It was just the very middle slice. I had to enable "Hole tolerant" to get the desired effect (i.e. exactly one half of the branch sliced off.
Also after connecting the second transform for correcting normals and mirroring — I can see nothing in the viewport. With "Hole tolerant" or without that option turned on. Thoughts what I might be doing wrong?
@Eimantas Vaičiūnas I'm not sure what the issue is. I tried doing the same steps again as I show in the video and it works fine for me. One thing that could result in the same effect would be if you rotated the first plane in the wrong direction on the Z axis. Other than that the boolean node can sometimes fail, even with Hole Tolerant on. Try wiggling the Z rotation value and see if it works for other angles.
Otherwise maybe try redoing the previous steps.
@Simon Thommes I redid everything from the beginning and somehow this time all started working. I went through those steps slowly and repeatedly and all went well. Thanks!
@Simon Thommes I had the same problem as @Eimantas. Apparently, the original values of the original Arc geometry need to be just right. Slight differences in the Y/Z values for middle and end will 'toggle' between the cross-section and a the desired slice effect.
Hi with a background of programming, I really struggle understanding iterations and accessing. “for” example (0 based indexing pseudocode) how do I say with nodes :: i = 0; branchIWant = 2; for each branch; i++; if i = branchIWant, branchIWant.setColor(blue); 🐧🐉
@Tyler Smith This is not how geometry nodes work currently. There are plans to add the functionality of iterating in loops in the future as well, but currently that's not how it works.
The way it works instead is basically that an operation is done on all elements of a domain in parallel using a set of inputs (attributes).
So with your example this would work by taking the whole geometry and applying the material, but using the selection input to run the operation only on a subset of the geometry.
That selection is a field that can be generated in various ways. Using the spline index and comparing it to a value is definitely one of those ways.
But the most important thing to understand here is that there is a clear data flow for the geometry and every operation uses the inputs that are attached to the geometry as attributes.
The future idea of using loops is not going to replace this as the main workflow, but give an alternative/new opporunities.
@Simon Thommes Hi [image didn't embed/upload]... so I tried dragging out from the Rotational Array frame's [Index] to a [Greater than :: 2] node to a [set material :: blue] from the previous trim side's panel's [set material :: tree], but that makes part of each rotated branch blue, instead of several whole branches blue... (it looks like that indexes the branchMesh vertices instead of Rotational Array frame [mesh line] index...) Thanks for your previous comment; instead of thinking of it as loops then the question can become how do I make a subset of my tree geometry (1 or some branches) blue instead of green. Whenever you get the chance; thank you for your time!🐧🐉
Hi Simon, I'm using Blender 3.3.0, and when I shift + alt + click the Arc node, I do not see a "radius" attribute in the spreadsheet. Did something change, or did I set this up incorrectly? Thanks for your time.
@Chris Abbas It looks like that changed indeed. Apparently by default now the curve primitives don't have a default radius anymore, now that a new data structure is used for curves. But that doesn't effectively change anything. You can still set and use that radius attribute like before.
Blender is still in the process of undergoing the switch from the old curve type to the new one, so some differences like this are going to ocurr for a while, thanks for pointing it out :)
@Simon Thommes I see, thanks very much for the information! I appreciate your time, and this fantastic tutorial series. Cheers.
in 3.3 I can't find out where is the SCALE node. please point me out
@yang.animator I think you are referring to the Vector Math node in Scale mode.
I know this is late, but I am new.. What was the reason for adding a duplicate Multiply node for the bend at the end of the course?
@Mark Leniw The reason for the second multiply node is that I want to expose a factor to the modifier input. But I don't want to expose the factor as it is, because the scaling is not very useful. To get a better sensitivity when you are changing the slider I'm multiplying the input value with 0.02 in this case to get much smaller values.
I am actually glad you didn't use the "To Radians" node from the beginning. I think I just realized why so many people view Radians to be superior to Degree, now. :D
@Alex Dumproff Nice! Yea, degrees are nice as they give you a pretty intuitive unit with easy to remember key values, but when you are doing trigonometry radians are usually the way to go
This helps a lot! Blender has too much "if you know you know" going on, and learning be impossibly hard.