3.ボーンアニメーションの実装とオリジナルフォーマットへの書き出し
今回はBlenderで作ったモデルにアニメーションをつけてModelViewerで動かせるようにします。
Blenderで作成したCollada(.dae)ファイルは1つしかアニメーションを付けられないようなのでモデルとアニメーションをそれぞれ別ファイルとして分割し、オリジナルフォーマットで管理するようにします。
とりあえず前回作ったココのBlenderのモデルにボーンを実装しました。
Blenderで作成したCollada(.dae)ファイルは1つしかアニメーションを付けられないようなのでモデルとアニメーションをそれぞれ別ファイルとして分割し、オリジナルフォーマットで管理するようにします。
とりあえず前回作ったココのBlenderのモデルにボーンを実装しました。
3つのアニメーションを付けました。
次に、それぞれのアニメーションを設定したColladaファイルを3つ作ります。Blenderでアニメーションを設定し、Export→Colladaで.daeファイルが作成できます。エクスポートの際にサンプリングレートは3~5(適当)に指定するとよいと思います。
それぞれ、coco1.43a.dae、coco1.43b.dae、coco1.43c.daeというファイル名にしました。Blenderのオリジナルファイルおよび書き出したCollada(.dae)ファイルは以下からダウンロードできます。
coco1.43 Blender2.8 file zip | 2020/06/09 | download |
coco1.43 Collada file zip | 2020/06/09 | download |
さて・・メインのCha3DCoreLib(茶エンジン)ですが、今回はボーンアニメーションを実装したのでかなりコードが加わっています。ゲーム制作に興味のある方で、エンジンの仕組みを勉強したいとかUnityやUnrealに頼らず全部自作でやるぜ!という奇特な方は参考にしてみてください。
Cha3DCoreLib1.8 zip [windows] | 2020/06/09 | download |
Cha3DCoreLib1.8 Source zip [windows] | 2020/06/09 | download |
茶エンジンでは今後オリジナルフォーマットとして、モデル(.mdl)ファイルとアニメーション(.ani)ファイルを使用します。Collada(.dae)ファイルからモデルのみ取り出してmdlファイルとして保存し、同じモデルの別のアニメーションを設定したColladaファイルからそれぞれ別のaniファイルを書き出し、1つのmdlファイルに複数のaniファイルが適用できるようにします。
現在のエンジンのAPIは以下のようになります。色の違う部分が今回追加(修正)したAPIです。
Cha3DCoreLib API一覧 (class CChaDataObject ) | ||
CChaDataObject() | - | 3Dデータ格納用オブジェクトを作成します。 |
bool LoadDAE( wchar_t *path, wchar_t *ext) | path: ロードするcolladaファイルのパスを指定します。 ext: ファイル拡張子を指定します。通常はL".dae"で良いと思います。 | Colladaファイルをロードします。 |
bool LoadModel( wchar_t *path ) | path: ロードするmdlファイルのパスを指定します。 | mdlファイルをロードします。 |
bool LoadAnimation( wchar_t *path ) | path: ロードするaniファイルのパスを指定します。 | .aniファイルをロードします。mdlファイルを先にロードしておかないと失敗します。 |
bool WriteModel( wchar_t *model_id, wchar_t *path ) | model_id:モデルを識別するためのIDを指定します。名前は適当に決めてください。 path: 書き出すmdlファイルのパスを指定します。 | 現在のモデルをmdlファイルに書き出します。 |
bool WriteAnimation( wchar_t *target_model_id, wchar_t *animation_id, wchar_t *path ) | target_model_id:モデルを識別するためのIDを指定します。WriteModelで指定したmodel_idを指定してください。 animation_id:アニメーションのIDを指定します。適当に決めてください。 path: 書き出すaniファイルのパスを指定します。 | ロードしたCollada(.dae)ファイルのアニメーションをaniファイルに書き出します。 |
Cha3DCoreLib API一覧 (class CChaResourceObject ) | ||
CChaResourceObject() | - | 3D表示用のリソースオブジェクトを作成します。 |
bool CreateResource( ID3D11Device m_pDevice, CChaDataObject *object ) | m_pDevice: DirectX11デバイスを指定します。デバイスの作成方法が分からない人はModelViewerのソースを参考にしてください。 object: LoadDAE, LoadModelでデータをロードしたCChaDataObjectを指定してください。 | CChaDataObjectから画面に表示するための3Dリソースオブジェクトを作成します。 |
bool Draw( ID3D11DeviceContext m_pDeviceContext ) | m_pDeviceContext: DirectX11デバイスコンテクストを指定します。デバイスの作成方法が分からない人はModelViewerのソースを参考にしてください。 | モデルを描画します。 |
bool CopyAnimation( CChaDataObject *object ) | object: CChaDataObjectを指定します。 | objectに設定されたアニメーションを一括して読み込みます。 |
bool CopyAnimation( CChaDataObject *object, int num ) | object: CChaDataObjectを指定します。 num: アニメーション要素の番号を指定します。 | objectの指定した要素番号のアニメーションを読み込みます。 |
bool SetCurrentAnimation( int num ) | num: アニメーション要素の番号を指定します。 | 指定した要素番号のアニメーションに切り替えます。 |
次に、実際に動くアプリとしてModelViewerの使い方を説明します。アプリを起動するとデフォルトのココが表示されると思います。これはデフォルトでcoco1.43a.daeファイルを読み込んでいます。
オリジナルフォーマットのmdlファイルおよびaniファイルの作り方は次のようにします。
まず”モデルを読み込む”ボタンで.daeファイルを読み込んでください。今回はサンプルとしてcoco1.43a.daeファイルを読み込みます。colladaファイルにはアニメーションを1つ指定できるので動くファイルもあるかと思います。次に”モデル書き出し”ボタンを押すとmdlファイルが書き出されます。
書き出されたmdlファイルをテキストエディタで開いてみてください。開いたファイル名でMODEL_IDの名前が書き込まれていると思います。coco1.43a.daeファイルを読み込んだ場合coco1.43aと書き込まれていると思います。このIDを一意のID名に書き換えます。とりあえずサンプルではcoco1.43にしました。このMODEL_IDを覚えておいてください。
次に”アニメーション書き出し”ボタンを押すとaniファイルを書き出します。作成されたaniファイルのTARGET_MODEL_IDを確認してください。このIDは現在のモデルのMODEL_IDが記入されます。サンプルではcoco1.43aとなっていると思います。これを先ほど決めたMODEL_IDであるcoco1.43に書き換えます。
新しいaniファイルを作成するためにcoco1.43b.dae、coco1.43c.daeファイルを読み込んでaniファイルを書き出してください。作成されたファイルを開くとTARGET_MODEL_IDがそれぞれcoco1.43b、coco1.43cになっていると思います。このTARGET_MODEL_IDを先ほど決めたcoco1.43で統一します。aniファイルはTARGET_MODEL_IDがモデルのMODEL_IDと一致しないと反映されません。
問題なければ以下のように1つのmdlファイルを使って複数のアニメーションを切り替えられると思います。
以下、今回のModelViewer1.5の実行ファイルおよびソースです。
MovelViewer1.5(exe) zip [windows] | 2020/06/09 | download |
ModelViewer1.5 Source zip [windows] | 2020/06/09 | download |
MovelViewer1.51(exe) zip [windows](バグ修正版) | 2020/07/22 | download |
ModelViewer1.51 Source zip [windows](バグ修正版) | 2020/07/22 | download |
© 2018 Chafumi Touji