[Bf-committers] Animation regression, quaternion normalization

Nathan Vegdahl cessen at cessen.com
Sun Feb 26 21:26:55 CET 2012


> So are you saying the quaternions are normalized on keyframes and they
> drift during interpolation?

Let me try to clear up some confusion.

In general, quaternions used for rotations are only considered "valid"
if they are normalized.  I'm not sure if mathematically they need to
be normalized to be applied properly, but regardless, when a
quaternion rotation is applied, conceptually you are applying (and
perhaps literally you need to apply) its normlized version.  That is
_not_ the issue I'm talking about here.  Blender already does this
correctly, as can be seen from the fact that even unnormalized
quaternions in the n-panel result in consistent and valid rotations in
the affected object/bone.  This is _not_ at issue.

The issue is that quaternions in Blender are not interpolated by
SLERPing or SQUADing (which result in normalized quaternions).
Instead they are just interpolated by the typical interpolation
mechanics in the f-curves editor, which nearly always results in the
intermediate quaternion values being unnormalized.

This is not a problem per se.  Again, blender applies un-normalized
quaternion rotations appropriately.  But it _does_ mean that
interpolation between significantly different rotations results in the
undesirable effect I illustrated in the blend file I posted up-thread.

In previous versions of Blender, where the n-panel quat values were
auto-normalized, fixing this was trivial for the animator to do.  They
simply inserted a keyframe or two in-between (as illustrated in the
monkey on the right in the up-thread blend file).  Since those key
frames would automatically have normalized values, it fixed the
interpolation issues.  In fact, it was so transparent that most
animators don't even realize they need to do that, since breakdown key
frames usually get placed eventually anyway.

But as things are now, animators would first need to be aware of and
understand the issue (which is esoteric enough that it's even hard to
explain on a developer list like this, no?), _and_ they would need to
take the time to manually tweak keyframe values to be roughly
normalized.  This is not a good situation, and it is about as far from
user-friendly as you can get.

--Nathan


On Fri, Feb 24, 2012 at 11:18 PM, Dahlia Trimble
<dahliatrimble at gmail.com> wrote:
> So are you saying the quaternions are normalized on keyframes and they
> drift during interpolation? I wonder if blender is interpolating the
> quaternions used to animate, or interpolating something else like bone
> matrices and just displaying an interpolated quaternion but not using it
> for animation?
>
> On Fri, Feb 24, 2012 at 12:37 PM, Nathan Vegdahl <cessen at cessen.com> wrote:
>
>> Hi Brecht,
>> You are right that it appears there are a lot of releases with this
>> regression!  I'm not sure how I didn't notice before.  Guess I wasn't
>> animating anything with large rotations.
>>
>> It appears the regression was introduced in version 2.56.  Versions
>> 2.55 and earlier behave as desired.
>>
>> 2.4x and earlier _do_ auto-normalize (I just tested).  In the 2.4x
>> series quats are displayed as eulers in the n-panel, so you have to
>> set keyframes and look at the values of the keys in the Ipo editor to
>> see the actual quat values.  Try, for example, keying a bone unrotated
>> on frame 1, then rotated 180 degrees on frame 21.  On frame eleven
>> it's clear that the values given by the Ipo curves are not normalized.
>>  However, if you move to frame 11 and set a key, the inserted keys are
>> normalized.
>>
>> This is a highly desirable behavior, because it keeps quaternion
>> values from drifting and causing rotation speed issues with
>> interpolation.
>>
>> Perhaps we could just normalize quaternion values upon inserting
>> keyframes?  That is the primary use-case here.
>>
>> --Nathan
>>
>>
>> On Fri, Feb 24, 2012 at 7:51 AM, Brecht Van Lommel
>> <brechtvanlommel at pandora.be> wrote:
>> > Hi Nathan,
>> >
>> > I tried manually typing in non-normalized values in the N key
>> > transform panel in the 3d view, and rotating objects/bones after that
>> > with transform, but could not see it auto-normalize the values in any
>> > version I tested (2.49, 2.57, 2.60, 2.62).
>> >
>> > Probably I'm misunderstanding something, but I can't find any traces
>> > of this feature.
>> >
>> > Brecht.
>> >
>> > On Thu, Feb 23, 2012 at 11:03 PM, Nathan Vegdahl <cessen at cessen.com>
>> wrote:
>> >> Hi guys, I wrote to the list about this before but received no response.
>> >>
>> >> I don't know when this was changed, but quaternion rotations for
>> >> objects and bones in Blender are no longer auto-normalized for the
>> >> user.  I am frustrated that a release (2.62) made it out the door with
>> >> this being the case, as it substantially harms the practicality of
>> >> animating with quaternions.  It is not "incorrect" behavior per se, so
>> >> I am hesitant to file a bug report.  But it is something that needs to
>> >> be changed.
>> >>
>> >> I think we either need to revert behavior back to how it was before
>> >> (quaternions being auto-normalized in the transform panel), or find
>> >> another solution.  But as things are right now, quaternions are
>> >> impractical to animate with in many circumstances (especially doing
>> >> blocking on characters involving large rotations).  I will be happy to
>> >> provide a technical explanation of why that is the case, but at the
>> >> moment I am swamped trying to finish my rigging DVD.
>> >>
>> >> I just want to make sure this doesn't slip into the next release as
>> >> well!  It is a serious regression.
>> >>
>> >> --Nathan
>> >> _______________________________________________
>> >> Bf-committers mailing list
>> >> Bf-committers at blender.org
>> >> http://lists.blender.org/mailman/listinfo/bf-committers
>> > _______________________________________________
>> > Bf-committers mailing list
>> > Bf-committers at blender.org
>> > http://lists.blender.org/mailman/listinfo/bf-committers
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers


More information about the Bf-committers mailing list