Hi,
We are in the process of exploring how to implement upper body animations on top of motion matching.
The copy motion strategy presented on 2024’s GDC looks very promising but we are finding it a bit difficult to grasp what the node is actually intending to do and what all the parameters mean.
There are two other posts on UDN that refer to the copy motion node but we were looking for a bit more information if possible.
Currently, we are trying to replicate almost to the T the example shown on the GDC talk. As you can see in the images attached we even used the same names on the cached poses to avoid confusion.
The item pose that we are using has the character holding two guns on a ready state, while the neutral pose has him with his arms by the side.
As explained on the UDN post, we first apply a layered blend per bone filter to the motion matching result and the item pose so that we get a stiff upper body holding two guns with the ready pose. We then calculate a dynamic additive from the motion matching pose to the neutral pose and apply it to the item pose only affecting the spine bones (we cut it at the clavicles and neck).
This produces an animation that looks a little stiff on the arms (since we are using a single frame anim) but carries the motion of the spine, which makes the arms swing side to side.
After looking at the copy motion node code, we noticed that:
- Base pose is ignored if a pose history node can be fetched with a valid delay an bUseBasePose is true
- The node appears to find the delta transform between the source bone and the bone to modify (which I imagine should be the same bone most of the time) in the space of CopySpace bone.
- It then applies that delta in the space of ApplySpace bone to the given BoneToModify.
- Deltas are calculated from the motion matching unarmed pose and a past motion matching unarmed pose.
From the results shown, I imagine the intention is to achieve the effect of overlapping actions on the arms, however we are struggling to understand what values to use for pretty much all of the parameters in the node. So far we haven’t been able to achieve any reasonable results.
We also noticed the TargetCurveName and the fact that a curve is stored but not really sure of how that relates to the big picture.
Lastly, I imagine there is some sort “correct” configuration on the leg IK node to make the hands look right, it’d be nice to get a run down of how those parameters ought to look.
Would it be possible to get an explanation behind the rationale of the node? what it generally intends to do and why?
Could we get some sample parameter values if available for the copy motion node and the leg IK node for configurations where:
- You hold an item by the side with 1 hand
- You aim 1 gun with 1 hand
- You aim 2 guns with 2 hands
- You carry a two handed weapon (like pick axe)
- You aim a two handed weapon (like a rifle).
We are interested here in seeing what the specific configuration is for SourceBone, BoneToModify, CopySpace and ApplySpace.
Also to understand better what all the rotation, curve and translation parameters are for.
Attaching screenshots of the current work for more context.
Thank you in advance!