Problem with asset animation

Hello,

I’m running into what looks like an animation import/playback issue in Babylon.js with a wolf asset.

Expected behavior:

  • The wolf’s death animation should make the body fall down to the ground.
  • In Unity, the same asset/animation behaves correctly and the feet stay grounded.

Actual behavior in Babylon:

  • When the death animation plays, the wolf appears to hover or collapse around its torso/center instead of dropping naturally toward the ground.
  • I see a similar issue on the attack animation: when the wolf crouches, the legs appear to lift upward instead of the body lowering toward the ground.

Important context:

  • This is not a retargeted animation.
  • The wolf uses its own rig and its own animations.
  • I tested this in a standalone Babylon-only debug scene, outside my game logic.
  • I also exported a .babylon version as a control test, and it still shows the same problem.
  • So this does not appear to be caused by my gameplay code, state machine, or retargeting pipeline.

What I already checked:

  • The animation looks correct in Unity.
  • The source animation and exported runtime asset appear correct outside Babylon.
  • I tested multiple export variants and skin/root metadata variants, but they all still show the same issue in Babylon.
  • I also tested the model in an isolated Babylon debug page, spawning the wolf alone and looping the animation.

Environment:

  • Babylon.js version: 9.1.0
  • Blender version: 4.2.1
  • Export formats tested: .glb and .babylon

What I can provide:

  • the wolf asset
  • the animation asset
  • screenshots / video of Unity vs Babylon
  • a minimal Babylon repro

My main question:

  • Is there any known Babylon issue or import setting that could cause skeletal animations like this to appear centered incorrectly or lose their grounded motion, even when the source animation is correct?

Any guidance would be greatly appreciated.

Hey @Fate_Magician ! It would help if you shared some or all of the following:

Hello,

Sure — here is a minimal repro.

In the video:

  • Top left: Unity playing the asset correctly
  • Bottom right: Babylon Playground playing the same asset incorrectly

As you can see, in Unity the wolf falls naturally toward the ground during the death animation.
In Babylon, the wolf rises / collapses around its upper body instead.

This is a self-contained GLB with the mesh, rig, and embedded animation groups.
There is no retargeting involved in this repro.

The public .glb asset is here:

https://cdn.jsdelivr.net/gh/FateMagician/babylon-repro@main/wolf.actor.glb

And the playground link / code is here:

import { GridMaterial } from "babylonjs-materials";




class Playground {

  public static async CreateScene(engine: BABYLON.Engine, canvas: HTMLCanvasElement): Promise<BABYLON.Scene> {

    const scene = new BABYLON.Scene(engine);

    scene.clearColor = new BABYLON.Color4(0.06, 0.07, 0.1, 1);




    const camera = new BABYLON.ArcRotateCamera(

      "camera",

      -Math.PI / 2,

      1.05,

      8,

      new BABYLON.Vector3(0, 1.2, 0),

      scene

    );

    camera.attachControl(canvas, true);




    const hemi = new BABYLON.HemisphericLight("hemi", new BABYLON.Vector3(0, 1, 0), scene);

    hemi.intensity = 1.1;




    const dir = new BABYLON.DirectionalLight("dir", new BABYLON.Vector3(-0.3, -1, 0.25), scene);

    dir.position = new BABYLON.Vector3(7, 12, -6);

    dir.intensity = 1.0;




    const ground = BABYLON.MeshBuilder.CreateGround("ground", { width: 24, height: 24 }, scene);




    const groundMaterial = new GridMaterial("groundMaterial", scene);

    groundMaterial.majorUnitFrequency = 5;

    groundMaterial.minorUnitVisibility = 0.45;

    groundMaterial.gridRatio = 0.5;

    groundMaterial.backFaceCulling = false;

    groundMaterial.mainColor = new BABYLON.Color3(0.12, 0.15, 0.2);

    groundMaterial.lineColor = new BABYLON.Color3(0.55, 0.6, 0.7);

    groundMaterial.opacity = 0.98;




    ground.material = groundMaterial;




    const rootUrl = "
";

    const fileName = "wolf.actor.glb";




    const result = await BABYLON.SceneLoader.ImportMeshAsync("", rootUrl, fileName, scene);




    console.log("animation groups", result.animationGroups.map((group) => group.name));




    const group =

      result.animationGroups.find((candidate) => candidate.name === "wolf_death") ??

      result.animationGroups.find((candidate) => candidate.name === "wolf_attack") ??

      null;




    group?.reset();

    group?.start(true);




    return scene;

  }

}




export { Playground };

Thanks for the help!

I do not know Unity but is it possible there that is sth like “root motion” enabled and this somehow gets dropped during the export?

Not sure, I implemented the animations with the code found on the playground link/code, if it’s missing anything do let me know. So far, though, I have not been able to solve it, even though the anim and model are proven to work in Unity.

Please, any help would be greatly appreciated, I cannot implement more complex animations until I know how to fix this particular behaviour

I opened the .glb you shared in Blender, and it looks like the root motion is cleared:

So Babylon.js is actually playing the animation correctly according to the .glb data.

I wonder if Unity is moving the root down as the wolf death animation plays?

Indeed there was an issue when converting the assets. If anyone runs into this kind of issue, make sure the fbx to glb produces a faithful export. Otherwise, you might need to look at the root movement so they’re not dropped or flatenned.

I got a clean glb conversion and it got fixed.

This thread is solved. Thanks everyone.