I know that quaternions need to be normalized if I want to rotate a vector.
But are there any reasons to not automatically normalize a quaternion? And if there are,
Use of NONunit quaternions can be efficient.
Only few operations require unit length, for example interpolation.
Some tips:
So it is not required to use only unit quaternions, it is just common practice. For every use case you can make decision use or not normalization. Personally i prefer to use nonunit quaternions.
WARNING: often, working with unit quaternions, we forget about numerical errors. For example, converting from/to matrix quaternion and thinking that it still unit make big numerical unstability, matrix is scaled , quaternions extracted is invalid. You can easy make such experiment.