CESA Developers Conference 2010(CEDEC 2010)レポート

セガ節政氏、オンラインゲームの実装テクニックをレクチャー
「バーチャファイター」から「PSU」まで、ネットワークプログラムの実例を紹介


8月31日~9月2日開催

会場:パシフィコ横浜



 8月31日よりパシフィコ横浜で開催されているゲーム開発者向けカンファレンス「CEDEC 2010」。本稿では、オンラインゲーム開発についてのチュートリアル的なセッションとなった「ネットワークゲームの仕組みとゲームデザイン」と題する講演の内容をお伝えしたい。

 講演を行なったのは株式会社セガ、第三CS研究開発部でテクニカルディレクターを務める節政暁生氏。「ファンタシースターオンライン」をはじめとする、セガのオンラインゲームに多く携わってきた節政氏は、このセッションでオンラインゲームの開発に関する知見を複数のゲームジャンルにまたがりつつ、包括的に提供した。このセッションを聴講すれば、従来のほとんどのオンラインゲームの通信方式がひととおり把握できるという内容だ。




■ ネットワークの基本と「バーチャファイター」のアルゴリズム

講演を行なったセガの節政暁生氏
LANとWAN。WANではネットワーク実装に様々な工夫が必要となってくる
格闘ゲームの実装例として「バーチャファイター」が登場
ゲームの特性からネットワークの方式を考える

 本セッションは300名ほどを収容可能な大型のセミナールームで開催された。空席は早々に埋まり、たくさんの立ち見客まで現われるという高い注目を集めていた。節政氏はまず、「ネットワークゲームの技術はゲームデザインにも深い影響を与えるものです。ですから、ネットワークゲームのプログラマーだけではなく、ゲームデザイナーの方にも聞いて欲しいと考えています」として話を起こしていった。

 最初のトピックとなったのは「ネットワーク通信の基本」について。節政氏は、オンラインゲームのインフラとなるネットワークをLANとWANに分類する。LANは物理的に近い距離の接続で構成されるネットワークで、遅延、帯域ともに理想的な状況が想定できる一方、広域ネットワークであるWAN、すなわちインターネットでは遅延や帯域の制限により、用いられる技術やゲームデザインが大きく変わってくる。

 続いて節政氏は、ネットワーク型アクションゲームの典型として「バーチャファイター」シリーズのオンライン対戦について触れた。ゲームの要素としては2人プレイ、アクション性が非常に高いなどの特性があるタイトルだ。開発にあたってはその特性に合わせ、「キー入力同期方式」と節政氏が呼ぶネットワーク通信のパラダイムを採用したという。

 この方式でゲーム中に通信されるのは、プレーヤーが入力した移動・攻撃・防御などの入力情報。1つのデータ量は「1バイトに収まる」と節政氏。これを遅延の少ないUDPを使って秒間60回というスピードでやりとりする。同期の取り方は、「相手の操作情報が届いたら、そのフレームの処理を実行する」という考え方が基本となっている。

 しかしUDPというプロトコルは常にパケットロスの可能性があるため、「バーチャファイター」ではいくつかの工夫を凝らしている。まず基本となるのが「情報の多重化」。1回に送るデータに、過去10フレーム分の操作情報を詰め込み、毎回送信するという方法だ。こうすれば途中数回パケットロスが発生しても、次に情報が届いた時点で、フレームを現在まで進めるために必要な操作情報を埋めることができる。

 しかし10回以上連続してパケットロスが起きた場合はどうだろうか? 「バーチャファイター」ではそのための対策として、1秒に1回だけ、過去60フレーム分の情報を到着保証つきのプロトコルで送信しているのだという。これにより多少のネットワーク障害が発生しても対戦セッションを維持することが保証され、通常時は最小の遅延でゲームが動作する。ゲーム性に合わせて最適なネットワーク実装を実現しているというわけだ。


UDP、TCP、Reliable UDPのそれぞれについて。Reliable UDPの基本的な実装方法についても解説が行なわれた

「バーチャファイター」における通信アルゴリズム。1フレーム毎に発生する入力情報をやりとりしてゲーム進行を同期させるという手法だ。エラー訂正のための仕組みを含めて、「バーチャファイター5」では44kbps程度の帯域を使用するという
対戦格闘ゲームとRTSはゲーム的に似つかないようにみえるが、ネットワークに関しては近い考え方で実装されている。RTSでやり取りされるのはプレーヤーによる操作情報。ユニットへの命令がパックされて、格闘ゲームよりは低い頻度でやりとりされる



■ FPSにおける高速通信の実装テクニック

FPSの代表例として挙げられたのが「Quake III」
サーバー集中処理型のネットワークパラダイム

 節政氏は、対戦格闘ゲームやRTSの例で挙げたような方式を「完全同期型ゲーム」と分類している。これに対応する概念が「非同期型ゲーム」。FPSやMMO、アクションRPGなどのゲームで用いられる手法だ。この手法ではゲームの参加人数や規模をスケールしやすいかわりに、「ゲームデザイン的に何を捨てるかが重要になる」と節政氏は指摘している。

 非同期型ゲームのうち、FPSやMMOは節政氏が「サーバー集中処理型」と呼ぶネットワークパラダイムが基本となっている。一般的にクライアント・サーバー(C/S)方式と呼ばれる形だ。この形ではゲーム進行がサーバーで一元的に管理され、プレーヤーが操作するクライアントは基本的に入出力のみを行なうという形で、システム全体で明確な役割分担が行なわれる。

 節政氏はその代表例として、1999年に発売されたFPS「Quake III: Arena」を挙げた。本作はオンライン対戦可能なFPSのはしりとなったシリーズの第3作。FPSにおけるネットワーク周りのシステムは本作で完成を見た、と節政氏は分析している。

 「Quake III」のネットワークはサーバー・クライアント方式。クライアントがプレーヤーの操作情報をサーバーに送り、サーバーがゲームを駆動して、その結果変化したゲーム内のステータス情報を各クライアントに配信することでゲームが進行していく。ステータス情報は、そのままの形ではキャラクター1体あたり164バイトほどになるという。

 秒間に10回、20回という頻度で通信を行なう場合、これではデータ量が大きくなりすぎるので、工夫として「デルタ圧縮」という考え方がある。これは「前回のフレームから変化した情報だけを送る」というもの。ファイル圧縮に使われるような複雑なものではなく、ゲームの特性に基づいた効率のよい手法だ。

 節政氏はデルタ圧縮の詳細のほか、遅延のある環境で見た目通りの当たり判定を実現する「Counter-Strike」などにおけるラグ補償の方式など、FPS系ゲームでのネットワーク実装例をひととおり紹介。アーケードの「ボーダーブレイク」ではそれに近い実装が行なわれているという。続いて、節政氏自身が開発に携わった「ファンタシースターオンライン」、「ファンタシースターユニバース」の実例紹介に移っていった。


「Quake III」における実装例の紹介。このゲームは開発元からソースコードが公開されているため、オンラインゲームプログラムの教材としても秀逸



■ 大胆なネットワークデザインを行なった「ファンタシースターオンライン」

セガのオンラインゲームとして長寿タイトルとなった「ファンタシースターオンライン」
世界中に大規模なサービスを提供するため、クライアント同士でゲームを進行させる「クライアント分散型処理」を採用

 「ファンタシースター」シリーズのオンライン化においては、まず全世界の人が遊べることを重視したという。とはいえアクション性の高いゲーム性を提供するため、通信ラグの影響は避けたい。そこで最初のオンラインタイトルである「ファンタシースターオンライン(PSO)」では、節政氏が「クライアント分散処理型」と呼ぶ方式を採用した。

 この方式では、サーバーは各クライアントの通信を経由するだけだ。ゲームは各クライアントの中でリアルタイムに進行し、クライアントはお互いに自分が行動した結果をやりとりして、互いに状況がわかるようになっている。とはいえ厳密な同期は行なわず、やりとりするのは敵にダメージを与えたとか、倒し、倒されたといった重要なイベントだけ。これにより通信量を劇的に削減することに成功している。ただし、少々プログラムは複雑になってしまうようだ。

 そして、通信される内容の中で特に多くなるのは、キャラクターの位置を伝える移動パケットだという。「PSO」ではこれをドラスティックに削減するため、移動ボタンを押すとその時点で6フレーム分の移動が確定するという大胆な方法を実装した。これにより移動パケットは秒間10回以上送られることが絶対になくなる。そのかわり、精密な位置調整が難しく、狙った位置に止まるために行ったり来たりを繰り返すという独特の風景が生まれてしまったのだとか。通信とゲーム性のトレードオフを示す、なかなか興味深いエピソードだ。


通信量を減らすため、移動の同期を粗くするという大胆な方法をとった。これがゲームデザインにも影響。「トルネードダンス」という技では相当無理をすることになったようだ

ボス戦闘における同期内容。プログラムはかなり複雑になりそうだ
MMOエリアの様子。奥の方に見える半透明のキャラクターは、姿形の情報を同期せず、通信を節約しているもの。周囲のプレーヤー数が減ったり、近づいていくととだんだん見えるようになる
「PSU」のMMOエリアで通信頻度調整のために使われている「グリッドツリー」。通信におけるLODの1手法と言える

 こちらもドラスティックな対応となったのが、敵キャラクターの挙動だ。「PSO」では大胆にも、敵キャラクターの位置に対する同期を捨てたのだという。各プレーヤーが見ている敵キャラクターの位置はそれぞれ異なることになるが、ダメージなどの結果だけを同期することにより、皆で戦っている感じは十分に出せるという判断のようだ。

 ただ、全員で1体の敵と長時間戦う、ボス戦だけは特別に多くの情報を同期するようになっている。1アクションの長さを10~30秒と長めにして通信頻度を抑えつつ、アクションが発生した時点で位置とアニメーションの同期を取る。あとは各クライアント側で行動AIを駆動するという考え方だ。これで問題ない程度に動機するという。

 後継作である「ファンタシースターユニバース(PSU)」ではいくつもの改良が加えられている。そのひとつが移動の同期で、プレーヤーが自由に動けるように、移動情報が確定して次の移動が受け付けられる6フレームのあいだも、自由に操作できるようにしたという。通信頻度は変わっていないので相手からはワープしているように見えることがあるが、これは許容範囲として妥協した。

 「PSU」で新たに導入された、無数のプレーヤーが1つのシーンに同居できるMMOエリアにも工夫が行なわれている。その基本的な考え方は「距離によって通信頻度を調整する」というもの。フィールドを10m単位で分割した論理構造「グリッドツリー」を作成し、対象となるクライアントの立ち位置に近いグリッド内では高い通信頻度、遠くのグリッドでは低い通信頻度という形でデータ通信のLODを実装した。

 既存のオンラインゲームについて、そして自身が携わった作品についての実装方式を一通り紹介した節政氏。ゲームのネットワーク対応が当たり前となった現在、このように基礎的な部分を包括的に扱ったセッションは非常に価値がある。ソーシャル、ブラウザゲームというジャンルも将来的にはリアルタイム通信を必要とする状況が想定されるため、節政氏が提供した情報は多くの開発者の将来にとって有用なものとなったに違いない。


(2010年 9月 1日)

[Reported by 佐藤カフジ ]