Download

Runtime Retargeting & Root Motion?

Has anyone got Runtime Animation Retargeting to work with Root Motion? I can get all the retargeting, except the root motion to work properly. The root motion doesn’t seem to scale up/down. No matter what I set the bone to (Animation, Animation Scaled, etc.) it doesn’t scale the results. My shorter character’s feet slide to match the original animation’s root motion.

When using retargeting to create a new set of animations, there’s an option called “Convert Spaces to New Skeleton” that adjust the root bone translation. But this doesn’t seem to automatically happen with runtime retargeting.

Anyone know how to make this work?

What happens when you specifically change the retargeting options of the root bone between skeleton / animation and the other avaliable options?

Ideally, animation would follow the animation scaled by the skeleton size (animation scaled is or should be one of the options).

[USER=“3140864”]MostHost LA[/USER] Nothing seems to change. Character just moves at the same root motion speed as the original animation. I thought Animation Scaled would do it, but no dice. Animation mode didn’t work either unfortunately.

Really odd. If you share a FBX anim to try basic skeletal retargeting I’m willing to test it out…

Unreal handle root motion at character movement component, and work flow:

  1. extract root motion delta transform from animation instance;
  2. apply delta transform with movement component;

when you Retargeting animation, if the root bone scale keep as identity, anything should work fine.
But if the root bone being scale, then u should apply the root bone scale after Retargeting;
check it out: SetAnimRootMotionTranslationScale

Hi, I encountered the same issue. I have multiple characters sharing the same skeleton and they all have different sizes. They work well in Unreal with all animations, except the root motion animations. I analyzed the issue, and its evident from the visuals that the root motion (red line in the viewport) is not rescaling based on the model, while everything else is (using the right “animation scaled” setting on the pelvis and “Skeleton” settings on the other bones).

To solve the issue you have to:

  • enable “Root Motion” in the animation assets, this will show the char move in place while playing the single animations, but dont worry
  • enable “Root Motion from everywhere” or “Root Motion in Montages” inside the Animation Blueprint “Class Defaults” panel
  • Create a C++ function which is setting the scale for your character, in my case I did:

UCLASS()
class RETARGETWITHSCALE_API UBPUtils : public UBlueprintFunctionLibrary
{
GENERATED_BODY()

UFUNCTION(BlueprintCallable, Category = "PS")
static void SetRootMotionScale(ACharacter* pawn, float scale);
};


void UBPUtils::SetRootMotionScale(ACharacter* pawn, float scale)
{
  pawn->SetAnimRootMotionTranslationScale(scale);
}


Then in the BP construction script of your character BP call the SetRootMotionScale with the right scale. I didnt yet figure out a way to read this value from the character itself, so I pass a manual value.

This will now result in the character (and its capsule) actually moving forward by an amount scaled properly. So his feet will be firmly on the ground if you pass in the right scale and no sliding will occur.

Side note: One other issue remains for root motion animations which are moving the char also vertically (example a jump), as the capsule will stay on the ground instead.

Hey @johnnyRobotox
Did you find a solution for it? Scaling the distance covered proportionally shouldn’t be this complicated. Or is it?

Hello @johnnyRobotox Can you plz tell how to do runtime retargeting for non-root animations.Since you figured it out for non-root animations plz help me.I am using mixamo skeletons.I have 30 animations for one skeleton but I need to play those animations on other skeleton as well.I can retarget them by duplicating and retargeting but I want to do it at runtime.Plz help me.Thank you