C++ APIを使用してプログラムでMayaを読みたい人間の二足歩行アニメーションファイル形式です。Mayaへのアニメーションキートラックのインポート
アニメーションファイルの形式は、Open Asset Importer's per-node animation structureと似ています。
各関節には、最大60個の3Dベクトルキー(関節の平行移動を説明するため)と60個の四元キー(関節の回転を表す)があります。すべてのジョイントは同じ数のキーを持つことが保証されています(または全くキーがありません)。
アニメーションの長さ(秒単位)を指定または変更することができます(たとえば、30 FPSアニメーションで60キーを2秒以上に設定することができます)。
ジョイントの平行移動と回転は、フレームごとにスケルトンツリーを伝播し、アニメーションを生成します。
ここにサンプルがあります。データ構造に関する追加の注釈は、ロギング機能によって追加されます。私は簡潔さのためにキーを切り捨てました。 C++、データ構造に
Bone Bip01
Parent null
60 Position Keys
0 0.000000 4.903561 99.240829 -0.000000
1 0.033333 4.541568 99.346550 -2.809127
2 0.066667 4.182590 99.490318 -5.616183
... (truncated)
57 1.366667 5.049816 99.042770 -116.122604
58 1.400000 4.902135 99.241692 -118.754120
59 1.400000 4.902135 99.241692 -118.754120
60 Rotation Keys
0 0.000000 -0.045869 0.777062 0.063631 0.624470
1 0.033333 -0.043855 0.775018 0.061495 0.627400
2 0.066667 -0.038545 0.769311 0.055818 0.635212
... (truncated)
57 1.366667 -0.048372 0.777612 0.065493 0.623402
58 1.400000 -0.045869 0.777062 0.063631 0.624470
59 1.400000 -0.045869 0.777062 0.063631 0.624470
Bone Bip01_Spine
Parent Bip01
60 Position Keys
...
60 Rotation Keys
...
私は現在、これに対応している:
std::unordered_map<string, std::vector<Vector3>> TranslationKeyTrack
は、対応する骨への並進ベクトルの集合をマッピングするために使用されます。
std::unordered_map<string, std::vector<Quaternion>> RotationKeyTrack
は、回転四元数のセットを対応する骨にマッピングするために使用されます。
その他の注意事項:親骨に対しては動かない骨もあります。これらのボーンにはキーが全くありませんが(0キーのエントリがあります) ボーンにはローテーションのみ、またはポジションキーのみがあります。 スケルトンデータは、MFnIkJointを使用してMayaに読み込むことができる別のファイルに保存されます。
アニメーションファイルで指定されたボーンは、そのスケルトンデータのボーンに対して1:1です。
ここで、このアニメーションデータをMayaにインポートします。しかし、私はMaya's way of accepting animation data through its C++ APIを理解していません。
特に、MFnAnimCurve関数のセットaddKeyFrame
またはaddKey
は、ベクトルとクォータニオンのリストを持っていますが、タイムキーに関連付けられた浮動小数点値を1つだけ受け入れます。 MFnAnimCurveは 'tangents'も受け入れます。ドキュメンテーションを読んだ後も、私が持っているデータをこれらの接線に変換する方法はまだ分かりません。
質問:私が持っているデータをMayaが理解できるように変換するにはどうしたらいいですか?
私はいくつかのサンプルコードが参考になるので、例をよく理解しています。