For someone trying to learn geometry nodes this tutorial was very helpful, informative and easy to follow. I don't know if there's easier way to do this but as an extra task I created using the new for node tools with 5 additional nodes (if not counting the for loop input and output) a variant of this curve deformation setup which automatically copies the assigned mesh all separate splines found inside the given curve object. This allowed me to just keep on drawing new splines to inside curve object edit mode to repeat the same object quickly.
I just watched 50 seconds of your video and learned what I came for, after another one hour video of yours, great stuff!! thanks a lot, I´ll probably watch more
Thank you so much, this is amazing. earlier i made a geometry node setup for hair cards where i was creating ribbons inside geometry nodes, but it had quite a few limitations, this is so much better with a lot of flexibility, Thank you
If you are generating a curve inside of your node tree to use this "Curve Deform" node group on, you have to make sure to place a "Set Curve Radius" between the curve and the node group. Curves built in the modeler seem to have a default radius of 1, while ones built in geometry nodes seem to default to a radius of 0 until you set one. So if you are trying to use this with a curve generated inside of your node tree and not imported from outside of the node group with an Object Info node and aren't seeing anything, that is probably why you aren't getting any output (everything being scaled to 0 based on the radius).
I just wanted to put my vote in for a plugin for some of you geonodes gurus. Basically like Firefly Text Effects, but for Blender where you can do cool things like wrap it on a curve, and apply additional effects. Maybe I can contribute some day after seeing some others geonodes setup for some of the initial ones (I'm no geonodes guru at all). Maybe we can get an open source plugin going where many people can contribute, else it sure does look like a good money opp.
thx for the video. came here from a blenderartist forum link - trying to build a waterslide-generator with different parts on different sections on a curve. still a way to go but this helped definitely :)
You are a good teacher. I know this particular stuff already, but if it was a new topic for me, I'm sure I could follow this and then be able to apply this on my own 🙂
@@Erindale Just wanted to add that a lot of your other topics do touch on things I haven't thought of (or from a fresh perspective), although I have done years of work as a graphics programmer. So thank you 😎
As long as you don’t have emulate number pad turned on! I have a full size keyboard now but when I learned way back I was just on a laptop so used the number row for camera views. Old habit
Stupid question: at 13:20, you're using a Position node. How do we know, or specify, that the information comes from the cube and not from the spline? I mean, you created this network so that it's attached to empty (?) and not the cube, so it can't flow from there. I'm fairly new to Blender and have a background in Houdini where we usually need to specify these kinds of things😂
Since geometry nodes works backwards, it'll collect the context for the position node from the Set Position node that it's (eventually) plugged into. Since we plug the cube geometry into the set position, it'll reference the cube vertex positions.
I've done it thanks. Very useful. What I'd like is to have the curve deform modifier applied ot a portion of the mesh (no problem here) BUT with a fall off that would smoothly integrate the deformation into the mesh. This would give us a procedural tool for organic modelling. I'd love that.
@@ErindaleI am going to try that. But, if an expert (means you) were to make it nice, flexible, user friendly, ... My problem with the ones I've done is that the deformation is not consistent. If I move the center of the deformation slightly the deformation can rotate madly around the normal.
Random Q: Do you know of a way to find the Length or Factor of a spline at it's intersection with a single vector value? ie. I have multiple splines that each cross over x=0 and x=4 plane. I want to trim them perfectly to those X values while maintaining their Y and Z values where crossing those planes. I am stumped.
Ah sorry I was not clear about that. I mean it more like “here’s one I made earlier”. This is the tutorial that makes that curve deform setup I use at the start
Great! Wonder why the mean radius of a curve is not affected by apply scale, would actually make sense! Such a tricky thing to apply scale to your curve and everything is bullocks :D Am I right in my assumption that instances are actually pointers?
i have a technical question regarding how the geo nodes flow of computing is working in this vid. my understanding is basically any field computation of input node, in this case position node which will take the position of each point as a field to which ever geometry it is connected to within a geo node tree, now the position node above the bounding box node, its connection goes to maprange to seperate xyz which is connected to sample curve node, now this sample curve node is operating on geometry (which is the bezier curve here) so it forms a tree according to my interpretation thus this should imply that position node will be taking the position of the bezier curve point. But this assumption of mine is clearly wrong as that position node is taking the position of cube seperating its z value, meaning that this position node is sort of connecting to the next big tree associated with geometry connected to set position node which takes the cube as input geometry, if this wasnt the case ig the final output wouldnt have worked as it looks. so the question that remains to me is what is the thumb rule that i need to follow when deciding which geometry associated with which tree is being evaluated by that node (specifically input nodes)?
Great question! In 99% of cases the field is evaluated on the context of the geometry it connects with. This is slightly different for sample nodes and raycast and geometry proximity. For these nodes you have something evaluated on the target geometry and then some way you want your main geometry (in this case the cube) to retrieve it from the sampled geometry. For example the Geometry Proximity node has a “Sample Position” socket. This is what position you want your main geometry to sample from. By default it’s the position of the geometry but you can specifically set it. Same on the raycast etc. With the Sample Curve node, it can sample a specific attribute or it also passes through position, tangent etc by default. With our use case here we want each point of our cube to “know” where on the curve to sample from. The factor is a predictable 0..1 range so we just need a float value between 0 and 1 on our main geometry to sample that curve. Same idea with the Sample Index node. You use an integer on the main geometry to correspond to specific indices of the sampled geometry. If you’re familiar with coding, these are like a dictionary. We have a key:value pair which is spline factor: position. If we want to retrieve the position from the spline, we need to give each element of our cube a key to go and get the right thing. Hopefully this will become more obvious in the future. There’s been discussions around how to visualise things more clearly. So rule of thumb: the field is evaluated on the context where it meets geometry EXCEPT from the sample nodes where you’re telling them how you want to map data between two different geometries. Does that help?
@@Erindale yes that seems very logical since now that you mention that the goal of sampling nodes is to pass the value or attribs to next target geometry. Thanks🫡!
I tried using this to control the "tentacles" of a jellyfish, everything seemed to work until 18:10, my tentacles(which is also curves generated in geo nodes) dosnt rotate at all when I tilt the curve. Will continue to google around, any steps that need to be different since im dealing with curves, and not a mesh?
For making a curve deform with GN (with tilt, etc) it always needs to Realize Instances or can it also be done without? (For example, for a very long line of repeating meshes)
My next tutorial which is being edited now is about doing arrays deformed to splines so you’ll get to see how you can work with instances in that one. It will result in identical instances though so you can’t deform them to the curve, just instance them along
@@Erindale Omg, will it have rotation, start position offset and tilt? Cause this is exactly what I was needing help with rn!! An array with deformation along a curve and one without. :P
26:46 .. I guess a 'Swizzle' subgroup would avoid the spaghetti, and be more generally useful, these days.. and there's a menu option, too... oops.. someone else has just mentioned that
I'm having trouble with the Axis selection no matter what combination I make with the switches I never seem to have all axis to be blue. Can someone help?
You’ll get there eventually! This is not a basic thing though and it’s using a bunch of geo nodes more abstract concepts of data flow so don’t be hard on yourself not understanding immediately!
Great tutorial, thank you! For anyone trying to this in 4.1+ there are the Index Switch nodes for the confusing switch mess for axis selection. :)
The most underrated TH-cam Blnder channel. I recommend it to every friend :P
Thank you so much
For someone trying to learn geometry nodes this tutorial was very helpful, informative and easy to follow.
I don't know if there's easier way to do this but as an extra task I created using the new for node tools with 5 additional nodes (if not counting the for loop input and output) a variant of this curve deformation setup which automatically copies the assigned mesh all separate splines found inside the given curve object. This allowed me to just keep on drawing new splines to inside curve object edit mode to repeat the same object quickly.
Nice! That sounds like a great extension!
I just watched 50 seconds of your video and learned what I came for, after another one hour video of yours, great stuff!! thanks a lot, I´ll probably watch more
Thank you so much, this is amazing. earlier i made a geometry node setup for hair cards where i was creating ribbons inside geometry nodes, but it had quite a few limitations, this is so much better with a lot of flexibility,
Thank you
If you are generating a curve inside of your node tree to use this "Curve Deform" node group on, you have to make sure to place a "Set Curve Radius" between the curve and the node group. Curves built in the modeler seem to have a default radius of 1, while ones built in geometry nodes seem to default to a radius of 0 until you set one. So if you are trying to use this with a curve generated inside of your node tree and not imported from outside of the node group with an Object Info node and aren't seeing anything, that is probably why you aren't getting any output (everything being scaled to 0 based on the radius).
Yeah this is correct. I think that should be patched to have a default of 1 for radius but I’m not sure if it’s in yet
I just wanted to put my vote in for a plugin for some of you geonodes gurus.
Basically like Firefly Text Effects, but for Blender where you can do cool things like wrap it on a curve, and apply additional effects.
Maybe I can contribute some day after seeing some others geonodes setup for some of the initial ones (I'm no geonodes guru at all).
Maybe we can get an open source plugin going where many people can contribute, else it sure does look like a good money opp.
You explained things really well - this is such a great tutorial!
thx for the video. came here from a blenderartist forum link - trying to build a waterslide-generator with different parts on different sections on a curve. still a way to go but this helped definitely :)
Wow sounds like a very cool project! Good luck!
You are a good teacher. I know this particular stuff already, but if it was a new topic for me, I'm sure I could follow this and then be able to apply this on my own 🙂
Thank you I’m glad to hear that!
@@Erindale Just wanted to add that a lot of your other topics do touch on things I haven't thought of (or from a fresh perspective), although I have done years of work as a graphics programmer. So thank you 😎
Aw sweet, Christmas came early this month! Many blessings and good cheers to you Mr. Erindale.
Very minor tip, but you can subdivide even faster by pressing Ctrl + number (depending on the number of subdivisions you want). Saves a few seconds.
As long as you don’t have emulate number pad turned on! I have a full size keyboard now but when I learned way back I was just on a laptop so used the number row for camera views. Old habit
@@Erindale, that makes sense ofc.
Thank you. I found what I couldn't figure out by myself.
Another great tutorial! thanks for sharing it here AND amazing Pigeon Tool Bag add on you've mentioned!
Thanks! The addon is so powerful!
When you plugged in the mix node I was like 🤯
You are a amazing teacher.
Thank you so much
When I came for a Blender tutorial, I didn't realize there would be a geometry lesson included.
Every day’s a school day 🙌
You're my new Bob Ross
i was just trying to figure this out like 2 days ago... thank you!
Thanks, it helped me to better understand how curve sampling works.
A very useful thing to know when working procedurally!
Very pretty thumbnail! Always enjoy your thoughts on node groups :)
Stupid question: at 13:20, you're using a Position node. How do we know, or specify, that the information comes from the cube and not from the spline? I mean, you created this network so that it's attached to empty (?) and not the cube, so it can't flow from there.
I'm fairly new to Blender and have a background in Houdini where we usually need to specify these kinds of things😂
Since geometry nodes works backwards, it'll collect the context for the position node from the Set Position node that it's (eventually) plugged into. Since we plug the cube geometry into the set position, it'll reference the cube vertex positions.
@@crisishotl1ne Thank you, that explains it
Quite a complex topic and setup but made easy with your great explanations!
Thank you tt! I appreciate it
Just so you know, you're awesome.
Thanks so much 😁
This will be useful for what I'm working on. thanks my friend !!
I've done it thanks. Very useful. What I'd like is to have the curve deform modifier applied ot a portion of the mesh (no problem here) BUT with a fall off that would smoothly integrate the deformation into the mesh. This would give us a procedural tool for organic modelling. I'd love that.
Should be able to use a geometry proximity and a map range to set the falloff based on distance from the curve?
@@ErindaleI am going to try that. But, if an expert (means you) were to make it nice, flexible, user friendly, ... My problem with the ones I've done is that the deformation is not consistent. If I move the center of the deformation slightly the deformation can rotate madly around the normal.
Amazing tutorial thank you for this. I always wondered how are meshes getting deformed on curves.
Random Q: Do you know of a way to find the Length or Factor of a spline at it's intersection with a single vector value? ie. I have multiple splines that each cross over x=0 and x=4 plane. I want to trim them perfectly to those X values while maintaining their Y and Z values where crossing those planes. I am stumped.
Always amazed by your amazing tutorial!!!☺
Thank you
Great thinking and explanations as always Erin!
Thanks Duncan!
Thank you for the super tutorial!
Erin I'm tryin to follow up with the tutorial and which video do I need to watch in order to follow up the first 2mins I just cant find it
Ah sorry I was not clear about that. I mean it more like “here’s one I made earlier”. This is the tutorial that makes that curve deform setup I use at the start
I'd LOVE to know which video you "previously made the curve form in" ... i can’t currently see any to figure this out
I mean that like “here’s one I prepared earlier” but it’s an example of what we’re actually making for the first half of the tutorial
Thank you!
you are a wizard!
Oh it's Big Brain time.
If spline type is poly subdivision the curve 200 before using the curve defoem node
Thank you for your work!
Great! Wonder why the mean radius of a curve is not affected by apply scale, would actually make sense! Such a tricky thing to apply scale to your curve and everything is bullocks :D Am I right in my assumption that instances are actually pointers?
Yes instances are just referencing the same mesh data which is why they need realising to be modified independently
@@Erindale You are an amazing tutor. Thank you for deepening my understanding of this incredible software.
i have a technical question regarding how the geo nodes flow of computing is working in this vid. my understanding is basically any field computation of input node, in this case position node which will take the position of each point as a field to which ever geometry it is connected to within a geo node tree,
now the position node above the bounding box node, its connection goes to maprange to seperate xyz which is connected to sample curve node, now this sample curve node is operating on geometry (which is the bezier curve here) so it forms a tree according to my interpretation thus this should imply that position node will be taking the position of the bezier curve point. But this assumption of mine is clearly wrong as that position node is taking the position of cube seperating its z value, meaning that this position node is sort of connecting to the next big tree associated with geometry connected to set position node which takes the cube as input geometry, if this wasnt the case ig the final output wouldnt have worked as it looks. so the question that remains to me is what is the thumb rule that i need to follow when deciding which geometry associated with which tree is being evaluated by that node (specifically input nodes)?
Great question! In 99% of cases the field is evaluated on the context of the geometry it connects with. This is slightly different for sample nodes and raycast and geometry proximity. For these nodes you have something evaluated on the target geometry and then some way you want your main geometry (in this case the cube) to retrieve it from the sampled geometry.
For example the Geometry Proximity node has a “Sample Position” socket. This is what position you want your main geometry to sample from. By default it’s the position of the geometry but you can specifically set it. Same on the raycast etc.
With the Sample Curve node, it can sample a specific attribute or it also passes through position, tangent etc by default. With our use case here we want each point of our cube to “know” where on the curve to sample from. The factor is a predictable 0..1 range so we just need a float value between 0 and 1 on our main geometry to sample that curve.
Same idea with the Sample Index node. You use an integer on the main geometry to correspond to specific indices of the sampled geometry.
If you’re familiar with coding, these are like a dictionary. We have a key:value pair which is spline factor: position. If we want to retrieve the position from the spline, we need to give each element of our cube a key to go and get the right thing.
Hopefully this will become more obvious in the future. There’s been discussions around how to visualise things more clearly.
So rule of thumb: the field is evaluated on the context where it meets geometry EXCEPT from the sample nodes where you’re telling them how you want to map data between two different geometries.
Does that help?
@@Erindale yes that seems very logical since now that you mention that the goal of sampling nodes is to pass the value or attribs to next target geometry. Thanks🫡!
I tried using this to control the "tentacles" of a jellyfish, everything seemed to work until 18:10, my tentacles(which is also curves generated in geo nodes) dosnt rotate at all when I tilt the curve. Will continue to google around, any steps that need to be different since im dealing with curves, and not a mesh?
Of course I found the solution right after I asked. I was applying all this AFTER I converted the curve to mesh, if I do it before it works.
For making a curve deform with GN (with tilt, etc) it always needs to Realize Instances or can it also be done without? (For example, for a very long line of repeating meshes)
My next tutorial which is being edited now is about doing arrays deformed to splines so you’ll get to see how you can work with instances in that one. It will result in identical instances though so you can’t deform them to the curve, just instance them along
@@Erindale Omg, will it have rotation, start position offset and tilt? Cause this is exactly what I was needing help with rn!! An array with deformation along a curve and one without. :P
Great stuff!
excellence!
26:46 .. I guess a 'Swizzle' subgroup would avoid the spaghetti, and be more generally useful, these days.. and there's a menu option, too... oops.. someone else has just mentioned that
Yeah definitely going to add one of these to ETK that would be very useful
Excuse me, by any chance anyone know why my Suzanne still remain stretch even followed the steps after 27:50 😢sorry I'm newbie.
😅 I've been frustrated for hours trying to get this to work, only for me to realize I've been using the normal node instead of the position node 🤦♂️
when did they add factor as a subtype to integer? 🤔
At least since 3.6, not sure when exactly it was implemented
I'm having trouble with the Axis selection no matter what combination I make with the switches I never seem to have all axis to be blue. Can someone help?
If you invert the normal from the sample curve node, does that solve it?
@@Erindale It did for me. Thank you!
Maybe i’m in the minority, but i absolutely do not understand this. I’ll keep trying though
You’ll get there eventually! This is not a basic thing though and it’s using a bunch of geo nodes more abstract concepts of data flow so don’t be hard on yourself not understanding immediately!
You're not alone. Keep going.
jesus christ dude, 35min?
If you just want to get the tool without understanding the process you can download the file from the link in the description
Amazing Tutorial!!!
Thanks!!!