私は Blender3D を使用していますが、答えは API 専用ではないかもしれません。
PoseBones に割り当てる必要のあるマトリックスがいくつかあります。結果として得られるポーズは、ボーン階層 (親子関係) がない場合はきれいに見えますが、ある場合は台無しになります。
リグ モデルのサンプル ブレンド、テキスト アニメーション インポーター、およびテスト アニメーション ファイルを含むアーカイブをここにアップロードしました
: http://www.2shared.com/file/5qUjmnIs/sample_files.html
「sba」ファイルのインポーター。両方のアーマチュアに対してこれを行います。
これは、実際の (複雑な) インポーターでポーズを割り当てる方法です。
matrix_bases = ... # matrix from file
animation_matrix = matrix_basis * pose.bones['mybone'].matrix.copy()
pose.bones[bonename].matrix = animation_matrix
編集モードに移動し、すべてのボーンを選択して Alt+P を押してペアレント化を元に戻すと、ポーズが再び正常に表示されます。
API ドキュメントには、PoseBone.matrix は「オブジェクト スペース」にあると書かれていますが、これらのテストから、それらが親ボーンに相対的であることは明らかです。
制約とドライバーが適用された後の最終的な 4x4 マトリックス (オブジェクト 空間)
私はこのようなことをしてみました:
matrix_basis = ... # matrix from file
animation_matrix = matrix_basis * (pose.bones['mybone'].matrix.copy() * pose.bones[bonename].bone.parent.matrix_local.copy().inverted())
pose.bones[bonename].matrix = animation_matrix
しかし、それは悪く見えます。操作の順序を実験しましたが、すべてうまくいきませんでした。
記録として、古い 2.4 API では、これは魅力的に機能しました。
matrix_basis = ... # matrix from file
animation_matrix = armature.bones['mybone'].matrix['ARMATURESPACE'].copy() * matrix_basis
pose.bones[bonename].poseMatrix = animation_matrix
pose.update()
Blender API リファレンスへのリンク: