| 色々試したところ、この件についての原因が判明しましたので報告いたします。
結論から言いますと、ToyStudioで出力したXファイルに問題はなく、 むしろ、最も仕様に忠実で正確なXファイルを出力しております。(^〜^)
問題があったのは、Microsoft以外のビューアーや各種読み込み ライブラリーの読み込みコードにあるようです。
上記のMicrosoftのサイトにアップされている「AnimatedSkelton.x」ファイルを例にしますと、 ------------------------------- Animation Anim-Bip01 {
{ Bip01 }
AnimationKey { 4; 52; 0;16;0.003860,-0.203785,〜;;, 160;16;-0.009195,-0.195059,〜;;, --------------------------------- となっているところの
0;16;0.003860,-0.203785,〜;;, 160;16;-0.009195,-0.195059,〜;;,
の部分が黒翼さんも怪しいとおっしゃっている 「TimedFloatKeys」テンプレートであり、
「時間」;「データ数」;「各データ」,〜;;
という順番で記述されています。「時間」は正の整数で、 「各データ」は浮動小数点数です。 通常、この「時間」の数値はDirectXのサンプルやToyStudioでは 1/3000 秒程度の単位で記述し、それをファイルの先頭付近で
AnimTicksPerSecond { 3000; }
のようにフレームレートとして記述します。これは省略されることもありますが、 DirectX SDKのMesh Viewerなどでは再生速度にきちんと反映されます。 1/3000秒程度を時間単位とするのは、一般的なCGソフトではデフォルトで1/30秒を 1フレームと換算する場合が多く、Xファイルの時間単位が正の整数 なので、1フレームをさらに1/100単位で細分化できれば時間 単位として充分な精度だと判断されるからです。
DarkBasicやその他のビューアーでは「AnimTicksPerSecond」テンプレートを 読み込まず、時間単位を1/30や1/60程度といった値でハードコーディング されているようです。 この方法が適当でないのは、ファイルのAnimTicksPerSecondを変更 することで再生速度を変えるといった操作ができないことと、一般的なCGソフト でのキーの単位は浮動小数点の場合が多く、 1/30程度の精度ではキーの値が四捨五入されてしまうことがあるからです。
ただし、 ToyStudioではこういった問題に対応する出力オプションをつければ済むので、 次のバージョンアップで対応したいと思います。試しに http://www.mechastudio.net/software/extension/ にある「jump-horizontal-takiguchi2.toy」をAnimTicksPerSecondを30として、 つまり時間単位を 1/30として出力してみました。 黒翼さんのDarkBasicビューアーでは、「アニメ速度=60」くらいにするとちょうど いい具合で動きます。
|