This is for the Blender 2.6 API.
There are two problems:
1. When I import a single animation frame from my animation file to Blender, all bones look fine. But when I import multiple (all of the frames), just the first one looks right, seems like newer frames are affected by older ones, so you get slightly off positions/rotations.
This is true when both assigning
bone_index = 0 # for each frame: for frame_index in range(frame_count): # for each pose bone: add a key for bone_name in bone_names: # "bone_names" - a list of bone names I got earlier pose.bones[bone_name].matrix = animation_matrices[frame_index][bone_index] # "animation_matrices" - a nested list of matrices generated from reading a file # create the 'keys' for the Action from the poses pose.bones[bone_name].keyframe_insert('location', frame = frame_index+1) pose.bones[bone_name].keyframe_insert('rotation_euler', frame = frame_index+1) pose.bones[bone_name].keyframe_insert('scale', frame = frame_index+1) bone_index += 1 bone_index = 0
Again, it seems like previous frames are affecting latter ones, because if I import a single frame from the middle of the animation, it looks fine.
2. I can't assign armature-space animation matrices read from a file to a skeleton with hierarchy (parenting).
In Blender 2.4 you could just assign them to
PoseBone.poseMatrix and bones would deform perfectly whether the bones had a hierarchy or none at all.
In Blender 2.6, there's
matrix_basis is relative to parent bone,
matrix isn't, the API says it's in object space. So it should have worked, but doesn't. So I guess we need to calculate a local space matrix from our armature-space animation matrices from the files.
So I tried multiplying it (
PoseBone.matrix ) with
PoseBone.parent.matrix.inverted() in both possible orders with no luck, still weird deformations.