Hatena::ブログ(Diary)

yumesoftの日記

2010-03-03

Xファイルの甘い罠。巨大Xファイルの読み込みが超遅い

Xファイルは素晴らしいフォーマットです。

初心者が初めて触って理解するためという意味では。

大抵の中級〜上級者曰く。3Dフォーマットは自前フォーマットを用意しろ。

ゲームを作り終わった今、まったくもってその通りだと思います。

 

電装天使ヴァルフォースのモデルは、Xファイルで出来ています。

色々なツールが対応していること。

ヴァルフォースの制作が初3Dプログラムだったこと。

テキストフォーマットが読みやすかったこと。

これらが採用の理由です。

 

しかしいくつか弱点があります。

古いフォーマットゆえ、複数のテクスチャUVが設定できないのが最たるものでしょうか。

拡張可能フォーマットなので実際は作れるのですが、そんな特殊なXファイルを出力してくれるツールはまずありません。

 

そして一番の問題点は、読み込みが超遅いことです。

原因は拡張可能フォーマットであること。

1つ1つのデータの整合性などをきちんとチェックしているからでしょうか。異常に読み込みが遅いのです。

 

これが顕著になるのは、アニメーションデータを大量に持たせた場合です。

ヴァルフォースのキャラクターは100個程度のAnimationSetを持っていますが、ロード時間は10秒を超えてしまいました。

 

結局のところ、一度Xファイルとして作成したあと、アニメーションデータ部分だけ切り離して独自のバイナリデータとしました。

内容はID3DXAnimationControllerのアニメーションキー配列のダンプです。

ロード時、モデルのロードは通常通りに行い、ID3DXAnimationControllerは自前で生成。

ダンプデータをアニメーションキーとして登録します。

いっきに生成できるのでとても速く、10秒のロードが1.5秒程度に縮まりました。

 

(1)注意点としては、ID3DXAnimationControllerに登録されている四元数は反転されているということ。(仕様です)

(2)ID3DXKeyframedAnimationSetの最初もしくは最後のキーを編集した場合は、ID3DXKeyframedAnimationSetごと作り直さないと正しく反映されない。どころかメモリーが破壊されるバグがあること。

(3)静的リンク時代のD3DXは、10MB程度以上のサイズのXファイルを読み込むと高確率でメモリー破壊を起こすこと。

この3つです。

(2)は、ゲームならAnimationKeyはロード時に生成するだけでしょうから問題にならないと思います。

問題になったのはヴァルフォース用にアニメーションエディタを作った時です。えらい目にあいました。

(最初は自分の能力の無さを疑ったのですが、あれは完全にバグです。海外フォーラムでも同様の指摘が少しですがありました)

 

ソースについてはこちらからどうぞ。

http://yumesoft.net/program.html

 

余談ですが、黄昏フロンティア様の「ひぐらしデイブレイク」のロードが異様に遅いのは、Xファイルをそのまま使っているからだと思います。違ってたらごめんなさい。

ゆうたゆうた 2010/03/05 18:04 まるで同人ゲーム界のGame Programming Gemsだ!
素晴らしいです!応援してます!!

yumesoftyumesoft 2010/03/05 19:55 Game Programing Gemsは本当に良い本ですよね。
遠く及ばないまでも、皆さんに情報を提供していけたらと思います。応援ありがとうございます。
同人ゲームがもっと盛り上がりますように。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/yumesoft/20100303/1267628658