By | Casey Muratori |

However, to my surprise, larger rotations produced very little divergence between linear and spherical interpolation, despite substantial divergence for exponential map interpolation:

The more I played with it, the more I realized that I had been thinking about the problem all wrong: not only are linear and spherical interpolations or quaternions always exactly the same *path*, but because of the half-angle construction of quaternions, their speeds are much more similar than you would expect from linear interpolation of whole-angle rotation representations like matrices.
Even extreme differences in interpolation between spherical interpolation and the exponential map yielded substantively little difference between spherical interpolation and linear interpolation of quaternions:

This visualization-driven realization informed the entire design of the 2.0 version Granny 3D animation engine. Aided by a much better and more intuitive understanding of how quaternions really worked, I was able to develop a number of novel techniques that allowed the animation core to be much faster and more flexible.
Several years later, in 2006, I put up a makeshift video describing one of the more obscure tricks I employed. Because quaternions differentiate between 360 and 720 degree rotations (unlike matrices), with a little preconditioning you can make joints behave much more realistically under animation compositing as they would with any other orientation representation:

If you have a quaternion-based animation engine, I highly recommend using this method! It costs nothing and yields much more predictable and satisfying animation blending results for rotational joints in all cases.
— Casey
PS. If you like my blog and want to see what I’m working on these days, here are some links to my current projects: