アニメーションコントローラのトラックスピード

3Dゲームの素材をどうやって作ろうかという問題は、メタセコイアでモデルを作ってRokDeBone2でボーンとアニメーションを入れ込むという方法でとりあえずできそうです。

それで作ったXファイルを読み込んでアニメーションさせるときに、スピードがどうなるのかという話。
まるぺけつくろーでは、「ID3DXAnimationControllerに読み込まれるアニメーションセットは4800フレームを1秒とするようです」と書いてあるが、どうも自分の環境では違うように見える。
とりあえず前提として、ゲームは60FPSで、毎フレームにアニメーションコントローラのAdvanceTime()で1/60ずつ進めるものとする。
ここで問題は、

pAnimationController->SetTrackSpeed( speed );

のspeedにいくつを与えるのかということ。
まるぺけ説なら、60フレームのアニメーションを1秒で終わらせるには60/4800を与えることになる。
それで上のRokDeBone2で60フレームのアニメーションを作ると、60/4800では明らかに遅すぎて、デフォルトの1.0でちょうどよかった。となると、「60フレームで1秒」が正しいということになる。しかしこれはマルペケ説が間違っているというわけではなくて、なんかどこかで条件が違っている気がしてなんとも。

自分の環境ではID3DXAnimationSet::GetPeriod()で「60FPSとした場合のアニメーションの時間」が得られるようだ。
まるぺけ説では4800FPSとした場合の時間が得られるので、このFPSの数値がなんらかの条件(バージョンとか設定)によって異なっていると考えた方がよさそう。

ともかく、自分の環境では60FPSならツール上でもそのまま60FPSでアニメーションを作って、トラックスピードは1.0にしておけば作ったまんまが再生されるっぽい。わかりやすい。

ちなみに、RokDeBone2で60フレームのループアニメーション(0フレームと59フレームが同じ姿勢)を作るとGetPeriod()は0.98333(=59/60)という値を返す。おそらく最終フレームが初期姿勢と同じなので削られて59フレームとして読まれるため?そこで61フレーム(0フレームと60フレームが同じ姿勢)にしてみると綺麗に1.0になる。