Skeleton3D: Unable to stop child bones inheriting parent bone rotations

Godot Version

4.3 stable

Question

I am trying to animate joints on a robot arm exported from Blender via GLTF. It is made up of separate meshes per arm (i.e. between each joint) and 1 Armature. In Blender I can rotate each joint correctly and each joint rotation is independent of the other joints, but in Godot immediately on import I get rotations applied to the joints in Skeleton3d (not in the meshes) that do not align with the root bone axis causing an incorrect rotation offset. It almost seems like Godot ignores the Inherit Rotation flag in Blender always setting it true. Am I missing something obvious?

I’ve tried adding additional bones where an offset occurs but it doesn’t work as the rotation still propagates.

The only solution I can think of is to have a separate armature per joint, which is horrible…

Is there a better way?


Blender. All rotations applied as zero, works correctly


Godot. Joint3 has inherited its parent bone rotation

Thanks

The best workaround I’ve found is to cache each joint initial Quaternion values and then apply them as offsets when rotating the joints to correct for the errors. This seems OK, just not a very nice solution. Unless anyone has a better idea?