Simplestar Game

How do I create a 3D game ?
http://simplestar.syuriken.jp/
since 17/01/2009
  • BACK
  • HOME
  • NEXT
  • |

:::::::::::028話 Blender独自フォーマット出力A:::::::::::

どうも星姫です。
今回こそ興味深い話になるはずなので、ぜひ楽しんでいってください。

長らくお待たせしました。
ここのところ、シンプルスター先生は個人でサーバを立ち上げたり
ネットワーク周りの勉強をしていたりして、回り道をしていました。

以下の記事は Blender 2.49b のものなので、最新の Blender 2.55(2010/12現在)の情報は載ってません。
誰でも簡単に解析できるXML形式で Blender 2.55 からモデルデータを手に入れたい方はダウンロードへお越しください。
以下は、エクスポーターを作りたいと思う方の道しるべ程度の内容なので、特に読む必要はありません。

さて本題に入ります、Blenderのエクスポーターを触り、モデルデータを出力するのが今回のレッスンです。

まず本レッスンの概要を説明しましょう。

@既存のエクスポーターを調べる
A独自フォーマットを考える
B独自エクスポーターを作成する

この三つです。
では、@既存のエクスポーターを調べることから始めてみましょう。
エクスポーターがある場所は、ディフォルトならば以下の場所になっています↓
C:\Users\ユーザ名\AppData\Roaming\Blender Foundation\Blender\.blender\scripts

こちらはフォルダの中の様子です、.pyという拡張子のファイルがいっぱいありますね。
この中で、赤枠で示したDirectX用のエクスポーターを開いてみましょう。

読解していくと、最初の部分はユーザインタフェース(UI)の設定であることがわかります。
UIとはコレのことね↓

UIを縦長に作ると使いづらいと思ったので…

上記のように横長に変更してみました。
(pythonは良く知らないけど、時間をかけて読めば、誰でもUIの形を変更するくらい簡単です!)

さて、基本どんなエクスポーターにも「シーンの解析」という一文が書かれます。
探してみると以下の文が見つかりました。↓


シーンからオブジェクトリストを取り出しているようです。
もう少し読み進めていくと、メッシュの出力を行っている部分


を発見できます。
…と、こんな感じで解析を続けていき、ある重大なことに気付きました。
なんと、マルチテクスチャのUV座標情報はエクスポーターからは取り出せないらしいのです。
もっと調べれば、解決策があるのかもしれませんが…なんだか面倒なので諦めました。
その代わり、自分でテクスチャ設定を行えるツールを用意しましょう。(いやいや、そっちも面倒だろうと…)

さてさて、エクスポーターの解析の次はA独自フォーマットを考える番です。
形式はXMLに決めているのですが、何故XML形式が良いか説明しましょう。
それは…次のサイトで説明されている通りです(雑で申し訳ない!)

「@IT:XMLの基礎を理解しよう〜これだけ知っていれば大丈夫〜」

XML形式に利点を感じるのは、C#アプリにおいてXmlElementクラスを使って要素に簡単にアクセスできるからです。
ということでXML形式でいきましょう。

以下がSimplestarが独自で考え出した、Blenderからの中間モデルデータフォーマットです。
もっと下の方でデータを確認する方法があるので、こちらは参考程度にどうぞ。

中間!?と聞いて驚く方もいると思いますが、とりあえずBlenderからデータを全部出してしまいます。
必要に応じてゲームに必要なモデルデータをこのファイルから作成するのです
実際に使用するデータを得るにはコンバーター(データ変換器)が必要になりますが、それは次回にやりましょう。

Simplestar中間モデルデータフォーマット

