Geometry Nodes

Is there maybe a solution to get the right displacement if you deform a curve line converted to a mesh ?

Tangent vector displacement : can this be done with geometrynodes ?

Hello @Grinsegold
This is a very interesting implementation of L-systems you’ve got. I’ve always wanted to try recursive stuff like this but have never taken time out to figure out an implementation yet. replicating your setup was a great learning experience!
So to your question I have this setup similar to yours but slightly different (no points geometry and I’m realizing instance after every iteration)

You can see for each iteration I am dividing the radius of the curve by 2 and joining the geometry to the current iteration instance.

This sort of makes the first spline of the system have the smallest radius and the last spline to have the highest radius of 1. Then in the end I can simply use a separate geometry node to separate the last set of splines on the tree where the selection input is connected to a compare node that compares the curve radius to 1.

here’s the blend file if you want: (oops! I just realised I can’t share that here haha sorry)

1 Like

I had similar ideas after i woke up, but then i had another one. Now i gave up the idea of iterating the same curve over and over, and that opened a broad way of solutions:


I can isolate the last splitting. That makes placing the leaves at the tip of the curves a piece of cake. But that will have to wait until tomorrow. Thanks for your inspirations!
EDIT: Had to do this first before i could go to bed. The two biggest issues are now to let the twigs grow not in odd directions and to automate the scaling of the branches. This was easier with the single-curve-approach…

4 Likes

https://developer.blender.org/D13343

How realistic is giving the user access to neighbouring points’ indices (so that we can query their attributes such as position, etc) ? what I have in mind is : walk on the mesh and scrutinize it

4 Likes

I was wondering - would it be possible to transfer UV maps using this method onto realised instances? It seems unlikely since there are no nodes that deal with UVs right now, but maybe someone has tried and found a workaround?

This is really impressive! This approach makes the entire system much more readable.

1 Like

geometry nodes tooltip max char is only 62 characters, not long enough for decent explanations. Can this be extended to match python tooltips char limit please?

6 Likes

I’m currently dealing with that limitation on a tool I’m working on as well. I really wish they’ll make the limit much longer.

You can get UVs back to the resulted mesh using this script:

import bpy

selected = bpy.context.selected_objects[0]
bpy.ops.object.mode_set(mode='OBJECT')
uvmap = selected.data.uv_layers.new(name='Attribute', do_init=False)
attribute_uvmap = selected.data.attributes.get('UVMap') # must fetch *after* creating new uvmap
for i, v in attribute_uvmap.data.items():
    uvmap.data[i].uv = v.vector

But GNodes itself currently can’t handle UVs when Realize, same with other mesh data - vertex colors, groups etc. This is obviously pretty big limitation which makes GNodes completely useless for anyone who wants to do something with the output - like importing it to a game engine (or just anything except rendering it out in Blender).
There is already a task regarding this issue (with 45 subscribers), unfortunately no hint from developers whether we can expect this to be fixed anytime soon:
https://developer.blender.org/T85962
In my opinion this can be considered as bug, because if your scene gets messed up just by applying the modifier (or Realize), this is definitely not an expected behavior from the user standpoint. There isn’t currently any other modifier which would give you different result after hitting Apply than GNodes.
That’s why this really needs to be fixed in 3.0 in my opinion (or at least we should have the ability to handle / convert the mesh data manually using some convert nodes or something like that).

3 Likes

Autumn - The end of #nodevember. Half the way to ā€œNodesTree 1.0ā€ :slight_smile: :


Added a second, less crooked trunk shape, good for pine trees (which should be possible before version 1.0):

16 Likes

You can do it with legacy nodes, but you have to apply geo modifier to get it work and use another with legacy nodes to get uv’s

Other way you can just use ā€œAttributeā€ node in shader editor to get uv’s after realizing instances

2 Likes

That’s what that script does already, but I really think those UVs and other data has to be prevented while working with GNodes & Realize. I.e. if you are working with any higher amount of instances, then Realize is the only way how to make the viewport smooth. But since it removes all that mesh data, you lose any preview of what you are doing = showstopper.

So the Particle Instance modifier is still the only way to go for any larger-scale scattering work, because it does similar thing like Realize - outputs joined instances (fast viewport), but also prevents all the mesh data. I find this really unfortunate, considering the object-scattering is used as the main use-case example on GNodes official webpage.

I’m trying to create a Geometry Nodes system to point instance a collection of character crowd animations to be able to fill several stadium shots with crowds.

I’ve got everything working EXCEPT, I can’t seem to find any sort of way to offset the animations in time with geometry nodes. Is that possible? I’m aware that I can create copies of the characters in the collection and brute force offset the keyframes but that’s not what I’m looking for.

I have a puzzle for you again (probably it is embarrassingly simple, but i’m clueless):

Index Modulo 2? (Math Node)
I think that would work.

Alternatively: Float Compare (if Index modulo 2 = 1). This should give you a {True, False, True, False…} list.

By the way, this is insane! Great work :ok_hand:

1 Like

Thanks for the suggestions, this is exactly what I needed.
So if I understand correctly, UV maps don’t get destroyed, just converted to a generic attribute that Blender doesn’t see as a UV map. Pretty strange limitation, but I guess that’s what you have to accept when using a system that’s still under construction.

I also thought of modulo or compare, since every other operation is even less likely, but as you can see it is not that simple… unfortunately

Connect the index to the modulo not the integer.
Also remove the endpoint selection node. There’s no point for it if you’re using the index

3 Likes

Many thanks for that!!!


Yeah, that helped!

2 Likes