2011年11月12日土曜日

GTAIVのモデルフォーマットをGTAViewerで読み込んでみた【テストプログラミング】

最近GTA4にMOD導入したものをよく見ようになったのでちょいとやってみました。今回読み込んだものは以下のモデル。

メタルギアシリーズの「スネーク」です。コチラのサイトで紹介されてます。

調べてみたところ、GTA4ではメッシュモデルにdffフォーマットを採用してないようで、新たに「wdr」、「wdd」、「wtd」、「wad」、「wft」等の新たなフォーマットが採用されてるようです。

.wdr・・・武器モデル、人体モデルの部品(顔等) 前作までのdffフォーマットに該当
.wdd・・・pedデータ 前作までのdffフォーマットに該当
.wtd・・・テクスチャデータ 前作までのtxdフォーマットに該当
.wad・・・アニメーションデータ 前作までのifpフォーマットに該当
.wft・・・車データ
※間違ってるかもしれません

今回はフォーマット仕様が公開されてたwdrフォーマットを読み込んでみました。

頂点バッファ・インデックスバッファさえあれば取り合えず形にはなるのでその二つだけ読み込んで描画してみました。結果はコチラ↓

とりあえずうまくいきました。フォーマット公開サイト以外にも「WDR Analyze」というアプリケーションも参考にしています。フォルダ内に.jarファイルがあったので、解凍してclassファイルを逆コンパイルしてソースコードを引っ張り出してきました。おかげで作業がはかどりました(ただこのアプリケーション、不具合があります)。

幾つかのモデルで試してみましたが、読み込みに失敗するモデルもあるようです。まだまだ改良が必要なようです。

ちなみに「WDR Viewer」という既存のツールがあるようです。コチラは特に不具合はないようです。

次はマテリアル、テクスチャも読み込むつもりです。が、wtdフォーマットに関しては無理そうです。まだ仕様が公開されてないフォーマットが幾つかあり、wtdフォーマットはその一つです。ZLib形式で圧縮してるらしく、前半部分の記述がwdrフォーマットと同様なのはわかってるんですけどね。

未知のバイナリフォーマットを解読するスキルが備わってればよかったんですけど・・・私にはそんなスキル備わってません。

まぁ今は他にやることがあるので実装はもう少し先になりそうです。

4 件のコメント:

  1. 初めまして、とても良いツールを開発してくださって、本当にありがたいです。

    質問があるのですが、Blender2.6対応MikuMikuDanceインポーターを使わせてもらおうとしたところ、エラーが出てしまいました。

    一度だけ成功したにも関わらず現在はエラーが出てしまっているということもあり、原因がよくわかりません。

    環境はwindows7 64bit、blender2.60aです。


    以下にログ?を張り付けておきます。

    Traceback (most recent call last):
    File "C:\Program Files\Blender Foundation\Blender\2.60\scripts\addons\pmd_script_260\import_pmd.py", line 723, in execute
    loadPMD( OptionConfig(context, self.filepath, self.ImportScale, self.ImportAxis, self.ImportSmooth, self.ImportRemoveDoubles) )
    File "C:\Program Files\Blender Foundation\Blender\2.60\scripts\addons\pmd_script_260\import_pmd.py", line 493, in loadPMD
    bpy.ops.object.mode_set(mode="EDIT")
    File "C:\Program Files\Blender Foundation\Blender\2.60\scripts\modules\bpy\ops.py", line 180, in __call__
    ret = op_call(self.idname_py(), None, kw)
    RuntimeError: Operator bpy.ops.object.mode_set.poll() failed, context is incorrect

    location::-1

    おひまな時にでも回答いただけると、嬉しいです。

    返信削除
  2. >>kouさん

    はじめまして。ご報告ありがとうございます。

    確認したところ、シーン上にオブジェクトが存在しない時にpmdを読み込むとログにあるエラーが生じるようです。

    バグフィックス版をアップロードしたのでお手数ですが更新のほうをよろしくお願いします。

    また何かありましたら報告していただけると大変助かります。ご報告ありがとうございました。

    返信削除
  3. 更新されたファイルに入れ替えたところ、インポートのところに.pmdが出てこなくなりました。

    試しに前のファイルに戻してみると、きちんと出てきます。

    たびたびすみませんが、よろしくお願いします。

    返信削除
  4. >>kouさん
    すみません。アップロードしなおしました。再度更新をお願いいたします。

    もしうまくいかない場合、以下の設定と異なってないか確かめてみて下さい。
    ・Blenderが日本語化されてない
    ・スクリプトファイルの文字コードがUTF-8じゃない

    返信削除

注: コメントを投稿できるのは、このブログのメンバーだけです。