Resolving the problem of revolving (rotation loops question)

For the longest time this has bugged me. Say I’m doing a looped animation where an object is rotating around its axis, one or several times x360 degrees. So I have an initial keyframe, one or several keyframes where the rotation is happening:


…and lastly I want to close the loop by putting in an end keyframe that’s identical to the first. But oops, if I just insert the first keyframe as last (as is usually done with non-revolving animations), unsurprisingly I get this:


At this last stretch between the second to last and last keyframe, the thing starts rotating BACKWARDS like crazy, going all the way back to its original position - whereas I wanted it to go in the opposite direction and just slightly rotate to where it looks to be in the exact same angle as it started.

Of course, this is expected behavior and you might say: “Well, just manually adjust it to make it look approximately similar to its original position”. And yes, for simple rotating objects like that it’s fairly doable. Not so much for armatures, though, and that’s where the problem really bugs me. For a simple example, a character that is rolling forward several times, or spinning around. I need to create a loop of that (for Unity). Where I would normally simply copy the starting keyframe and insert it in the end, I instead have to manually put the whole skeleton into the pose that looks as similar as possible to the starting pose, so that when looping, there’s no visible jump.

Obviously that’s a huge pain in the butt, especially for characters with a large number of appendages.

Anyone know a way around that? Ideally I want a solution where for spinning/rolling/revolving characters, I simply have to copy-paste the first frame at the end of the loop, with some kind of (magic) adjustment that doesn’t make it wind back like crazy and instead go the shortest route from (second to last) to (last).

An alternative for you is to use a transformation constraint or a driver to turn the character or object. Here is a simple constraint to an empty. When the empty moves 1 unit on x the cube move however many radians or degrees you specify.

Simplifies your issues for rotations as the constraint or driver does not have the 180 degree issue of local transforms.CONSTRAINTTURN.blend (485 KB)

And you have a lot less key frames to try to adjust.

Thanks a lot! I haven’t even thought of that, lol. But will this method when it comes to exporting an .fbx?