Shape key driven by bone rotation doesn't transition smoothly

Here’s a link to a reddit post I made explaining this in greater detail, with pictures: https://www.reddit.com/r/blenderhelp/comments/11dvt12/keep_certain_faces_of_mesh_from_stretching_when/

The good samaritan in the comments has helped me figure out shape keys, but I’m still stuck with a problem. I have simple mesh that gets deformed (or rather folded onto itself) by an armature, but I’m looking to correct the stretching happening to the faces at the joints (where each bone meets the next). So I made a shape key for when my mesh is in folded state (bone rotation at almost 90 degrees), and slid the edges of the faces so that they look identical to when my mesh is flat (bone rotation 0). But instead of gradually adjusting, my faces stretch to an extreme as soon as my armature starts deforming, then reach their desired size moments before hitting the intended keyframe (I’m using linear interpolation). What am I doing wrong?

Heres a link to my blender file; If someone could check it out and help me it would be greatly appreciated :slight_smile: https://drive.google.com/file/d/1sUkDFYUIrX7rRx0m-XAkJL0XtpvYbX6u/view?usp=share_link

Thanks in advance!

Welcome to BA :slight_smile: Sounds exactly like gimbal lock- use quaternion rotation instead of Euler

Thanks :stuck_out_tongue:
In the driver’s transform channel Mode? I’ve tried that and it doesn’t work… :frowning:

Holy shit. I figured it out. I followed this tutorial: https://www.youtube.com/watch?v=2s3uToONDHg
By checking preserve volume in the armature modifier, redoing my shape key by moving my faces towards the joint instead of sliding their edges, and using the scripted expression “degrees(rotation_euler)/90”, everything works perfectly.

Turn out bone rotations can be tricky to use to drive a shape key correctly. This took me 3 days but at least I learned something lmao.

They are not tricky to setup, they are misunderstood…

Something major has changed since I last used blender as far as the drivers go. I’ll look into this more and update soon.

Randy

Okay, I’ve figured what I wasn’t understanding. Here’s a brief crash course in using drivers based on rotations.

Using the default cube, I added a shapekey to change the shape of the cube, and added in a bone to control it. At rest, it looks like this:

When the bone is rotated 90 degrees, it looks like this:

When the bone is at its rest postion, the shapekey value should be 0, when the bone is rotated 90 degrees, the shapekey value should be 1. So in the driver editor, you need an f-curve with a control point at x=0, y=0. That is your starting point - 0 rotation = 0 shapekey. The next control point wants to be at x = 1.5078 and y = 1. Here’s how this works…

The x-axis of the driver editor is the input value for your driver, the y-axis is the output of the driver. When dealing with rotations in the driver editor, the input values are in radians, not degrees. 90 degrees of rotation = 1.5078 radians. That is how I know the 2nd control point on the curve wants to be at x = 1.5078 and at y = 1 because we want the shapekey to be at 1.

Here’s what my curve looks like:

And here’s my .blend file:
rot_shapekey_example.blend (836.1 KB)

People who think rotation drivers are tricky to set up probably don’t understand the input values are in radians. Once you understand that part, they are easy to set up.

Hope this helps,
Randy