BACKGROUND: I have a hand tracking solution, and I am trying to use an animation blueprint to move the fingers or a hand. In my IK Rig I have assigned a Limb IK solver with the finger knuckle (a.k.a. “Index MCP” or “index_01” in the Manny skeleton) as the start joint and the final joint (a.k.a “Index DIP” or “index_03”) position and orientation as the goal.
In order to minimize thrashing, I begin each solve with a snapshot from the previous frame, rather than starting from the initial pose.
In the solver I have specified the “Hinge Rotation Axis” as Z, which appears to match the Manny_Simple rigging. I have also set Enable Twist Correction to true (although I don’t think it does anything).
I have not added a Pole IK solver for the intermediate finger joint.
PROBLEM: The fingers accumulate twist. For example, if I perform The Queen’s Wave the finger joints accumulate. If the solver begins from the initial pose the twisting can still occur, but does not accumulate. To keep things really simple, in each frame, the finger world rotation is identical to the palm world rotation.
Additionally, when I manipulate the IK Rig directly it does not get twisted, but claims to be using ABP_Manny_PostProcess… which is weird because I’m using the IK Rig in an animation blueprint, and in the preview it’s the other way around.
Here’s the result when I begin each solve from the previous pose.
NOTE: This is my first time working with Unreal’s rigging system, so maybe I have set things up incorrectly?
On my skeletal mesh, my Anim Class is set to my animation blueprint, which in turn uses my IK Rig in its AnimGraph.
Zooming out a bit, an IK Rig for a full body and all fingers is an intimidatingly large node in a blueprint. Is there some expectation that the skeleton is broken out into separately animated components? Should I be handling this in C++, or in a Control Rig blueprint, or somewhere else?
Also, it seems a bit weird that I need to commit to ONE approach to solving for body poses, when a mix of forward and inverse kinematic solving seems like a more natural approach.
TLDR; maybe the problem is that I’m just doing it wrong?


