Motion Matching Trajectory from Non-root Bone

I was considering the implications of the Motion Matching system with my brother (who has spent some years in industry as an animation rigger) and we decided we wanted to investigate some out-of-the-box thinking with regards to what it can do. Unfortunately, our plan requires that the player manipulate a hand not the character root.

I haven’t dug through to find all the CPP classes I would have to change to make this happen, but here’s what I’ve found so far:

  • UPoseSearchSchema and/or UPoseSearchFeatureChannel - Modify the “Trajectory” channel with a parameter that specifies which bone it is computed from. (Or perhaps this would need to be a property of the schema in general, and not the Trajectory channel?)
  • UPoseSearchDatabase - I assume that this will need to be updated to account for the change to the schema above. It will need to compute trajectory using the specified bone instead of just the root motion. Right?
  • FAnimNode_PoseSearchHistoryCollector - also needs to know to track a bone trajectory and not root motion I think
  • FAnimNode_MotionMatching - also needs to know to track a bone trajectory and not root motion
  • UPoseSearchLibrary - looks like FAnimNode_MotionMatching uses this to do the heavy lifting, can’t imagine a change of this scope would not impact this guy. Haven’t taken a look inside yet.

Does this sound do-able? Am I on the right track, or did I miss something obvious or something important?

yes. i think so too. what did you replace it with?