3Dモデル
-キーフレームアニメーション-
■キーフレーム
3Dモデルのアニメーションはキーフレームによって行われています。
キーフレームとは特定のデータが設定されているフレームのことです。
3Dモデルのキーフレームに使用されているデータは行列や拡縮率などです。
MPEGのキーフレームには画像データが設定されており、
データ毎に設定されているデータは異なります。
●補間
キーフレームアニメーションでは2つのキーフレームのデータを
補間することでデータの遷移を滑らかに見せています。
補間:
データとデータの間をデータを算出して補うこと
例:
フレームA(キーフレーム):
フレームの値 => 0
行列
0.5, 0, 0, 0,
0, 0.5, 0, 0,
0, 0, 0.5, 0,
0, 0, 0, 1,
フレームB(キーフレーム):
フレームの値 => 600
行列
1.5, 0, 0, 0,
0, 1.5, 0, 0,
0, 0, 1.5, 0,
0, 0, 0, 1,
フレームC(フレームAからBへ遷移中のフレーム):
フレーム値 => 300
上記の例はフレームAからフレームBの遷移とその結果のSSとなります。
フレームCのSSでモデルがAの拡縮率とBの拡縮率の中間辺りの
サイズになっているのが分かると思います。
■キーフレームアニメーション(XFile)
●事前準備
以下のリンクからXファイルのダウンロードをお願いします。
階層モデル(Xファイル)
●アニメーション速度の設定
まずは設定するアニメーションが1秒間で何フレーム進むのかを設定します。
設定は「AnimTicksPerSecond」で行い、Frameの{}の外に設定します。
・書式
書式例:
AnimTicksPerSecond {
1秒間に進むフレーム数;
}
具体例:
Frame フレーム名 {
}
AnimTicksPerSecond {
// 1秒間で60フレーム進む
60;
}
●アニメーションの設定
アニメーションの設定は「AnimationSet」で行います。
この設定もFrameの{}の外で行います。
・書式
書式例:
AnimationSet アニメーション名(全体) {
Animation アニメーション名(単体) {
{
①.フレーム名
}
AnimationKey {
②.キーフレーム情報の種類;
③.キーフレームの数;
④.キーフレーム情報
}
}
}
具体例:
AnimationSet AnimationTest {
Animation Translate {
{
FrameRing // ①.フレーム名
}
AnimationKey {
2; // ②.キーフレーム情報の種類
2; // ③.キーフレームの数
// ④.キーフレーム情報
0;3;0.00, 0.00, 0.00;;,
600;3;500, 0.00, 0.00;;,
}
}
}
①.フレーム名
アニメーションを適応するフレームの名前を指定します。
②.キーフレーム情報の種類
キーフレーム情報の種類を設定します。
0 => 回転
1 => 拡縮
2 => 移動
4 => 行列
③.キーフレームの数
アニメーションで使用するキーフレームの数を指定します。
④.キーフレーム情報
キーフレームの情報は最初の数値のみ共通ですが、
その後の情報は②の内容によって記述が異なります。
0 => 回転
フレーム値;4;Z, Y, X, W;
1 => 拡縮
フレーム値;3;X, Y, Z;
2 => 移動
フレーム値;3;X, Y, Z;
4 => 行列
フレーム値;16;4*4の行列;
※1.MSDNでは3が行列となっていますが、単位行列を設定しても
Viewerで表示することができなくなっているので、
仕様が変更されているのかもしれません。
情報があれば追記します。
完成品:
アニメーション付きXfile
●注意点
子フレームに対してアニメーションの設定を行った場合、
親の相対姿勢行列が無視されて動作するので注意して下さい。
ただ、基本グラフィックツールを使用してアニメーションの設定を行うので
気にしなくても問題ないと思います。