diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py b/io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py index bdafae5ecd47154dde353a433fd446aeb9d83045..e05f1f64741713850c8b1f2fcb8d35ec70ed8dab 100755 --- a/io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py +++ b/io_scene_gltf2/blender/imp/gltf2_blender_animation_bone.py @@ -100,12 +100,20 @@ class BlenderBoneAnim(): if animation.samplers[channel.sampler].interpolation == "CUBICSPLINE": # TODO manage tangent? - quat_keyframes = ( + quat_keyframes = [ quaternion_gltf_to_blender(values[idx * 3 + 1]) for idx in range(0, len(keys)) - ) + ] else: - quat_keyframes = (quaternion_gltf_to_blender(vals) for vals in values) + quat_keyframes = [quaternion_gltf_to_blender(vals) for vals in values] + + # Manage antipodal quaternions + # (but is not suffisant, we also convert quaternion --> euler --> quaternion) + for i in range(1, len(quat_keyframes)): + if quat_keyframes[i].dot(quat_keyframes[i-1]) < 0: + quat_keyframes[i] = -quat_keyframes[i] + + if not node.parent: final_rots = [ bind_rotation.inverted() @ quat_keyframe