Import step interpolation for loc/rot/scale from GLTF as nearest

Currently all object transform animation tracks get imported and baked
as linear. For step interpolation mark the resulting animation track
with Nearest interpolation to make sure there are no in-betweens
generated. This is useful for camera cuts or similar.
This commit is contained in:
demolke 2023-12-11 01:59:22 +01:00 committed by demolke@gmail.com
parent 89cc635c05
commit 3749cbb3ca

View File

@ -6288,6 +6288,9 @@ void GLTFDocument::_import_animation(Ref<GLTFState> p_state, AnimationPlayer *p_
animation->add_track(Animation::TYPE_POSITION_3D);
animation->track_set_path(position_idx, transform_node_path);
animation->track_set_imported(position_idx, true); //helps merging later
if (track.position_track.interpolation == GLTFAnimation::INTERP_STEP) {
animation->track_set_interpolation_type(position_idx, Animation::InterpolationType::INTERPOLATION_NEAREST);
}
base_idx++;
}
}
@ -6310,6 +6313,9 @@ void GLTFDocument::_import_animation(Ref<GLTFState> p_state, AnimationPlayer *p_
animation->add_track(Animation::TYPE_ROTATION_3D);
animation->track_set_path(rotation_idx, transform_node_path);
animation->track_set_imported(rotation_idx, true); //helps merging later
if (track.rotation_track.interpolation == GLTFAnimation::INTERP_STEP) {
animation->track_set_interpolation_type(rotation_idx, Animation::InterpolationType::INTERPOLATION_NEAREST);
}
base_idx++;
}
}
@ -6332,6 +6338,9 @@ void GLTFDocument::_import_animation(Ref<GLTFState> p_state, AnimationPlayer *p_
animation->add_track(Animation::TYPE_SCALE_3D);
animation->track_set_path(scale_idx, transform_node_path);
animation->track_set_imported(scale_idx, true); //helps merging later
if (track.scale_track.interpolation == GLTFAnimation::INTERP_STEP) {
animation->track_set_interpolation_type(scale_idx, Animation::InterpolationType::INTERPOLATION_NEAREST);
}
base_idx++;
}
}