Document

卒論進捗発表(2)
10/29
31031 山崎孝裕
今日の内容
 ゲームデザイン
 Phoenixモデル
 ネットワークモデル
 今後の予定
ゲームデザイン
 全体像
 オブジェクトの性質
 具体デザイン
全体像
 エリア型MMOG



エリアの大きさと数は固定
今回はInterest Managementは考えない
エリア間移動(zoning)以外のエリア間の相互作用は考
えない
 Phoenix上に構築

データの性質によっては生TCP/UDPで送ることも検討
 ゲームデザインはSimMud[1]を参考
オブジェクトの性質
 オブジェクトの分類法


状態の変化の有無
能動行動の有無


自分と周囲のオブジェクトの状態を入力とする能動
行動
能動行動の主体
人(クライアント)
 コンピュータ

状態変化の有無
 状態変化のないオブジェクト


状態を管理する必要が無い
→クライアントに静的に持たせられる
ex. 地形など
 状態変化のあるオブジェクト

誰かが状態を管理し、Consistency/Persistency
を保つ必要
能動行動の有無
 能動行動をしないオブジェクト



周りのオブジェクトの状態を知る必要が無い
自らのステートさえ持っていればよい
ex. 食料・扉など
 能動行動をするオブジェクト

能動行動のために、周りのオブジェクトの状態
を知る必要がある
能動行動の主体(1)
 コンピュータ


入力に対して能動行動を決定する
ノンプレイヤーキャラクタ(NPC)
能動行動の主体(2)
 人(クライアント)




周りの状態をクライアントが人に提示
人がそれに対する行動を決定
プレイヤーキャラクタ(PC)
オブジェクトの行動を計算する物理ノードが特
定されている
→他の分散/並列システムとの最大の違い
具体デザイン(1)
 ゲーム世界をN×Nのエリアに分割
 エリア


正方形の格子状空間
各エリアは互いに独立した空間


固定的なInterest Management
エリア端にPCがくると、隣のエリアへ移動
具体デザイン(2)
 オブジェクト

地形


食料



状態を持たない
主体行動をしない
位置を状態として持つ
PC/NPC


位置とエネルギーを状態として持つ
自ら移動し、他のオブジェクトと相互作用をする
具体デザイン(3)
 相互作用

PC/NPC ↔ 食料
PC/NPCが食料を食べる
 食料は消滅
 PC/NPCのエネルギーが増加


PC/NPC ↔ PC/NPC
互いが戦う
 双方のエネルギーが減少

Phoenix[2]
 メッセージパシングのモデル/API
 ノードの動的な参加/脱退
 仮想ノード空間による抽象化
 故障感知機構も実装[3]

タイムアウトによる
Phoenixモデル
 仮想ノード名


[0, L)の整数
メッセージの送り先を指定
 仮想ノードと物理ノード(プロセス)を対応

仮想ノードの数は物理的なノードより大きい
 物理ノードへのルーティングを自動化
Phoenix API
 メッセージの送受信


ph_send(vp, msg)
ph_recv(tag)
 仮想ノードの割り当て


ph_assume(vps): 仮想ノードの取得
ph_release(vps): 仮想ノードの開放
 故障検知

ph_get_broken_vps(vps)
ネットワークモデル
 仮想空間のマッピング
 エリアサーバの多重化
 通信データ
 重複エリアモデル
仮想空間のマッピング
 エリア単位の管理


1エリア:1仮想ノード:1物理ノード→エリアサーバ
そのエリアに属するオブジェクトをすべて管理






オブジェクトデータの管理
オブジェクトの生成
NPCの行動決定
PCの操作ノードとの通信
隣エリアとの通信
etc…
エリアサーバの多重化
 エリアサーバにレプリカを作成


レプリカも1仮想ノード
エリアサーバ故障時は
ひとつのレプリカがエリアサーバとなる
 新たなレプリカを作成する


効率的で信頼性のあるレプリカ作成が必要
通信データ
 PCクライアントとエリアサーバとの通信


レイテンシが重要
信頼性の必要なデータ
 PCのエリア移動の際のエリアサーバ間通信

エリア間の唯一の相互作用
 PCクライアント間の通信

信頼性の低くてもよいデータ

ex. 移動データ etc…
重複エリアモデル
 1つのエリアを複数のノードがオーバラップ
して管理



エリア境界をまたがって管理するノードが存在
→擬似ノンエリア型も構築可能
モデル自体が多重化を含む
ゲーム空間が単純な2次元ならオーバラップが
簡単だが、そうでないと、オーバラップの仕方が
難しいかも
今後の予定
 二つの方針

Fault Toleranceの向上


効率的で信頼性のある多重化 etc…
Scalabilityの向上

重複エリアモデル etc…
 たぶん今回両方やるのは無理
 どっちに力を入れるか悩み中
 次回は実装の進捗報告をできるように・・・
参考文献
 [1] B. Knutsson, H. Lu, W. Xu, B. Hopkins. Peerto-Peer Support for Massively Multiplayer Games
 [2] K. Taura, T. Endo, K. Kaneda, A. Yonezawa.
Phoenix: a Parallel Programming Model for
Accommodating Dynamically Joining/Leaving
Resources
 [3] 堀田勇樹, 田浦健次郎, 近山隆. Phoenixプログ
ラミングモデルにおける故障検知ライブラリ