3
$\begingroup$

Hello :) I found this great answer by @Kuboå regarding deforming along multiple curves at the same time. [https://blender.stackexchange.com/a/282932/146028][1] And I was wondering if there was a way to automatically adapt the size of the deformed geometry on each disconnected spline.

Following the previous method, I'm generating an array of object, then I deform them along the curves, even if they are detached. the problem now is that the length of the array is fixed and doesn't adjust according the the spline length. I end up having a "compression" of the array on the shorter segments.(which is great if we want to do an accordion ^^) I want them to have all the same visual spacing. Based on the longest one maybe. enter image description here

I'm not totally familiar with domain manipulation but do you think this is the direction to dig toward? I've been trying for so long all kind of combination of nodes without success.. I'm wondering if it's even possible with the current nodes.. Or perhaps I just missed a very obvious solution ^^

Edit: I found a workaround but I feel dirty using this technique somehow. I'm not proud of this

I basically delete the parts of the array that are longer then the spline. And tweak the spline factor during the deform. It kind of work but it doesn't feel very clean. Any idea how for another method?

Edit 2: shmuel method applied With the solution @shmuel propose, I put the duplicate elements before the arraying. I had to rework the array method to avoid any realize instances. The array take the current length for each spline but now I'm struggling connecting it back to a working deformer. I'm not sure how to properly control the factor of the curve sample to get the deform information. Any ideas?

Edit 3: Following up with the solution from @shmuel, simply using the X position :D Here is the final blend file if anybody is interested

Thank you!

Edit: added new image and blend file. Edit 2: Find a temporary solution Edit 3: Update with shmuel solution

$\endgroup$
2
  • $\begingroup$ If you share your file with blend-exchange.com it will be more easy no help you $\endgroup$ Apr 17 at 8:27
  • $\begingroup$ Good idea, I added the blend file. Thanks! $\endgroup$ Apr 17 at 17:06

1 Answer 1

2
$\begingroup$

You can use the duplicate elements (set to instance) before the array, that way you can set each duplicate's array-offset/end to be it's spline's length (using a sample index set to spline, and sampling the spline length, with the index as the duplicate index).

I don't know the internals of the array node you are using, so make sure that it doesn't convert the geometry input to an instance internally (without any logic) because if it does the duplicates will lose their individuality.

Edit:
In response to your follow up; Your new solution is perfect, except that you are using the spline parameter which is a spline attribute when you need to be using an attribute that is on the geometry you are deforming. y and z are already being use for the normal and normal-tangent so the x position should be used as the factor. This is if it's a 0 to 1 range, which your's isn't, so you can set the sample curve to the length mode, or divide the x position by the spline length you sampled before.

$\endgroup$
3
  • $\begingroup$ Thank you! It makes sense actually. I realize my array method didn't allow to do that before so I had to rework it. The array length change depending on each spline index now. But I also had to remove the array being realized in order to control the factor of the Sample curve's deformer. I was thinking just using the spline length would be enough with our new method but there is something I'm still missing here.. I'll edit the original question with the new node tree unfolded. $\endgroup$ Apr 18 at 4:35
  • $\begingroup$ use the x position as the factor $\endgroup$
    – shmuel
    Apr 18 at 19:23
  • $\begingroup$ It makes more sense indeed, thank you so much for your help and clarification :D $\endgroup$ Apr 19 at 4:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .