Hi all,
So I’ve got a couple of meshes exported from blender. I’d like to create an AnimationGroup using animations from these meshes. Is this possible?
So far, I’ve tried:
var animationGroup = new BABYLON.AnimationGroup(“my-animation-group”);
let firstAnimatable = firstSkeleton.beginAnimation(firstAnimationName);
firstAnimatable.pause();
And did the same thing for my secondSkeleton, thirdSkeleton, etc. And then, I tried the following:
// First try.
animationGroup.addTargetedAnimation(firstAnimatable.getAnimations()[0].animation, firstMesh)
// Second try. I noticed the “Target” on the animations was “_matrix”, so I tried getting the animations using getAnimationByTargetProperty("_matrix")
animationGroup.addTargetedAnimation(firstAnimatable.getAnimationByTargetProperty("_matrix"), firstMesh);
My third try was just like the first try, but instead of just adding firstAnimatable.getAnimations()[0].animation, I added all the animations to the group (i.e. firstAnimatable.getAnimations()[0].animation, firstAnimatable.getAnimations()[1].animation, firstAnimatable.getAnimations()[2].animation, etc…)
None of the approaches worked: every time I did animationGroup.play(), nothing happened. Any tips?
Hey! do you mind reproducing the issue in the PG?
You can use this doc to reference your files: Using External Assets - Babylon.js Documentation
I used the animation blending example to create a quick and dirty PG example.
https://www.babylonjs-playground.com/#IQN716#81
In that example I’m only using 1 mesh (in my project I have 3 meshes), but even with that 1 mesh I’m not able to get it to work. I feel like if I can get that example to work, I’ll be able to get my 3 meshes working as well.
I’m not sure what the target in addTargetedAnimation() is supposed to be, and how to convert the animatables into an animation I can pass to addTargetedAnimation().
Hello this is because the idleAnimation (for instance) contains 57 animations (one per bone)
So technically you will need to call addTargetedAnimation 57 times to add the animation for each bone
1 Like
Thanks, I got it working here:
https://www.babylonjs-playground.com/#IQN716#84
However, now I’ve got a new problem - when the speedRatio of the animation group is slow, the animation looks choppy as hell. Is there a way to interpolate the animationGroup? I was kinda hoping animationGroup.normalize() would automatically interpolate the animations if I passed in say, beginFrame = 0 and endFrame = 1000. That unfortunately didn’t work
Also, performance wise, is this approach much slower than just calling scene.beginAnimation()?
Nope this is quite the same
For interpolation, you can set the animation loopMode to cycle (instead of constant):
(check line #42)
2 Likes
Thanks Del. You’re an absolute legend mate.
2 Likes