プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:Softimage Mod Tool
蒋欽
蒋欽
呉将。演義では周泰と共に湖賊の頭目として登場し、孫策帰順後は江東各地を転戦し戦功を重ねた。荊州の戦いでは水軍を率いたが、関羽討伐後の帰還途上で病死した。公の推挙に私怨を交えぬ実直な性格で、人々から称賛された。



◎前回のまとめ

ACLやSoftimage付属ライブラリを使用してスキンアニメを実装すると、同一モデルのインスタンスを複数作成した場合、個別に制御できないという問題があります。

原因は、同一モデルを複数回読み込む場合、モデルインスタンスが複製されないからです(詳細は前々回参照)。

そこで、前回はLoadメソッドをオーバーライドすることによりモデルインスタンスを複製し、個別制御を実現しました。但しこの手法はメモリを無駄に消費するという欠点があり、インスタンスを大量に作成する場合は不向きです。



◎その後の経緯

メモリ消費を抑えるには、モデルインスタンスの複製は行わず、必要な情報だけ複製する必要があります。必要な情報とはボーントランスフォームを指しますが、ボーントランスフォームがModelBoneクラスのメンバーである以上、ModelBoneクラスを複製する必要があると考えていました。

また、私はまだUpdate()の中身を把握しきれておらず、特にXSIAnimationChannelクラスのPlayBackが何をしているのか未だによくわかりません。ボーンだけコピーする手法を実装するには、まずこれを理解する必要があると思っていたのですが、Update()の解析には時間がかかりそうだったので、先に別のことをやるつもりでした。

しかし、yohさんやHOSSIEさんからコメントを頂いて、ボーンだけコピーする手法を手早く実装することができました。
yohさん、HOSSIEさん、どうもありがとうございました!



◎実装

私が今回実装した方法は、インスタンス毎にボーントランスフォームデータ退避領域を作成し、必要に応じて退避復元する、というものです。

1.ModelAssetに、ボーントランスフォーム退避領域を設ける
public Matrix[] BoneTransforms;

2.ModelAssetのLoadContent()の最後の方で、退避領域を初期化する
BoneTransforms = new Matrix[CrosswalkModel.Bones.Count];
CrosswalkModel.CopyBoneTransformsTo(BoneTransforms);


3.Update()の最初の方で、退避領域からデータを復元する
Models[i].CrosswalkModel.CopyBoneTransformsFrom(Models[i].BoneTransforms);

4.Update()の最後の方で、退避領域にデータを退避する
Models[i].CrosswalkModel.CopyBoneTransformsTo(Models[i].BoneTransforms);

5.DrawModel()の最初の方で、退避領域からデータを復元する
m.CopyBoneTransformsFrom(BoneTransforms);

細かいことを言うと、DrawModel()の引数を追加して、5の引数BoneTransformsを参照可能としましたが…まぁその辺はどうでもいいですね。



◎比較

前回のオーバーライド手法と比較すると、

・メモリは浪費しない

・描画速度は落ちる
 (3~5でコピーを3回実施しているため)

と言えそうです。

描画速度が気になるので、今後性能比較テストを実施し、無視できないレベルであれば、コピー回数の低減を図ります。



◎次回予告

実は、今回の手法だと「増やせば増やすほどアニメーションが速くなる」という問題が再発しました(汗)
(前回の手法では発生しません)

まずこの問題をクリアしてから、ライブラリ関連の記事をHPにまとめる予定です。できればサンプルプロジェクトも載せたいですね。

その後ACLへの適用テストと性能比較テストを行い、結果が悪ければ改善を図ります。

…やること沢山あるなぁw

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。