Before I shoot the question, here are the testbeds
The gltf I am trying to animate - https://playground.babylonjs.com/#88CB6A#76
Example from Babylon - https://playground.babylonjs.com/#1BZJVJ#33
Here is my problem:
The example from Babylon uses bone.setAbsolutePosition() to manipulate the 7th bone of the dude mesh (head bone). And as you can see the head does move in the playground.
I tried something similar with my gltf mesh and I can’t seem to use setAbsolutePosition with my bones. The only thing that seems to work is doing a setRotation on the Local space (not world or not Bone space).
To prove that setAbsolutePosition doesn’t work, I created a cube at 0, 0, 0 and I try to move my mesh from there. As you can see in the playground the mesh doesn’t move from it’s original position even though I operate on the root bone.
How would I go about debugging this problem? At this point I understand it has to be my gltf. But I have no idea where to look. Any help is appreciated. Thanks.
When dealing with bones from glTF files you must use the linked TransformNode
and not directly the bone:
https://playground.babylonjs.com/#88CB6A#77
That’s because of the way skeleton/bones are handled in glTF files.
5 Likes
Woaaah love it! Thanks @Evgeni_Popov! Is there any we can add this to the documentation for Bones and Skeletons (Bones and Skeletons | Babylon.js Documentation)? That way future travelers are aware of this situation. Unless this was mentioned somewhere and I missed it 
Thanks!
Of course: do you want to make a PR for it? We have some docs that explain how to do it: Contribute To The Documentation | Babylon.js Documentation
2 Likes
@Evgeni_Popov Follow up on this. I was testing out a few things with this, my bad for delaying with the documentation as well. The bounding box for the mesh doesn’t seem to update when I update the bone positions.
I did a simple test on the playground by doing showBoudingBox = true on the skeleton Mesh and then updating the root bone position. Thoughts on what’s going wrong?
The bounding box is not recomputed based on the skeleton/bones. It’s up to you to set a bounding box that is large enough to encompass all frames of an animation (or set mesh.alwaysSelectAsActiveMesh = true
to avoid culling based on the bounding box).
2 Likes
Is there a way to set bounding box manually computing by myself? If so, how to make this properly?
You can use mesh.setBoundingInfo()
:
2 Likes