2008年05月20日

takushima関心領域フィルタ(Area of Interest Filter)の日本語訳

こんにちは。今回も前回に引き続き、英文記事Area of Interest Filterの日本語訳です。

今日は関心領域フィルタ(Area of Interest Filter)を使って、サーバとクライアントで送受信されるネットワークパケットを減らすための実装を説明します。

課題

複数のクライアントがひとつの世界を共有しているとき、パケット数は普通、指数関数的に増加します。これはブロードキャストのコストが高いためです。例えば世界を走り回っているボブというプレイヤーがいたとします。ボブは毎秒5パケットの割合で彼の位置をサーバに送信します。仮にもうひとり、プレイヤーのジムがいたとしましょう。ジムも同じように毎秒5パケット送信します。これで1秒のうちにサーバはボブから5パケット、ジムから5パケットを受け取りま す。ということはつまり合計10パケットがサーバに届きます。サーバはボブのパケットをボブに送り返すと共に、ジムにも送ります。ジムのパケットにも同様のことをします。これで合計で20パケットがサーバから送り出され、クライアントはそれぞれ10パケットを受け取ります。

今、さらにもうひとりプレイヤー、シンディを加えてみましょう。彼女も毎秒5パケットをサーバに送信します。ボブ、ジムそしてシンディはみんな合わせて 15パケットをサーバに送ります。それぞれのプレイヤーごとに、サーバはパケットをエコーバックし、他のプレイヤーにパケットをブロードキャストします。それは合計で45パケット、クライアントごとには15パケットになります。このようにサーバが送るパケット数はプレイヤーの2乗に毎秒のパケット数をかけたものに等しくなります。もし3人でなく200人いたなら毎秒200,000パケット(200^2 * 5)をサーバは扱う必要があります。クライアントは毎秒1000パケットです。

関心領域フィルタはクライアントが知る必要がないことをフィルタリングすることで、必要なパケットの量を減らすのに用いられます。例えば敵がプレイヤーから100km離れているならば、彼らは互いを見ることはなく、相互作用することもないので、最新情報を送る必要はありません。

用語集

関心領域フィルタにはフォーカスとニンバスを使っているものがあります。

  • フォーカス/ニンバス:フォーカスは観察する側のエンティティの関心を表しています。ニンバスは観察される側のエンティティの見て欲しいものを表します。(Benford et al. 1994; Greenhalgh1998)
  • 出版者:データを送り出すエンティティ。
  • 購読者:データを受け取るエンティティ。

視覚的には、ニンバスはエンティティの境界領域に、フォーカスはエンティティの視野になると思われます。

大まかな相互作用はこのようになります。

  1. エンティティBのニンバスがエンティティAのフォーカスに入ります。
  2. もしBが出版者でAがその出版者に興味があれば購読を始めます。
  3. エンティティAはBの購読者になります。
  4. 出版者Bは購読者Aにデータを送ります。

デモ

こうした考えを示すために下記のサンプルフラッシュアプリケーションを作りました。円はエンティティのニンバスを表します、そして、3角形はフォーカスを表します。フォーカスが他のエンティティのニンバスに触れるとき、触れた方のエンティティは購読を始め、位置更新を受け取るようになります。緑のエンティティがサーバが見るべき実際の位置を表します。青の影はクライアントが見る(サーバのエンティティに対する)プロキシです。エンティティがひとりも購読者を持たない場合、プロキシは更新されず動きません。赤の線は2エンティティ間で少なくとも一方が他方を購読していることを表します。エンティティの状態は、ユニークなエンティティのID(ID)、自分が購読しているエンティティのID(SUB)、自分を購読しているエンティティのID(SUBC)、サー バから受け取ったパケット数の合計(PACKETS)が表示されます。また上部にサーバの出力(赤)と入力(緑)の平均値のグラフがあります。

操作方法:
カーソル左右 = 白いエンティティを時計・反時計回りに回転
カーソル上下 = 白いエンティティを前後移動
スペース = 関心領域フィルタの使用を切り替え
エンター = フォーカスの代わりにニンバスを使う

ソースコードはこちら
swfを直接見る

もう一言二言

次のような拡張ができそうです。

  • 距離ベースのフィルタリング。どのくらいエンティティに近づいているかに基づいて、パケットを受け取る優先順位を変える。
  • エンティティひとつに複数のニンバス。ニンバスをチャット用、アニメーション用、位置用と使い分けます。
  • 動的なニンバス/フォーカス。

参考文献

Leave a Comment

Trackbacked

trackback url for this entry: http://www.pyramid-inc.net/lab/archives/120/trackback