オンラインゲームはレイテンシを感じさせないゲームプレイをどのように実現しているのか?
多くの優れたオンラインゲームでは、コントローラーからの入力を処理する際に発生する待ち時間、すなわち「レイテンシ」をほとんど感じさせない快適なゲームプレイが可能です。本来ならクライアントとサーバーの間でレイテンシが発生しているにも関わらず、どのようにして快適なゲームプレイを実現しているのかをDatadogのエンジニアであるエヴァン・ジョーンズ氏が解説しています。
Networked games: Playing in the past or future (evanjones.ca)
https://www.evanjones.ca/network-game-simulation.html
レイテンシはオンラインゲームだけでなくローカルゲームにも存在しています。例えば「コントローラーから入力を読み込んでワールドを描画する」というプロセスがあるゲームでは、プレイヤーがボタンを押した後、ワールドのフレームが描かれるまでにレイテンシが発生します。多くのゲームにおいて、単位時間あたりに処理するフレームであるフレームレートは最大60fpsとなっており、60fpsにおいては平均8ミリ秒のレイテンシが発生します。また、ローカルゲームにおいてはフレームレートが低いゲームほど、プレイヤーの入力から画面が更新されるまでに発生するレイテンシが増加。多くのゲームは60fpsよりも低いフレームレートで描画されているため、その分遅延も大きくなります。
オンラインゲームはフレームレートの問題だけでなく、クライアントとサーバー間で通信処理が発生するため、ローカルゲームよりもレイテンシはさらに大きくなります。ジョーンズ氏はオンラインゲームにおけるレイテンシ対策を理解するため、簡易なデモを作成しました。ジョーンズ氏が作成したデモはオンラインゲームにおけるクライアントとサーバーの状態を再現し、シミュレーションでレイテンシを確認できるというもので、GitHubでソースコードが公開されています。
GitHub - evanj/netgamesim: Network game simulation: not a game, but simulates how they work
https://github.com/evanj/netgamesim
ジョーンズ氏のデモで実装されているのは「クライアントがサーバーにコマンドを送信し、サーバーがクライアントから得たデータを基に画面の描画データをクライアントに送信する」というシンプルなオンラインゲームのネットワークモデルです。例えば「キャラクターを前進させる」というアクションをサーバーに送信すると、クライアント側がゲーム画面に実際のキャラクターの動きを描画するまでにクライアントとサーバー間でデータを1往復させる必要があります。
例えば、以下の図は「t」が時間、「x」が距離、上段の「Client」がプレイヤーの操作をサーバーに送信するクライアント側、下段の「Server」がオンラインサーバー側を表しています。
クライアントもサーバーも、tが0のときにゲームを開始します。プレイヤーが「前進」のコマンドを押したので、クライアントはサーバーに「move(キャラクターが前進する)」というデータを送ります。データがサーバーに届くまでの時間を1として、tが1のときにサーバーはクライアントからのデータを受信します。
tが2のとき、サーバーはプレイヤーが1前進した描画データ(pos=1)をクライアントに送信します。
tが3になった以降は、クライアントはサーバーからデータを受信するようになり、順次ゲーム画面に反映していきます。つまり、クライアントはtが0から2の間は更新されておらず、2単位分のレイテンシが発生しているということです。
ジョーンズ氏によると、複数のオンラインゲームではプレイヤーからのコマンドを受信してそのまま描画結果を返すのではなく、プレイヤーが取った行動から、次にプレイヤーが取るであろう行動を予測した描画結果をクライアント側が画面に表示しているとのこと。例えば、「キャラクターを前進させる」という動作でのレイテンシを隠す設計は以下の通り。
ゲーム開始時にクライアントから「キャラクターを前進させる」というアクションがサーバーに送信されると、tが1の時点でクライアントはサーバーの応答を予測し、一歩前進した動作を画面に描画します。
tが2のとき、クライアントはさらに一歩前進した動作を予測し画面に描画します。
クライアントは、サーバーから本来のオンライン上での描画データをtが3のときに受信。サーバーから受け取ったデータがクライアントのシミュレーションと一致するかどうかチェックします。なお、一致しなかった場合は、クライアントは描画をやり直す必要があります。
1990年代に登場したDoomやQuakeといった初期のオンラインゲームは、一般家庭にインターネットが普及し始めた頃にリリースされました。DoomやQuakeではプレイヤーの動きを予測して画面を描画する処理は実装されておらず、プレイヤーからのコマンドを受信してそのまま描画結果を返していたことから、ジョーンズ氏は約50msのレイテンシがあったと推測しています。ジョーンズ氏は、レイテンシを隠すためにプレイヤーの行動を予測した画面描画を行うオンラインゲームを「未来を遊べるゲーム」と表現しました。
・関連記事
オンラインゲームのレイテンシを極限まで低下させるスタートアップ「Network Next」の取り組み - GIGAZINE
約330万円かけてどんなゲームでも快適に遊べる究極のゲーミングPC環境を構築した猛者が登場 - GIGAZINE
入力遅延のある環境がどれほどストレスが溜まるのか手軽に体感できるサイト「Typing delay experiment」 - GIGAZINE
オンラインゲームを楽しむために大量のPCを設置する人たち - GIGAZINE
オンラインゲームを「オカンでも説明無しで楽しめる」ように作るためにすべきこと - GIGAZINE
・関連コンテンツ