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