Geometry Nodes

Only because this workflow isn’t complete, we’re planning to handle instance creation inside the node tree.

These are the “building block” nodes. Eventually these will be exposed as a higher level node or maybe even as a modifier that should be easier to use, at least simpler at a glance.


Where I should post crash report and should I?

You can just make a bug report. Just add the “Geometry Nodes” project as a tag.

1 Like

If you got this from my comment from Blender Today, know that this is not necessary anymore, since yesterday’s commit you can choose an object to instance inside the Point Instance node, check this out


HooglyBoogly, Miro_Horvath It sounds promising. thanks)

Created with the point distribute node

Same geometry node group. But this time there is a weld modifier (merge verts by distance) in the modifier stack.


Playing around with mixing weight maps


yeah Weld modifier is pretty handy when you need to filter out points too close each other. I use it quite often to get rid of trees growing unnaturally close to each other. I hope Weld modifier will be added to geoNodes soon.


I think using weld modifier for that feels like a bit of a hack; not that it doesn’t work, but if you want to keep the point count at a specific amount you have to fight with the density amount vs how many points get welded.

I think an easier solution would just to have something like “relax iterations” built into the node. Perhaps some different distribution methods too maybe? Who knows, this is still all very early. Loving it nonetheless!


Hopefully there will be something like blue noise distribution to get a nice non overlapping coverage of points. Would be good if there was an option to be scale aware, so that if a scale attribute is added to points, it can use the point scale radius/bounding box to avoid intersections.

Not sure how this is done, and if it is some form of circle packing, but the new H18.5 scatter tools allow this. No doubt it is less performant but should be an option, especially for a convincing scattering of pebbles, foliage etc. especially when the density and scale are driven by procedural noises.


That’s exactly what I had in mind for different distribution methods. And for performance/other scenarios, giving the option for other things would always be nice!

1 Like

Miro_Horvath, Bobo_The_Imp, this is exactly the task I faced when creating the bamboo ends texture. Distribution of points, random and even, without crossing points.
This example can be used to test this node system.


I have made an example of procedural table. It’s not the way which people would like to model but it’s good to know that Geometry nodes already are capable of doing something like that.


Very early attempt for non-destructive cell fracturing. It’s not the best way possible and really sluggish for real time editing right now

Each Transform node:

  • creates a copy of original Cube
  • scales it down to almost plane
  • rotates “plane”

Each Boolean node, takes “plane” and does Difference operation(cut) on previous result.


Some remarks, copied from :

Duplicating the group input node (the one built into the modifier node tree, not a user-created group) seems to invalidate the entire tree : my output mesh looks unmodified.

So from first impressions I’m very much missing a simple triplet of float sockets where the vector sockets are. Maybe give both : vector socket aside to the property name (“rotation”, etc), and individual float sockets for each property (x, y, z…). Right now I have to “combine-XYZ” every value I want to input into the transform node’s sockets which seems unnecessary.
Of course I would also want to preview the node tree at any point, ie there needs to be an active preview node specified with a little icon on its header… or something in that vein.

The next thing is… value fields in the node editor could use expressions. It would be a shortcut for what is currently a string of math nodes (most operations take only one, but some take three, and in any case that’s a lot of extraneous nodes in the end). The expression would be embedded in the value field, and able to access only variables in the nodetree (not anything throughout the Blender scene, that’s a job for drivers) and manipulate them just a bit without having to insert a math node in between, which I think is cool because it would show also the actual number in the case of constants (just like in William’s proposal). Of course the relationship would still be shown by a regular noodle between the two (or more) sockets. I guess the value field should be colored or something, so as to make it obvious there’s an operation happening there…

A simple switch node would also be neat !

An overlay to show the output of the active node… in wireframe, unobstrusive, overlaid onto the solid “mesh output”… that’s sparkles I know !

1 Like

I tried to do a basic scattering test but it didn’t work at all. As soon as I add Point Distribute node, the mesh disappears and I get no output. Is this a bug or am I missing something?

you need to do that with a point cloud object

I have a proposal of adding custom properties to a node tree.
The problem is that sometimes trees are growing very big and some properties can be used several times in opposite parts of the tree so you have to add separate value nodes and spread connections from them to all over the tree what is not very convenient.

The proposal is to add node tree properties so any node property could subscribe to their changes and use their values via drivers. This will help to keep tree more clean. Another advantage is that custom properties has more control. It is possible to determine limits and type of the value add its description what value node can’t do.


Without loops or geometry arrays right now, I couldn’t make it so that the number of shelves is dynamic, only their position relative to the bookshelf height. Maybe I’ve missed a possible way to do it ? In effect it is a bit less programmatic than I hoped, but this is still very early : there are almost no modeling operators and those would be my choice for that kind of job, along with a more flexible way to copy things, and the ability to add primitives in the node tree.

What makes it tedious also is we can’t choose the origin of transformation for the transform node. So we have to manually compensate scaling, which always happens relative to the object origin. Ideally there would be a “transformation origin” triplet, or separate “scale origin” and “rotate origin” and a “transformation order” dropdown so that we don’t have to chain several transform nodes.

Right now the geometry is a bit glitchy because the boolean node is used in place of a “merge” node, which in theory would not care about intersecting geometry.

Also, I was trying to distribute books on the shelves, but it felt like I had to add a point cloud object for this to work, and even then my point cloud object would be disconnected from my bookshelf object, because it can’t share the same nodetree and variables that I used. So my point is, all has to happen within the same nodetree. It’s great that we have a point cloud object, but we have to be able to specify points onto which to copy objects within the same node tree (point instance node with two inputs, one for copied geometry, one for points).

Also we totally have to have the ability to add handles (gizmos) connected to properties, to manipulate these things directly in the viewport. That would be awesome.


Or have a control object that is an empty that can contain the tree and then define different targets from inside the node tree, not just as a Geometry input node.

It makes no sense to have a procedural node graph if it´s fully limited to a specific type of object, because we have to be able to mix them all, from meshes to curves, to point clouds, etc…

BTW from your shelves video it seems the performance is a bit awful, is that so?

It´s a pretty simple object that should be super fast to generate, how could we generate complex procedural objects if the performance is so bad with a super simple nearly simple demo object?