<?xml version='1.0' encoding='UTF-8' standalone='no' ?>
<!-- Rootの中に全てを記述します 属性codeは必ずSimpleStarにします エクスポーターのバージョン -->
<Root code = "SimpleStar" version = "1.0">
<!-- Root 行列は全ての対象に掛ける変換行列です -->
<Matrix name = "Root">
</Matrix>
<!-- オブジェクトリスト オブジェクト数 -->
<ObjectList num = "1">
<!-- オブジェクト オブジェクト名 オブジェクトタイプ -->
<Object name = "Pylamid" type = "MESH">
<!-- オブジェクト変換行列 オブジェクト名 -->
<Matrix name = "Pylamid">
</Matrix>
<!-- オブジェクメッシュ オブジェクト名 -->
<Mesh name = "Pylamid">
<!-- 頂点リスト 頂点数 -->
<Vertices num = "12">
</Vertices>
<!-- インデックスリスト 面の数 プリミティブトポロジ -->
<Indices num = "4" type = "TRIANGLE_LIST">
</Indices>
</Mesh>
<!-- 頂点法線リスト 頂点数 オブジェクト名 -->
<MeshNormals num = "12" name = "Pylamid">
</MeshNormals>
<!-- 面のマテリアルインデックスリスト 面の数 -->
<FacesMaterialIndices num = "4">
</FacesMaterialIndices>
<!-- マテリアルリスト マテリアル数 オブジェクト名 -->
<MaterialList num = "4" name = "Pylamid">
<!-- マテリアル マテリアル名 マテリアルインデックス -->
<Material name = "Red" index = "0">
<!-- 拡散反射光 -->
<Diffuse></Diffuse>
<!-- 不透明度 -->
<Alpha></Alpha>
<!-- 鏡面反射度 -->
<Specular></Specular>
<!-- 鏡面反射光 -->
<SpecularColor></SpecularColor>
<!-- 自己発光 -->
<Emissive></Emissive>
<!-- 環境光 -->
<Ambient></Ambient>
<!-- テクスチャマップリスト テクスチャマップ数 -->
<TextureMapList num = "1">
<!-- テクスチャ テクスチャファイル名 テクスチャタイプ -->
<Texture name = "023hot.jpg" tyep = "IMAGE">
<!-- テクスチャ色 -->
<Color></Color>
<!-- 輝度 -->
<Bright></Bright>
<!-- コントラスト -->
<Contrast></Contrast>
</Texture>
</TextureMapList>
</Material>
</MaterialList>
<!-- スキン情報 ボーン数-->
<SkinInfo num = "4">
<!-- スキンメッシュ情報 ボーン名 -->
<SkinMesh name = "Bone3">
<!-- スキン頂点リスト スキン頂点数 -->
<Indices num = "36"></Indices>
<!-- スキン影響度 スキン頂点数 -->
<Weights num = "36"></Weights>
<!-- ボーンのオフセット行列 ボーン名 -->
<Matrix name = "Bone3">
</Matrix>
</SkinMesh>
</SkinInfo>
</Object>
<!-- アニメーション情報 -->
<AnimationInfo>
<!-- アニメーション キーフレーム数 オブジェクト名(ボーン名) -->
<Animation num = "2" name = "Bone3">
<!-- 姿勢行列 キーフレームの値 -->
<Matrix frame = "1">
</Matrix>
</Animation>
</AnimationInfo>
</ObjectList>
</Root>

さてさて、フォーマットが決まったらエクスポーターを作ってみましょう!
ということで、上記のフォーマットを出力できるエクスポーターを作ってみました。
コードを読解して、必要な部分を修正しただけなので制作過程はパスします。

「SimpleStarExporter.zip」

使い方は先ほど紹介した、.pyファイルがいっぱい入っているscriptsフォルダの中に、SimpleStarExporter.pyファイルを置きます。
その後Blenderを再起動すると、File→Exportで次の

SimpleStar (.xml)の項目が現れます。 これを選択して、XMLファイルを出力してください。

XMLファイルを確認するには、「XML Notepad」を使います。

「XML Notepad」

使い方については以下のサイトを参照

「XML Notepad 2007 について」

こんな感じで、モデルデータを確認することができます。
これを見てフォーマットを確認した方が確実で、分かりやすいですね。
上の方で、定義した文書は参考程度に留めておいてください。

実際に使用するデータを出力するコンバータの作成と、モデルデータの確認は次回にやりましょう。
それでは次回をお楽しみに!

2010/08/13 初記。
2010/08/22 追加。
2010/09/05 追加。
2010/09/23 修正。

:::::::::::028話 Blender独自フォーマット出力A:::::::::::

  • BACK
  • HOME
  • NEXT
ホームページ制作 フリー素材 無料WEB素材
Copyright (C) Simplestar All Rights Reserved.