Download

Blend poses by rotation component?

Is there a best-practice way to approach blending two animations in a way that uses some component of a bone’s transform but not another component (or weights them differently)?

Example: suppose you have an animation on the character’s torso which yaws it left and right. Maybe an aim blend, maybe a melee swing, whatever. The point is, the relevant transforms in the animation are on the spinal bones but only on the yaw axis; you don’t care about any other transforms on the bones, as long as they correctly yaw in mesh space.

Now, you can use a mesh space blend for this, and it will work, but it will cause those bones to entirely inherit the animated transform along all axes, which may not be desired. For example, suppose your character performs this animation while also performing a run loop. Now, his spinal bones may pitch forward slightly, or roll (especially near the shoulders), as a part of this animation. When you play the animation that turns his torso, you only really want the blend to be along the axis he is turning; you don’t want to inherit the pitch or roll data in the animation. But when you blend the poses, you are forced to choose weights that impact ALL of the rotation components of the bone; it takes some amount of the total rotation from the run loop, and some amount of the total rotation from the torso animation. There’s no way, that I have found, to say “I want to utilize the pitch and roll from this animation, and the yaw from this animation, and blend them together”. This forces you to compromise, leading to situations where the character’s spine must “stiffen on the way up” as it takes in less and less of the underlying run animation’s transforms in order to ensure that the final bones in the chain are 100% weighted to the yawing-torso pose. Which is not exactly desired.

Note, I am aware that additives can do this to a certain extent. The issue with additives is that you can’t “blend per bone” additives that I know of; you can’t ease an additive spinal animation in up the length of the spine, you can only apply it in-full (or in some absolute weighted sense) to the base animation. This means that you don’t really have the ability to, say, determine that by the shoulder bones, you want to be entirely in the aim pose, with no element of the underlying pose.

Currently the way I’m handling this for my specific use case is to use Transform Bone nodes to procedurally drive the tilt of the lower spine bones based on the same velocity/input floats that drive the run loop, but that will only work in this very narrow case (it will get out of control if the transform I need to drive is more than a basically-fixed angle change). Is there a better approach to this sort of blending?