1. あいてを まって いたら、ボタンは いつ きくの?
1. 相手を待つ方法と、待たない方法はどうちがうのか
1. 入力を待つ方式と、予測して進む方式は何がちがうのか
ゲームの がめんは、1びょうに 60かい かきかわります。この 1かいぶんを 「フレーム」と いいます。1フレームは 1びょうの 60ぶんの 1で、とても みじかい じかんです。
ネットの むこうの あいての ボタンは、とどくのに すこし じかんが かかります。むかしからの やりかたは、あいての ボタンが とどくまで、じぶんの ボタンも わざと おくらせて、まって いました。これを 「ディレイほうしき」と よびます。おくれが おおきいと、がめんが とまって しまいます。
これに たいして ロールバックは、じぶんの ボタンを すぐ がめんに うつします。とどいて いない あいての ボタンは、「さっきと おなじ ことを して いる」と かんがえて、さきへ すすみます。
つまり、まつ かわりに、さきに よそうして しまう やりかたです。
まず、遅れがどれくらいか考えます。ゲームの画面は1秒間に60回書き換わり、その1回分を1フレーム(約0.017秒)と呼びます。ある解説サイトの例では、相手との往復の通信に90ミリ秒かかると、片道は約45ミリ秒です[2]。45÷16.7を計算すると約2.7なので、およそ3フレーム分の遅れです。
昔からあるディレイ方式は、この遅れの分だけ自分の入力もわざと遅らせ、両方の同じフレームの入力がそろってから進めます。遅れが想定より大きいと、画面が止まって待つことになります[2]。画面を意図的に止めて同期をとるので、動きがカクつきやすく、練習で覚えたコンボのタイミングもずれやすいと説明されています[1]。
ロールバック方式は、待ちません。自分の入力はすぐ画面に反映し、まだ届かない相手の入力は「直前と同じ動きが続く」と予測して先へ進みます[1]。そのため画面が滑らかで、連続入力のタイミングも取りやすくなるといわれます。
待つかわりに、先に決めてしまう。では、その予測はどのくらい当たるのでしょうか。
オンライン対戦の最大の問題は、相手の入力が届くまでに通信時間がかかることである。ある個人解説の例では、往復90ミリ秒の回線は片道約45ミリ秒となり、1フレームを約16.7ミリ秒(60分の1秒)として割ると約2.7、つまりおよそ3フレームの遅れになる[2]。数字は一例で、回線ごとに変わる。
従来のディレイ方式は、この遅れの分だけ自分の入力も固定のフレーム数だけ遅らせ、同じフレームの両者の入力がそろってから進める。遅れが見込みより大きくなれば、画面が止まって待つ[2]。画面を意図的に止めて同期をとる仕組みなので、動きがカクつきやすく、練習で覚えたコンボのタイミングがずれやすい[1]。
ロールバック方式は発想を変え、待つことをやめる。自分の入力はすぐ画面に反映する。まだ届かない相手の入力は、直前と同じ動きが続くと仮定して進む[1]。これで画面が滑らかになり、連続入力のタイミングも取りやすくなると説明される。ただし、これは「相手の動きを推測している」ということでもある。推測が成り立つ根拠は何か。次の章で見る。
2. あいての うごきは、そんなに よそう できるの?
2. 「直前と同じ」という予測は、なぜよく当たるのか
2. 予測が当たりやすいのは、入力の変化が少ないからである
ボタンを おす ところを おもいうかべて ください。1びょうの あいだに、ボタンを おす かずは、おおくても 5~6かい ほどだと いわれます。
1びょうは 60フレームなので、のこりの 54フレームほどは、ボタンを かえて いません。60ぶんの 54は、およそ 9わりです。
だから 「さっきと おなじ」と よそうすれば、たいてい あたります。ゲームの キャラクターは、9わり いじょうの じかん、さっきと おなじ ことを して いる、と せつめい されて います。
ただし、9わりは せつめいの ための めやすで、いつも かならず あたる、という やくそくでは ありません。
「相手は直前と同じことをしている」という予測は、乱暴に聞こえます。ところが、実際のボタン操作を数えると、当たりやすい理由が見えてきます。
1秒は60フレームです。その間にボタンを押したり離したりして入力が変わるのは、多くても5〜6回ほどだと説明されています[1]。残りは約54フレームで、54÷60=0.9、つまり約9割は、入力が前のフレームと同じままです。この解説は、キャラクターが90%以上の時間は直前と同じ行動を続けると述べ、だから「直前と同じ」と予測すれば当たりやすいと説明しています[1]。
ただし、9割はこの解説の中での目安です。固定の保証値ではありません。人によっても場面によっても、入力が変わる回数は違います。
それでも、10回に1回ほどは外れることになります。外れたとき、ゲームは何をするのでしょうか。
予測が当たりやすいのは、入力が時間の中でまばらにしか変化しないからである。1秒は60フレームで、そのうちボタン操作によって入力が切り替わるのは、多くても5〜6回程度とされる。残りの約54フレームは、直前と同じ入力が続く。54÷60=0.9となり、約9割の時間は入力が変わらない計算である[1]。この解説は、この入力の継続を根拠に予測は当たりやすいと説く。ただし「入力が変わらない割合」と、予測が実際に当たる割合は別のものである。
注意したいのは、この9割が規則から導かれた固定値ではなく、典型的な操作を例にした目安だという点である。連打が続く場面や、強い技を出す直前の駆け引きでは、入力の変化は増えうる。予測が外れる割合は、場面と回線の遅れの大きさで変わる。
とはいえ、10回に1回ほどは外れる計算になる。外れたとき、すでに先へ進めた数フレームは、間違った前提の上に積まれている。それをどう取り消すのか。
3. よそうが はずれたら、ゲームは どうするの?
3. 予測が外れたとき、ゲームはどう巻き戻すのか
3. 外れた予測を取り消す手順:巻き戻しと再計算
たとえば、あいてが 1フレーム目に パンチを おしたと します。でも その ボタンは、4フレーム目に なって、やっと とどきました。
ゲームは すでに、「あいては なにも して いない」と おもって 4フレーム目まで すすんで います。そこで、1フレーム目まで もどします。あいての パンチを いれて、4フレーム目まで いっしゅんで やりなおします。
まるで ビデオを すこし まきもどして、ただしい ばめんから さいせい する ようです。
もしも よそうが あたって いたら、もどる ひつようは ありません。あいてが ダウンして いるときなど、うごきが かわらない ところでは、もどっても みた目は かわりません。
ロールバックの名前のとおり、ゲームは「戻して、やり直す」ことで予測の誤りを直します。
ある解説の例を使って、流れを追ってみましょう。相手が1フレーム目に中パンチを押したのに、その入力が4フレーム目に届いたとします[4]。自分の画面は、相手は何も押していないという予測のまま、4フレーム目まで進んでいます。入力が届いたゲームは、1フレーム目の状態に戻り、そこへ相手の中パンチを入れ、自分の入力も重ね直して、4フレーム目まで一気に計算し直します。
開発者向けの記事も、実際の入力が予測と違っていたら、最初に間違えたフレームまで戻して本当の入力で予測し直し、現在のフレームまで進めると説明しています[3]。
予測が当たっていれば、戻す必要はありません。また、相手が倒れて動けない場面のように、入力が変わっても結果が変わらないときは、戻しても見た目は変わりません[4]。
ところで、複雑なゲームを数フレーム分戻して、一瞬でやり直すことは、どのゲームでもできるのでしょうか。
予測が外れていると分かったとき、ゲームが行う処理は三段階に分けられる。まず、最初に予測を間違えたフレームまで状態を戻す。次に、各プレイヤーの入力をそのフレームから本当の値で与え直す。最後に、現在のフレームまで再計算する[3]。
個人解説の具体例では、相手が1フレーム目に中パンチを押し、その入力が4フレーム目に届く。自分の側は、それまで相手の入力なしで進めていた。入力が届くと、1フレーム目に戻って中パンチを入れ、自分の入力も入れ直し、4フレーム目まで再計算する[4]。
予測が当たっていれば、この処理は起きない。入力が違っていても、相手が倒れて動けない間のように、結果が変わらない場面なら、戻した後の見た目も変わらない[4]。つまり巻き戻しは、画面に影響が出る場合だけ目に見える、局所的な修正である。
ただし、この方法には前提がある。ゲームが過去の状態を正確に取り出せ、同じ入力から同じ結果を再現できなければならない。その条件を次に見る。
4. ゲームは、どうやって もどれるの?
4. 巻き戻しが成り立つために、ゲームが用意するもの
4. 巻き戻しの条件:状態の保存、復元、そして決定性
もどるには、まず 「いまの ようす」を おぼえて おく ひつようが あります。キャラの いちや たいりょく などを、1フレームごとに メモして とっておく ようなものです。
ゲームは、つぎの 3つを もって います。
1つめは、ようすを ほぞんする こと。2つめは、ほぞんした ようすに もどす こと。3つめは、がめんを かかずに、1フレームだけ すすめる ことです。
もどって やりなおして いる あいだ、がめんは かきません。おとも、なる じかんを ずらして、きこえます。だから、プレイヤーには もどった ことが わかりにくいのです。
もうひとつ だいじな ことが あります。おなじ ボタンなら、どの ゲームきでも おなじ けっかに なる つくりです。これが ないと、やりなおした けっかが、人に よって ばらばらに なります。
ロールバックは、ゲーム側に条件を求めます。代表的なライブラリGGPOの資料によれば、ゲームは次の三つを用意する必要があります[5]。
状態を保存すること
キャラクターの位置や体力など、その瞬間のゲームの状態を記録します。GGPOは、直近の数フレーム分を持ち続けます。
保存した状態に戻すこと
記録した状態を読み込んで、その時点に戻れるようにします。
画面を描かずに1フレームだけ進めること
やり直しの計算は、できるだけ速く、利用者に見えない形で進めます。映像は描かずに飛ばし、音は鳴らすタイミングをずらして再生します[5]。
もうひとつ、土台になる条件があります。同じ入力を与えれば、全員のゲーム機でまったく同じ結果になることです。GGPOの資料は、この性質を、全員が同じ入力を受け取れば同じようにゲームが進むための前提としています[5]。結果にばらつきがあると、戻してやり直しても、人によって違う画面になってしまいます。
巻き戻しは魔法ではなく、ゲームの作りに支えられた技術なのです。では、プレイヤーの目にはそれがどう見えているのでしょうか。
巻き戻しを使うには、ゲームの側が三つの機能を備えていなければならない。ある時点のゲーム状態を保存すること、保存した状態へ戻すこと、描画せずに1フレームだけ進めることである。GGPOの資料は、この三つを用意することを求めている。ライブラリは直近のnフレーム分の状態を保持し、予測が外れたときに戻す[5]。巻き戻せるフレーム数の上限はゲームごとに異なり、共通の値は書けない。
再計算の速さにも要求がある。戻した後は現在のフレームまで、できるだけ速く、利用者の目に見えない形で進める。そのため映像は描画せずに飛ばし、音は鳴らすタイミングを調整して再生する[5]。目に見える画面が増えるのは、再計算が終わってからになる。
より根本的な条件は、決定性である。同じ入力を与えれば、どの参加者のゲーム機でも同じ結果になる、という性質だ。GGPOの資料は、同じ入力を渡しさえすれば全員で同じ展開になるはずだという考えを、方式全体の前提にしている[5]。乱数や計算の順序が機械ごとにずれると、戻して再計算した結果が人によって変わる。これは、ネットを通じて共有するのが画面ではなく入力だけである理由とも結びつく。
では、こうして遅れを隠しても、画面上に完全に跡が残らないのか。そうではない。
5. あいてが ワープしたように 見えるのは なぜ?
5. 相手のキャラクターがワープして見える理由と、限界
5. 巻き戻しが見た目に残す跡と、方式の限界
ロールバックは、おくれを、あいての わざの 「だしはじめ」に かくす、と いわれます。そのため、あいての わざが、すうフレーム すすんだ ところから 見える ことが あります。
もどった とき、あいての キャラが、ちょっと ワープした ように 見える ことも あります。
おくれが おおきく なると、もどる フレームが ふえ、わざの だしはじめが 見えにくく なります。ですから、おなじ くらいの 回線の ひと どうしで たたかったり、わざと すこし おくらせる ほうほうを まぜたり します。
たとえば、さいきんの ゲームでは、さいしょから 3フレームほど おくらせる ものが あります。そのはんいに とどく ボタンは、もどる ことが ありません。ゲームごとに かずは ちがいます。
巻き戻しは見えないように行われますが、跡が残ることもあります。
この方式は、通信の遅れを、相手の技の出始めに隠すと説明されます[3]。自分の画面では、相手の技が数フレーム進んだ状態から見えることが多く、技の最初の部分が見えにくくなります。巻き戻しが起きたときは、相手のキャラクターが少しワープしたように見えることがあります[4]。
遅れが大きくなると
遅れが大きいと、省略されるフレームが増えて、攻撃の出始めがさらに見えにくくなります。そのため、同じ程度の回線どうしをマッチングしたり、ディレイ方式と併用したりすることが実際に使われます[1]。
小さな入力遅延との併用
最近のゲームは、固定の小さな入力遅延とロールバックを併用することが多いとされます。ある解説では、Killer Instinctなどは3フレームだと紹介されています[4]。約3フレームは50ミリ秒ほどです(3÷60=0.05秒)。この遅延の範囲内に届く入力は、巻き戻しを起こしません。数字はゲームごとに違います。
では、この方法はどこから来て、どこまで広がったのでしょうか。
ロールバック方式は、通信の遅れを消すのではなく、見え方の側に押しこめる方式である。GGPOでは、遅れを相手の動作の出始めに隠すと説明される。結果として、相手の技は、自分の画面では数フレーム進んだ状態から見えることが多い[3]。巻き戻しが起きた瞬間に、相手のキャラクターが少しワープしたように見えることがあるのは、このためである[4]。
限界は、遅れが大きくなったときに現れる。遅れが増えるほど、再計算で飛ばされるフレームが増え、攻撃の初動が見えにくくなる。そのため、実際の運用では、回線品質の近いプレイヤーどうしをマッチングする、あるいはディレイ方式を併用する、といった工夫が使われる[1]。巻き戻せる範囲に上限がある以上、遅れがその範囲を超えれば、方式だけでは補えない。
現代の作品では、固定の小さな入力遅延とロールバックの併用が多い。個人解説は、Killer Instinctなどの3フレームの例を挙げる[4]。3フレームは3÷60で0.05秒、すなわち約50ミリ秒に当たる。この範囲内に届いた入力は巻き戻しを起こさず、予測が必要な場面そのものが減る。値は作品ごとに違うため、この3フレームを一般則として扱うことはできない。
そこで、この方式が実際のゲームにどう使われてきたのかを見る。
6. この ほうほうは、いつごろから つかわれて いるの?
6. ロールバック方式は、いつから使われてきたのか
6. GGPOから最近の作品まで:ロールバック方式の広がり
この ほうほうで ゲームを つくる ための ぶひんが、「GGPO」と いう なまえで、こうかい されました。いつ できたかは、しりょうに よって ちがいが あります。つくった のは、ゲーム ずきの ひとが あつまる コミュニティの うんえいしゃ、トニー・キャノンさんです。
2019ねんには、だれでも じゆうに つかえる かたちで ひろく こうかい されました。
この ぶひんを つかった ゲームとして、「ストリートファイターIII 3rd Strike Online Edition」(2011ねん)や「Skullgirls」(2012ねん)が あげられて います。
さいきんでは、「GUILTY GEAR Xrd REV 2」の パソコンばんが、2023ねん1月20日に、この ほうほうを とりいれました。
ロールバックの代表的な実装であるGGPO(Good Game, Peace Out)は、格闘ゲームコミュニティの運営者トニー・キャノンさんが公開した部品です。最初の版の時期は、Wikipediaは2006年末、公式サイトは2009年作成と書いていて、資料によって食い違います[6]。2019年10月9日には、MITライセンスのオープンソースとして公開されました[6]。
GGPOを使った例としては、「ストリートファイターIII 3rd Strike Online Edition」(2011年)や「Skullgirls」(2012年)が挙げられます[6]。
最近では、「GUILTY GEAR Xrd REV 2」のSteam版が、2023年1月20日にロールバックネットコードを正式に実装しました。報道は、対戦相手の入力とその予測をもとに画面の描画を調整して、遅延を吸収する仕組みだと説明しています[7]。特定のタイトルがどの実装を使っているかは、資料ごとに書き方が違うため、ここでは上の例にとどめます。
方式は昔からの回線の遅れという問題に、予測と巻き戻しという答えを出しました。では、私たちが遊びながら確かめられることはあるでしょうか。
GGPO(Good Game, Peace Out)は、格闘ゲームコミュニティの運営者トニー・キャノンさんが公開した部品である。最初の版の時期は、Wikipediaが2006年末、公式サイトが2009年作成と記し、資料によって食い違う[6]。2019年10月9日には、MITライセンスのオープンソースとして公開が告知された[6]。
採用例としては、「ストリートファイターIII 3rd Strike Online Edition」(2011年)と「Skullgirls」(2012年)が挙がる[6]。一方、別の解説は「ストリートファイターV」がGGPOを採用したとする説明を誤りだと訂正しており[1]、特定のタイトルの実装は、公式の説明を確認するまで断定しないほうがよい。
近年の例では、「GUILTY GEAR Xrd REV 2」のSteam版が、2023年1月20日にロールバックネットコードを正式に実装した。報道は、対戦相手の入力とその予測にもとづいて画面の描画を調整し、遅延を吸収する方式だと説明している[7]。この方式は、予測、状態の保存、決定性という三つの条件が揃えば、対応できるゲームの範囲が広がることを示している。もっとも、各ゲームの内部の実装まで、報道だけで判断することはできない。
こうして仕組みを追うと、対戦中の画面で何を観察すればよいかも見えてくる。
7. じぶんで ためして みよう
7. 手と目で、予測と巻き戻しを確かめる
7. 数字を自分で確かめ、原典を読む
きょう できる こと
10びょうの あいだ、つくえを すきな リズムで トントンと たたいて みましょう。おうちの ひとに、たたいた かずを かぞえて もらいます。10びょうは 600フレームです。ボタンを おす ときと はなす ときの りょうほうで かわるので、たたいた かずを 2ばいして、600で わると、「かわった フレームの わりあい」が わかります。のこりは、「さっきと おなじ」の フレームです。ほとんどが おなじ だと、わかります。
ゲームを あそぶ ときに
ネットで たいせんできる ゲームを もっている ひとは、あいての キャラが ふっと ワープする ところを さがして みましょう。それは、もどって やりなおした あとかも しれません。
10秒間の入力を数える
時計を見ながら、10秒間、好きなリズムで机をトントンとたたき、回数を数えます。10秒は600フレームです。手を下ろす動きと上げる動きの両方で入力が変わると考えて、回数を2倍にし、600で割ると、入力が変わったフレームのおおよその割合が出ます。たとえば30回たたけば、30×2=60で、60÷600=0.1、約1割です。残りの約9割が「直前と同じ」になります。あなたの結果は、本文の9割に近いでしょうか。
ゲームで観察する
オンライン対戦のあるゲームを持っているときは、相手のキャラクターが一瞬ワープしたように見える場面を探してみましょう。それが巻き戻しのあとかもしれません。ただし、ゲームごとに作りは違うので、見えたからといって原因は決められません。
資料を読むなら
Game*Sparkの記事[1]は日本語で読めて、予測が当たる理由が図つきで解説されています。GGPOの資料[5]は英語ですが、保存・復元・描画せずに進める、という三つの要件が短くまとまっています。
入力の変化の割合を測る
10秒間、一定ではないリズムで机をたたき、回数を数える。10秒は600フレームである。入力が変わるのはたたく動きと離す動きの両方なので、回数に2を掛け、600で割れば、変化したフレームのおおよその割合が出る。たとえば30回なら、30×2÷600=0.1である。この値と、本文の「約9割は変わらない」を比べる。連打に近いリズムにすると、割合はどう変わるか。予測が外れやすくなる条件を、自分の数字で推測できる。
資料を読むなら
手順の原典は、Patrick Millerによる開発者向けの記事[3]と、GGPOの資料[5]である。ともに英語だが、後者は、保存・復元・描画せずに進める、という三つの要件と、決定性の前提を短くまとめている。日本語では、予測の当たりやすさをGame*Sparkの記事[1]で、数字の例をInfilの解説[2][4]で確かめられる。後者は個人の解説なので、数字は一例として読む。
対戦ゲームで、相手のキャラクターが一瞬ワープする場面を見つけたら、本章までの内容と結びつけて考えてみてほしい。ただし、見えた現象だけでは、ゲームの内部の実装まで決められない。
しらべた もとの じょうほう
参考にした情報源
参考にした情報源と、その使い方
本文で使った資料です。
- Game*Spark「ロールバック方式と未来予測のからくり」2022. https://www.gamespark.jp/article/2022/05/23/118744.html (ディレイ方式との比べ、予測が当たる理由、限界)
- Infil「Netcode」p3. https://words.infil.net/w02-netcode-p3.html (ディレイ方式と遅れの例。個人の解説)
- Patrick Miller, "The Lag-Fighting Techniques Behind GGPO's Netcode," Game Developer, 2012. https://www.gamedeveloper.com/programming/the-lag-fighting-techniques-behind-ggpo-s-netcode (巻き戻しと再計算の流れ、遅れを出始めに隠すこと)
- Infil「Netcode」p4. https://words.infil.net/w02-netcode-p4.html (巻き戻しの具体例、入力遅延との併用。個人の解説)
- GGPO documentation (pond3r/ggpo). https://github.com/pond3r/ggpo/blob/master/doc/README.md (保存・復元・描画せずに進めること、決定性の前提)
- Wikipedia "GGPO". https://en.wikipedia.org/wiki/GGPO (GGPOの公開時期と採用例)
- AUTOMATON「GUILTY GEAR Xrd REV 2」ロールバック実装の報道, 2023. https://automaton-media.com/articles/newsjp/20230116-233739/ (近年の採用例)
なおした ところ
更新履歴
更新履歴(改版の記録)
- 初版を公開。
このサイトでは、公開した記事の本文は原則として書き直しません。誤りが見つかったときや、内容が古くなったときだけ手を入れ、その理由をこの欄に残します。