Линейная интерполяция матриц вращения не является математически обоснованной. Векторы, составляющие матрицу вращения, должны быть единичной длины ... или, по крайней мере, оставаться постоянной длины.
Представьте себе часы с стрелкой на 12 и стрелкой на 6. Если вы линейно интерполируете точку в Кончик стрелки 12 часов, до кончика стрелки 6 часов точка перемещается по прямой линии от верха часов к основанию.
Чтобы интерполировать вращение, представленное матрицей 4x4, вы можете преобразовать повороты матриц к кватернионам и .slerp (сферическая линейная интерполяция) между этими кватернионами, а затем преобразование обратно в матрицу.
И затем линейная интерполяция object.position. (хотя опять-таки .. это предполагает линейное движение между ключевыми кадрами).
Теперь, если вращение мало, вы можете избежать линейной интерполяции матрицы, но вам нужно будет ортонормировать ее на каждом шаге, преобразовать me sh в тот, который имеет постоянные векторы длины, которые ортогональны друг другу. Это не так сложно ... вы используете комбинацию точечных произведений, умножаете и складывает векторы, образующие строки матрицы (или я забыл, что столбцы), чтобы ортонормировать матрицу. Но это больше боли и менее точно, чем просто использование кватернионов и .slerp.