2009/12/30

Blender - シーンの自動生成

シーンを自動生成したい

SIO2 を使った iPhone ゲームに表示させるための街並みシーンを作ろうとしています。手動で作るのは大変だと思ったので、最小限の情報から規則的に生成することを考えています。


Open City Engine

まず試したのはOpen City Engineというツールです。これはかなり強力なツールで、車線の数、ビルの種類(住居用/商業用/...)、ビルの分布などを指定して、信号機や歩道を含む街のシーンを生成することができます。

で、こっちを採用する路線で行ってたんですが、SIO2 + iPhone 環境にフィットさせるために今後いろいろ必要になるであろうカスタマイズ性を考えると、Open City Engine 内部を思い通りにいじくるのは大変そうだと思ったので、自分で作ってみることにしました。


オレオレエンジン(0.01)

道路を表すグラフから、道路メッシュや信号機、フェンス、横断歩道などを生成します(予定では)。今できてるのは、ラフな道路メッシュの生成と、道に沿って猿を設置する機能です。

道路を表すグラフ(黄色くハイライトされてるやつ。8頂点, 8エッジ)
roads generation


生成されたシーン
roads_generation


TODO


  • 道路同士をシームレスに繋げる

  • 何をどこに設置するかを決めるアルゴリズム

  • 設置する信号機、横断歩道、街路樹、フェンス、標識などの手配(作るor見つけてくる)

  • 設置するオブジェクトに応じた物理パラメータの設定

  • シーンの部分描画(未検討)への対応


などなど。


ちなみに

以前にも似たようなことを途中までしていまして、そのときは Metasequoia で作ったシンプルグラフ(.mqo)を C# で parse、道路メッシュを生成、それを別の .mqo に出力、それを Metasequoia で開いて DirectX(.x) 形式に手動でエクスポートというワークフローでした。

Blender + python 構成だと、内部データを直接いじれるので面倒な parse をしなくてよい、Blender のいろんな機能がスクリプトから使えるなど、良いことばかりです。(今は Metasequoia でもできるのかもしれませんが。)

ビデオ編集の話といい、いろんなメディアが Blender, Python というフリーなツールを介して繋がっていく感じが大変良いです。

2009/12/28

iPhone tips - 複数台の Mac で実機転送する時の注意

メッセージ "A signed resource has been added, modified, or deleted." が出て実機転送できない

当方では Dropbox でソースを2台の Mac で共有して開発していますが、Mac A で実機動作させた後に Mac B で実機動作させようとしたところ、メッセージ "A signed resource has been added, modified, or deleted." が出て、実機にインストールできないという現象がおきました。

いろいろ検索したところ、
XCode Issue: 'A Signed resource has been added, modified or deleted.'にある通り、「ビルド→すべてのターゲットをクリーニング」をしたらうまく実機転送ができるようになりました。めでたしめでたし。

2009/12/07

SIO2 - tips

SIO2 を使って iPhone プログラムを開発する時の豆知識がいくつか溜まってきたので書きます。



Bounds はできるだけ box にする
Blender の Logic panel では物体の物理シミュレーション関連の設定ができます。物理シミュレータからみた物体の形状(Bounds) を Triangle Mesh や Convex Hull にすると、よりポリゴンの形に即したシミュレートができますが、その代わり必要な計算が増えて遅くなります。

例えば、簡単な坂を作りたい時は、直方体を傾けたメッシュを作って Bounds: Triangle Mesh にする代わりに、Axis-aligned な直方体メッシュを作って Bounds: Box にし、オブジェクトを傾けると良いです。



「ディスティネーショングループのフォルダに項目をコピーする」のチェックを外す
Xcode で Blender からエクスポートした sio2 ファイル(例えば Scene.sio2)をプロジェクトに追加する際、上記チェックボックスをオフにします。オンにすると、今ある Scene.sio2 がプロジェクトと同じフォルダにコピーされ、以降それが参照されてしまうため、オリジナルの Scene.sio2 への更新が反映されなくなってしまいます。
ハマリ1時間くらい。



library not found for -lstdc++-static が出る場合
SDK 3.1.2 にしたら出ました。以下の対策でビルドが通りました。

(1) Set the C++ Standard Library Type to Dynamic
(2) Add this in the C/C++ Compiler Flags: -fno-regmove -Wno-write-strings -falign-loops=16 -fvisibility=default

ビルドの件に関してはこのスレッドを参考にしました。