I worked on keyframe interpolation recently and somehow refactored the system so that users could plug their own interpolators into the system.
All this is inspired by David Rosen's 2014 GDC talk on procedural animation in Wolffire (if you never watch it you should).
The idea is to have animations based on very few keyframe and to fill the gaps by interpolating between them in a clever way.
So ... I tried that :
Here is a run animation made of 8 key frames.
Now we do a standard interpolation :
Linear for translation, linear normalized for rotation (nlerp), linear for time
It already looks ok imo... but we'd like more natural interpolation:
Catmull-rom for translation, linear normalized for rotation (nlerp), linear for time
mhh see any difference? yeah not easy the up and down motion should be a bit smoother...
There is not much translation in bone animations, most of the movement are governed by joints rotation.
And here if you slow down the anim you can see clearly that we linearly interpolate between rotations:
So I tried to use some cubic interpolation for rotation. There is a quite widespread interpolation called squad for quaternion that does this, here is the result.
Catmull-rom for translation, squad for rotation, linear for time:
Ho boy... something went wrong...
So I tried to fix this for a fair amount of time... and decided to give up on it...
IMO this is a nice system, but you lack a lot of artistic control.
One reason is that we don't use control bones (we'd need a lot of work to be able to use them like in blender), so we will lack some constraints.
The other reason is that... well blender does it for us.. and better... Ok the resulting animation are heavier, but IMO they look a lot better.
At any rate... the system now allows users to plug in their own interpolators for translation, rotation, scale and time, and it provide some default ones, if some Math savvy monkey wants to give a try to smoother interpolations, it's very easy to add your own to the system.
For fun here is a try with an easeOutElastic time interpolator