Apply curves to Shapekey animation


I’m animating a character head with face mocap and shapekeys, using the iPhone ARkit.

It’s mostly working well, but there’s noise on the lower end, and it’s also difficult to ever reach the full 1.000 extent of one shapekey channel.

This makes me wish I could apply some kind of curve to the keyframes, to add more ‘contrast’ to the animation, and make it punchier and more expressive. See attached pic

So along the transition from 0.000 to 1.000, the shapekeys would stay silent longer, and then reach max faster.

Is there a way to do this? Ideally, it would be something I could apply to all 52 channels at once. And also non-destructive so I can go back and tweak.

Thank you for any help or advice!


I don’t think you could do it 52 things all at once without scripting, but it’s possible to do.

You could set up the mesh so that it’s shapekeys aren’t your literal mocap values, but are instead driven by these values, by creating a driver for each shapekey. At that point, you can create a scripted expression to apply to all your values, or you can draw a custom curve from input value->output value, just like you’ve shown.

This would be tedious to do 52 times, but I imagine you could script it.

You might also consider looking at the format of the data that ARKit uses. If it’s just text or a .css or something, you could probably load the numbers into a spreadsheet application and edit the values directly, before loading them into Blender. I don’t know anything about ARKit myself though.

Thanks for the advice!

I don’t know scipting unfortunately. What I ended up doing was to duplicate the mesh, and have the first one invisible and receiving the data. Then I set a driver between each corresponding shapekey on both meshes. Once those were all set up, I could shape the curve for all drivers in one go. Tedious as hell but the results are actually pretty great