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)
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ā¦
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
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.
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?
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).
Autumn - The end of #nodevember. Half the way to āNodesTree 1.0ā :
Added a second, less crooked trunk shape, good for pine trees (which should be possible before version 1.0):
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
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.
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
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