Is there a way to keep the mesh from stretching like this when you go around a curve?
-
$\begingroup$ you could try use a denser mesh or lower your angle of your curve. It is a mathematical problem: you have "let's say a line to keep it easy". Now move that line a bit away but parallel to the curve (to both sides). If you are now in a curve with any angle, but with tighter angle it is more obvious: on one side the line has to be longer, on the other shorter. How will you do that without stretching the mesh? Of course, you could just "copy" that mesh, but then you will have holes or overlaps. It isn't possible just mathematical if you think about it. $\endgroup$– ChrisCommented Feb 28, 2022 at 6:45
-
$\begingroup$ but of course you can give me a sketch and prove me the opposite how you can do it? $\endgroup$– ChrisCommented Feb 28, 2022 at 6:47
-
$\begingroup$ I’m voting to close this question because in my opinion this isn't possible (not because of Blender, but because of mathematics) $\endgroup$– ChrisCommented Feb 28, 2022 at 6:48
-
$\begingroup$ please share your file: pasteall.org/blend $\endgroup$– moonbootsCommented Feb 28, 2022 at 7:33
-
$\begingroup$ Is your problem that it's deforming (because this can't be prevented) or that it's resulting in ugly geometry ? $\endgroup$– GorgiousCommented Feb 28, 2022 at 8:50
1 Answer
As often, when you want to array an element along a curve, without deforming it, instead of arraying the element, you can array some sort of mount, on which the element can be instanced. The mount can be allowed to deform, and the instanced elements will not.
For example, here, we can plan on instancing on faces...
The base element is a pair of offset faces, up in Z, Arrayed in the X axis, Simple Deform > Bent around Z to closure (which is a bit more than 360). The ring is then Array ed again in Z, to fit the snake-curve.
Then it's given a Curve modifier, targeted on the snake-curve. The Curve itself is set to 'Stretch' and 'Bounds Clamp' in its Data > Shape settings. I think that helps with smooth transitions.
The array is set to instance on 'Faces' in its Object tab > Instancing panel. A scale-object is created, and parented to the array. Instancing on faces allows you to check 'Scale By Face Size', varying the size of scales according to the underlying mesh.
Once instanced, in Edit Mode, you can adjust the scale-object for offset, size, left-right tilt, and top-bottom tilt, to minimize gaps and self-intersection.
Parenting the array to the curve allows movement and deformation of the curve withoout everything falling apart, athough, once set, you would probably want to set the Z-array count to a constant, for animation.