TOYSTUDIO SDK
1.6.1.3
|
TOYSTUDIOでは、フレーム(フィルムにおける1コマ)単位で時間を管理します。 実際にデータのセットされたフレームをキー フレームと言い、 データのセットされていないフレームについては、 キー フレームのデータをスプライン曲線などで補間して算出されます。
アニメーション再生スピード(1秒当たりのフレーム数)をフレーム レートと言い、 CTaAnim::GetFps() で取得、 CTaAnim::SetFps() でセットします。
アニメーション(CTaAnim)は、 アニメーションを行うデータごとにアニメーション アイテム(CTaAnimItem)を持ちます。 アニメーション アイテムはキー フレームのリストを保持しており、 データのスプライン補間などを行います。
アニメーション アイテムは、 CTaAnim::GetObjectItem() で取得、 CTaAnim::CreateObjectItem() で追加します。
アニメーション アイテム(CTaAnimItem)のキー フレームは、 CTaAnimItem::InsertKeyFrame() で追加します。 キー フレームの追加の際にはスプライン曲線を更新する必要があり、 一つのキー フレームを追加する場合はこの関数のbUpdateSpline引数をTRUEにして実行します。
また、複数のキー フレームを追加する場合は、
のように、 CTaAnimItem::InsertKeyFrame() のbUpdateSpline引数をFALSEにして複数回実行し、 最後に CTaAnimItem::UpdateSpline() でスプライン曲線を更新するのが効率的です。
プラグインのエクスポート機能を作成する場合、 ファイル出力処理の内部において、 指定フレームについてのアニメーションを実行することが必要な場合があります。 例えば、 サンプル プロジェクトのSamplePluginの「.txt2」ファイルの出力処理においては、 アニメーションのフレーム番号でループさせながらオブジェクト(CTaObject)の変換行列を出力しています。 このような場合、以下のように処理を行います。
アニメーション バリュー(CTaAnimValues)を作成し、 CTaAnimValues::StoreObjectValues() でオブジェクトの現在のデータを保持しておきます。
CTaAnim::AnimateObjectItems() で指定フレームについてのオブジェクトのアニメーションを実行します。
この時点でオブジェクトに関するアニメーション データは更新されているので、 CTaObject::GetTransform() でオブジェクトのローカル変換行列を取得したりなどできます。
オブジェクトのデータの取得が終わったら、 CTaAnimValues::Restore() でオブジェクトのデータを復元し、 最後にアニメーション バリュー(CTaAnimValues)を削除します。
IKハンドルのような制約(コンストレイント)用のオブジェクトは、 ソフトウェアによって仕様が異なります。 よってファイル出力処理などにおいては、 IKハンドル自体にセットされた姿勢アニメーションを、 IKハンドルが参照しているオブジェクトの姿勢アニメーションに変換する必要が出てきます。 サンプル プロジェクトのSamplePluginでは、 この変換処理を利用してファイル出力を行っています。
まず、複製用のアニメーション(CTaAnim)を作成し、 これを引数にして CTaAnim::GetConstrainedObjectItems() を実行します。 この関数は、IKハンドル自体にアニメーションがセットされている場合、 IKハンドルが参照しているオブジェクトのアニメーションに変換してコピーします。
複製したアニメーションを用いてデータの出力などを行います。
使用が終わったら、複製したアニメーションを削除します。