一番単純なNPCグループ編成

テーブルに登録されたNPCに自分から一番近いNPCを探してリンクを張らせた。
リンク数を1に限定すると、当然だけれど大体の場合は、いくつかの集団に分かれることになる。

この集団をなるべく保持しながら協調行動を取れないものか。もう少し改良してみる。

つらつら

同人レベルのゲームでも、3Dアクションが珍しいということもなくなり、MMDでハイクオリティなモーションが出回り、PCの平均スペックが上がりかなり無茶なエフェクトやメモリをバカ食いするような処理もちらほら。

グラフィクス的にはもう何をやっても当たり前の状態になってきた。というわけでここ最近は同人ゲームに簡単に組み込めるようなゲームAIフレームワークのことばっかり考えてる。

如何にFPSを落とさずにネットワーク構造の動的な構築ができるか入っていき色々と趣味で研究していきたい。

Z-fighting

DXライブラリ 3.01でアルファブレンドを含むモデルを描画させたら透明領域が真っ黒になってしまう。

これを解決するために色々と調べたがDirect3D系でもZバッファとアルファブレンドの関係は面倒くさいらしい。

解決方法はZバッファを有効にした状態でアルファブレンドを含むモデルを一番最後に描画する。


一応、Zバッファを無効にした状態で

int MV1SetMaterialDrawBlendMode( int MHandle, int MaterialIndex, int BlendMode ) ;

をBlendMode = DX_BLENDMODE_ADDと指定して実行しても前後関係の描画がおかしくなることはなかったが、当然テクスチャ模様の色は予想よりズレる。

バネモデル

C#で書かれていたバネモデルのサンプルをC++で書き直して描画させてみました。

グラフの自動レイアウトに挑戦 #1 ばねモデル
http://matarillo.com/layout/part1.php

描画するだけじゃなくて1つのノードをキーボードで操作可能に。動きが直線的じゃなくなってちょっと面白い。

バネ定数がハードコーディングになってるので、外部から動的に更新できるように変更予定。

NPCが協調しながら行動する問題

今関わっているゲーム制作でこんなことをやろうと考えています。
方針は
1) それぞれのNPCをノードとみなしてNPCのグループネットワークを作る。
2) ターゲットに一番近いNPCフォワード、それ以外のNPCをフォロワとみなす。
3) フォワードNPCから順番にバネモデルを使って動的に位置を求める。
4) みんなで攻める。
5) ターゲットまでの距離に応じてバネ係数を更新。ここらへんは実験してみないと分かりません。


こんな感じでちょっとウザったいNPCを目指して実装中です。
面白い結果が出れば、ゲーム以外の分野にも応用できる道を探します。