Following curve causes object distortion

I’m having a problem with distortion when I make my fish move along a curve; at some places along the curve the fish is fine but, at some places along the curve, the fish distorts along its length (eg flattened or lengthened face). I guess it’s something to do with the spacing of the points of the curve but when fiddling with them I’m only making it worse. Does anyone know if there’s a way to adjust them so that the fish doesn’t distort? I’ll attach some pics of my fish.


Attachments


more to do with subidiv level on the fish itself
but with curve path there will always be some distortion

show pic for it

happy cl

Typical post containing only the result and an assumption how to fix it, without any information about the setup. The reason it distorts is in your file, and people have to know that before they can tell how to fix it, or even if you should fix it the way you assumed.

Prepare and include an example .blend with all your questions. You don’t have to include every object, geometry, textures, as long there’s enough to demonstrate the problem.

Yes, sorry; that was a rather poor attempt at explaining the problem. I’ll attach a blend file with the relevant objects (FishOnCurve_NastyLengthDistortion.blend) and try to explain the problem better here:

The fish is following a curve called BezierForFish due to the curve modifier. It is being ‘pulled’ along by an empty called FishHandle by its movement in the Y axis. The fish is moving ok up until about frame 2200 where is starts to distort lengthwise; The face and tail stretch and shrink in and out rhythmically as it moves onwards. Frame 2224 shows fish with squashed face, whereas in frame 2231 the face is stretched. (I’ve intentionally kept the bezier curve and the fish horizontal as the handle pulls it up in the Z axis above the bezier curve because it’s being caught in a net - not shown here). The CameraForFish is parented to the fish to get a good view of the fish.

If I adjust the size of any point of the bezier curve that is currently affecting the fish, the distortion of the fish, while at that position, can be changed. I would rather the fish didn’t distort in length at all. I’ve tried adjusting some points of the bezier curve but only tend to make the distortion worse. Is there a way to stop this unwanted distortion? FishOnCurve_NastyLengthDistortion.blend (896 KB)

The color tags don’t work

From what I gather, the fish is set to deform along the curve but you’re changing its position away from it which causes the stretching.

Objects are manipulated in object mode, and object data (mesh in this case) is manipulated in edit mode. Modifiers affect the object data, and if you think the object as a parent for the mesh, the angle of the mesh changes when the object position changes. The modifier still conforms the mesh to the set Y axis but the more the object position and angle to the curve changes, the more it has to deform the mesh to get it on the curve.

Would probably be better to have an armature deform the fish and constrain the movement along the curve. A fish is a typical use case for bendy bones so the setup is easy.

How you animate the movement is up to you. In the file I just keyframed one cycle of movement and repeat that in the nla

Attachments

FishOnCurve_NastyLengthDistortion2.blend (225 KB)

Thank you JA12. Using ‘Bendybones’ on the fish greatly improves the swimming motion and having now watched a few tutorials on the subject, is far easier to set up. I’ve added a lateral movement to the head bone to allow for the X plane oscillation that would naturally occur floating unattached in a fluid medium. Not sure it would do for a documentary, but it’s more than adequate for the basic straight line swimming motions of my (variously intended) ‘cartoon’ fish.

I’ve also varied the swim speed by keyframing the offset at various places. Don’t find it as easy to make fine adjustments as with the way I had it before (but then I’m not used to keyframing the offset).

The problem I’m having with bendybones is where I want the fish to momentarily cease swimming while it curves fluidly around the U-bend of the bezier curve (to meet with and parallel the track of a previously oncoming other story character), before resuming its swimming motion.

I’m afraid (so far) I’ve been quite unable (using ‘Bendybones’) to produce anything close to the required smooth transitional bend and tight curve (around a central point), that doesn’t involve my fish flinging its tail out in a visually unsightly and hydrodynamically highly improbable skidding turn.

Where previously it turned smoothly, gliding, following the curve, between frames 1750 and 1850 in my original blend file, (and since, adding some shapekeys to give the tail a bit more ‘flick’), as in this video:

The best I’ve managed so far with bendy bones so far is this:

Maybe I need to make more control points or something? Or can the bendybones be made to follow the bezier curve for a moment, just to do this U-bend? I clearly need to study this more…

After some practice with BendyBones, I eventually got the fish to do a smooth U-turn :slight_smile: I’ve added it to my Vimeo page: