先日『ドラゴンボールファイターズ』がロールバックネットコードに対応することがニュースになっていましたので、今回はロールバックネットコードがどんな技術なのかをかんたんに解説したいと思います。
当ブログでは、20年近くゲーム業界で働く筆者が、ゲームに関するニュースや雑学、関連技術について発信をしています。
ロールバックネットコードとは
オンラインゲームにおける通信ラグを解消、軽減するための技術でGGPOとも呼ばれています。
皆さんも、マルチプレイや対戦をした際に他プレイヤーがワープしたり、画面がスローになったりした経験は無いでしょうか。
こういった現象は相手と自分の通信環境の差や物理的な距離によって引き起こされているケースがあります。
RPGのような比較的ゆっくりと進むゲームなら不快ではあっても、ゲーム進行に大きな支障は出づらいのですが、格闘ゲームのような1フレーム(1/60秒)を競うようなジャンルでは致命的です。
背景
格闘ゲームファンのトニー・キャノン氏がオンライン対戦におけるラグを嘆き、2006年頃に開発したのが始まりです。
現在はオープンソース化され、世界中の開発者が無料で利用できるようになっています。
それもあって最近では『ギルディギア』『鉄拳』『ストリートファイター』等の多くの著名タイトルがGGPOを導入しています。
仕組み
まず、ゲームの基本的な仕組みとして、ボタンで入力された結果が計算されて画面に出力されます。
例えば「→」を入力したら「キャラクターを右に移動する」という計算が実行され、右に移動したキャラクターが画面に出力されるといった具合です。
基本的には入力>計算>画面出力は瞬時に行われるので、ボタンを押したのと同時に画面に反映されます。
しかし、オンラインでAさん(回線が早い)とBさん(回線が遅い)が戦った際、Aさんが入力した内容はBさんの処理を待って画面に表示されます。※1
結果、Aさんはボタンを押してから入力内容が画面に表示されるまでに時間差が生じてしまい、ラグを感じるわけです。
これに対して、GGPOは「1フレーム前に入力した内容を次の1フレームでも同じく入力する」と仮定して、Bさんの入力を待たずにAさんの画面に未来の予測を出力します。
例えばBさんが1フレーム前に「←」を入力していた場合、次の1フレームでも「←」を入力していると予測してAさんの画面ではBさんのキャラが左に移動します。
予測が間違っていた場合は即座に正しい情報に差し替えられます(Bさんが「↑」を入力していた場合、キャラが上方向にワープするイメージです)
文章で見ると無理がある仕組みに思えますが、実際は1フレーム(1/60秒)の中で行われているので、ほとんど違和感を感じずにプレイできます。
また、人のボタン入力速度は、1秒間に5回程度と言われており、次のボタン入力までに12フレームと考えると、1フレーム後の予測は高確率で当たるそうです。
※1 ディレイ方式と呼ばれ、日本では今でもこちらが多いです。海外ではGGPOの方が人気。
まとめ
いかがだったでしょうか。
普段何気なくプレイしているゲームの中に様々な工夫があったりするんですよね。
今回は、分かりやすくするために端折った部分もあるので、もっと詳細に知りたい方は、日本語字幕付きのトニー氏の動画を見てみることをおすすめします。
今回は以上となります。最後までお読みいただきありがとうございました。
Twitterもちょこちょこ更新していますので、ご意見やリクエストなどあればそちらにお願いします。