「エーペックス」の仕組み:開発者によるサーバーとネットコードの解説
「エーペックスレジェンズ」のリードエンジニアであるRicklesauceur氏に、プレイヤーが経験する一般的なオンラインの問題とその原因、およびそれらを解決するための努力についてお話を伺いました。
概要
こんにちは。「エーペックスレジェンズ」のリードエンジニアを務める@ricklesauceurです。今回は「エーペックスレジェンズ」を支えるオンラインインフラストラクチャーについて、少し解説しようと思います。
「エーペックスレジェンズ」のサーバー、ネットコード、オンラインインフラストラクチャーなど関しては、今まで公にお話しすることがあまりなかったのですが、今回を機にもっと情報発信をしていくつもりです。お話しする内容を短くまとめると:
- 「エーペックスレジェンズ」のオンライン体験を改善するために現在私たちが行っている取り組みについてお伝えする
- 「エーペックス」のプレイ中に発生する可能性がある 一般的なオンラインの問題や接続の問題を確認し、説明する
- スローモーションのサーバー、命中判定、ラグ補正システムの仕組みといったトピックに関するよくある質問に答える
- サーバーのチックレートに関して解説し、チックレートの影響を受けるものと受けないものとについて、私たちがどう考えているかを説明する
注意:この投稿では「エーペックスレジェンズ」のオンラインインフラストラクチャーについて詳細に解説しますので、文章量が多いです。この話題に関しては、プレイヤーの皆さんから長い間ご要望を受け取っていました。
この投稿をきっかけとし、私たちはプレイヤーの皆様と対話していこうと考えています。この記事では多くの事柄についてお伝えしているのですが、DDOS攻撃やサーバークラッシュバグ等、また別の機会を設けてお話しするべき問題はたくさんあります。これからも投稿は続けていく予定ですので、このブログを気に入ったという方は、次回の記事で知りたいことについてぜひお知らせください。
ネットコードやサーバー、チックレートなどについて知る準備が万端だという人に関しては…お待たせしました!まずは、最近実装した改善点についてお話ししましょう。
パフォーマンスの指標で応答時間を改善
シーズン6では、パフォーマンス表示が導入されました。このような見た目をしており、あなたのパフォーマンスに関する基本的な情報を提供します。
「イン」と「アウト」は、ゲームが消費する帯域幅(kB/s)です。レイテンシ(ミリ秒)も表示されています。パケットロス(loss)とパケットチョーク(choke)は、秒ごとのパケットに対する割合として表示されます。
これらの数字はあなたと私たちの両方にとって、プレイ中にあなたが経験している事を理解する際に役立つ情報です。言い換えると、お客様が感じていることを、技術的かつ利用可能な情報に変換できるということです。
この機能が追加される前は、プレイヤーから「何か」がおかしいという報告が上がってくるのですが、具体的な情報を伝えることができない人もいました。今では「パケットロスが10%、レイテンシが300msです」と正確に伝えることができます。この情報は非常に重要です。なぜなら、これらの数字が原因を指し示していることが多々あるからなのです。この点については後でまた触れます。
パフォーマンス表示に取り組むと同時に、私たちはプレイヤーとサーバーのパフォーマンスに関する重要な指標の追跡を開始しました。これはつまり、 誰かが問題を報告した場合、私たちはその試合を分析し、参加していた全プレイヤーのデータ(ゲームをホストしている特定のサーバーに関する情報を含む)を見ることができるということです。
個々の件に合わせて的を絞った調査手段を私たちのチームへと提供しようという大きな動きが、この時から始まりました。このアプローチはそれなりの成果を収めたのですが、長期的に考えると、これを続けていくのは難しいと考えています。まず最初にプレイヤーから報告を受け、それから問題の発生元を確認するためにエンジニアへと指示を出し、その後(問題の原因に応じて)修正を試みるという流れは、時間がかかり過ぎるのです。
最近のシーズンでは、弊社の優秀なデータサイエンスチームの力を借りることにしました。一週間分のデータを収集してまとめて処理し、過剰なパケットロスやサーバーパフォーマンスの問題を検出します。このアプローチは既に成功を収めています。例えば、データセンターのネットワーク機器の内たった一つに生じていた問題が原因で、一部のサーバーでホストされる全ゲームのネットワークパフォーマンスを低下させていたことを突き止めることができました。サーバー自体には問題がなかったのですが、プレイヤーを問題のサーバーへと接続していたハードウェアがパケットロスを引き起こしていたのです。このような事態に遭遇することは数多くあります。
データ解析のためのシステムを構築することの主な利点は、指標とプレイヤーを相互に参照することでパターンが発見できるようになるということです。毎週毎週、自信を持ってサーバー群の状態の良し悪しを判断できるのは、このアプローチのおかげなのです。データ分析は、私たちでは解決できない問題をパートナーに解決してもらう際、その補助をするツールとしても役立ちます。何かがおかしいと言う代わりに、何が問題なのかを 具体的に伝えることができるので、問題をより素早く解決してもらうことができるのです。(ちなみに、情報の提供はオフにすることが可能です。設定メニューの「ゲームプレイ」から「使用状況のシェア」を選択してください。)
つまり、自動化システムは大いに役立つということです。ですが、それでも十分ではありません。
実際のところ、このアプローチであっても問題への対応がやや遅いのです。ほとんどのデータが確実に収集され、報告されるまでには一週間待たなければなりません。その後、完全な調査が行われるまでに、また一週間かかるということはよくあります。あなたが問題に気付いてから私たちが修正方法を発見するまでに、最大で二週間かかります。サーバーパッチが必要という場合であれば、その修正を導入するまでにもっと時間がかかります。
この状況を改善することは可能です。そして、実際に改善する予定です。では、解決策についてお話ししましょう。
第一に、週ごとの報告に加え、リアルタイムの通知機能を導入しました。これにより、現在と同等の情報をより素早く入手できるようになります。ハードウェアの問題の修正や、調査を開始してパッチの作成へと即座に取り組むことが可能になるでしょう。待たされることが腹立たしいことは、私たちも理解しています。ですから、通知から修正までの時間を縮められるよう、日々努力を重ねています。
次に、パフォーマンス表示に新たなサーバー固有ID(SID)を導入します。これにより、あなたがプレイしているサーバーをより早く見つけ出すことが可能になります。現時点では、あなたが報告した日付と時刻を、こちらが持っているあなたに関するデータと照合することで、プレイしていたサーバーを突き止めます。間もなく、その作業が不要になるのです。
上記の解決策は、新シーズン「エーペックスレジェンズ:英雄の軌跡」の期間中に導入される予定です。導入された際のプレイヤー側の利点は、サーバーに関する問題の解決がより速くなるということです。場合によっては今よりも2倍早くなるでしょう。
一般的な問題についての詳細な解説
次は、あなたが遭遇する可能性のあるサーバーの問題を大まかに分類しましょう。以下のリストには全ての問題が記載されているわけではありませんが、大体の疑問には答えられていることを願います。
サーバーがスローモーションになっています。
みんな大好きな問題ですね。私たちのサーバーは20Hzで動作しています。これはつまり、サーバーがワールドステート(ゲーム内世界の状態)全体を50ms(1秒、または1,000msを20で割った数値)ごとにシミュレートしているということです。
サーバーには映像が表示されないので、サーバーパフォーマンスの話をする場合にはfps(一秒あたりのフレーム数)について言及することはありません。代わりに、サーバーは「状態」を計算しますが、基本的な原理は同じです。ユーザーからの入力を(ネットワークから)受け取って、物理挙動を計算し、新しいワールドステートをクライアントに送り出したら、その後は同じことを繰り返します。このプロセスに50ms以上かかる状況が続くと、サーバーがシミュレーションを完了できるように、ゲームは速度を下げます。こうして、サーバーがスローモーションになるというわけです。
サーバーのフレーム時間の図。列5が目標である50msです。その下にあるものは、それよりも速いということです。このサーバーは必要とされているよりも安定性が高く、高速であることが見て取れますね。
比較すると、このサーバーは一度もフレーム時間を満たしておらず、主に200msのフレーム時間で動作しています(つまり、4倍遅いということです)。一般的には、スローモーションになっているサーバーです。
速度低下を引き起こす原因は数多くありますが、データセンター内のマシンが本来の性能を発揮していないことと関連している場合もあります。例えば、CPUがアンダークロックしていたり、オーバーヒートを起こしているといったことが考えられます。
そういった機器を検知した場合、たいていは該当する機器を取り除きます。どういう意味かというと、サービスプロバイダに連絡して例の機器の問題を伝え、その機器をオフライン状態にするよう依頼するということです。
次のシーズン中に導入予定の、先ほどお伝えしたリアルタイム検出を用いれば、この問題の発生を大幅に減らすことができるはずです。私たちはこの問題の解決するために多大な労力を費やしており、これからも状況を注視していく予定です。
レイテンシーが上下しているんですが。
あなたがWi-Fiでプレイしているというのであれば、私たちにはどうしようもありません!そうでないというのであれば、レイテンシーの急変動はサーバーのパフォーマンスに関連している場合があります。
ほとんどの場合においてゲームが60fpsで動作するといっても、画面上で色んな事が起こればそれを維持することはできません。たった数フレームであっても、フレームレートが低下すれば確実にわかりますよね。サーバーにも同じことが当てはまります。こういった場合、自動検出システムは原因の特定に対し役に立ちません。以前は開発サーバーで速度が低下した際の状況を再現する必要があったのですが、これは非常に時間がかかり、毎回当てずっぽうで解決しなければならないのです。あなたの機器は恐らく同じサーバー機器、あるいは同じ設定で動作していないでしょうから、全てを再現することは困難です。
ありがたいことに、私たちのオペレーションチームは「RPROF」ファイルと呼ぶものを取得するためのツールを作成してくれました。これは基本的に、各フレームでサーバーが何をしているのかを示すデータです(弾道シミュレーション、ネットワークのイン/アウト、プレイヤーの動きなど)。RPROFファイルのおかげで、速度低下の原因を発見し、エンジニアが最適化を始めることができるのです。たいていの場合、毎シーズン追加されていく新機能によりパフォーマンスの要求が増加したことが問題と関係しています。
覚えている方もいるかもしれませんが、シーズン7と8では、ゲーム開始時のチャンピオン画面で速度低下が起きていました。試合に参加している全プレイヤーが同じ場所にスポーンしたことで、プレイヤーが別のプレイヤーの真上に配置されたり、重なり合ったことが問題の原因でした(UIのせいでその光景を見ることすらできなかったわけです!)。物理シミュレーションでは、オブジェクトが他のオブジェクトと重なり合うと問題が発生します。そして物理エンジンがプレイヤーの体をお互いから引き離そうとしたことで、サーバーのCPUに大きな負荷がかかったというわけです。
速度が低下している(必ずしもスローモーションではありません)サーバーから影響を受けた試合の地域ごとの割合。時間が経過すると改善する地域もあれば、悪化する地域もあることが見て取れます(X軸は時間を表しています)。
異常が起きた機器を検知するための、アメリカ西部地域の詳細な図表(X軸は時間)。チャートを見れば、障害が起きていることがすぐわかります。影響を受ける機器がある一方で、安定したままの機器も存在しています。
RPROFファイルの使用は、今後ゲームに追加する新機能を最適化し、より全般的にレイテンシを低減する役に立ってくれるであろうと見込んでいます。全プレイヤーのレイテンシーを下げることは私たちにとって大きな目標であり、今回例に挙げたような、より高性能のツールはその達成に不可欠です。
パケットロスやパケットチョークが多いのですが。
これは非常に厄介な問題です。これについてはユーザーの皆様や私たちのサーバー環境のどちらも原因では無い事が多いです!
この問題は、インターネットを通じてお使いの機器からデータセンターへ、そしてまたお使いの機器へと情報が戻っていく過程と関係しています。当初、あなたのネットワークトラフィック(情報)はISPネットワーク上に存在しています。ISPに障害が起きた場合、他のお客様の情報と共にあなたの情報も消失/欠損する可能性があるということです。この場合はクライアント側で他のプレイヤーの状況が認識できなくなります。またゲームサーバー側でもあなたが射撃したいのか、それとも目的の方向に進むのかといったことが把握できなくなります。あなたのISPネットワークと、私たちのデータセンターネットワーク間にも接続が存在しています。この二つの接続上では、いつでも問題が起こり得ます。
物事が円滑に進む時、私たちはこのプロセスを「ピアリング」と呼びます。多くの場合、ピアリングの問題は、二つのネットワーク間の接続が脆弱である場合に発生します。情報が送受信される過程で、複数のホップ(中継地点)を経由する場合もあります。そしてもちろん「エーペックス」のサーバーから得た全情報はあなたの元へと戻らなければなりません。多くの場合、違う経路を通って戻っていきます。この問題が厄介だという理由が、少しわかってきたのではないでしょうか。
こちらから問題解決の手助けをするという場合、私たちはまず障害が起きた場所を探します。両方の「視点」から問題を調べ、問題が発生した場所を探すためには、 あなたからのデータと、サーバーからのデータが必要になるため、この作業を自動化するのは困難です。
現在は、プレイヤーに何らかのネットワーク経路を提供するようお願いしています。そして私たちの方でも同じことを行い、データセンター側から情報が混雑を起こしている場所を探します。この作業には非常に時間がかかるのですが、発見した内容によっては、世界中の様々な取引先企業と交渉を行う必要があるため、すぐに解決することはできません。私たちは自動化でこのプロセスが改善できると考えており、現在改良に取り組んでいるところですが、まだ初期の段階にあります。
今ここで取り上げたようなネットワークトラフィックの問題に関して一ついい点があるとすれば、問題は特定の個人だけに関連しているのではなく、まとまって問題が発生する傾向があるということです。どういう意味かというと、一人のプレイヤーに影響している問題を解決すると、他の大勢のプレイヤーの障害も解決できるということです。また、私たちはゲームで使用される帯域幅を積極的に削減することで、問題の緩和に努めています。
ホスト | ベスト | 平均 | 最低 |
---|---|---|---|
ローカル ISP | 22 | 31 | 264 |
ISP 1 | 27 | 185 | 515 |
ISP 2 | 24 | 194 | 652 |
ゲームサーバー | 31 | 263 | 522 |
これは、とある「エーペックス」のプロプレイヤーのネットワーク経路(レイテンシーを表示しています)です。彼のインターネットモデムから、私たちのサーバーへと到達しています。インターネット接続の本当の状態を判断するため、私たちは何度も調査を行います。最善の状態であれば、彼は31msのレイテンシーでゲームを楽しめていることが見て取れますね。ですが最悪の場合だと、522ms付近です。つまりこの場合だと、接続に500msもの振れ幅があるため、ゲームの遊び心地はかなり悪いということです。彼のローカルISPネットワークの接続は不安定ですが、平均を見てみると非常に稀なケースであることがわかります(平均が31mで、最低値が264ms。たまたま起きたのでしょう)。しかしその後、ローカルのISPとISP1の間でレイテンシーが急増しています。これはプレイヤーとゲームサーバーの間のノードの一つです。この二つの間でパケットロスと経路の問題が発生しているということがほぼ確実に言えるわけです。我々にはどうしようもない問題ではありますが、取引先の企業へと通知することはできます。たいていの場合、この状況を解決できれば全員に利益があります。
ドアや壁の後ろにいるのに殺されたり、さっきいた場所へと戻されることがあります。
これは議論を呼ぶトピックですね。この問題には、ラグ補正が関係しています。
オンラインゲームが誕生して以来、開発者たちが直面してきた問題があります。それは、リアルタイムで動作していないゲームで、行動をいかにしてリアルタイムに見せかけるかということ。基本的に、オンラインゲームで行うすべての行動は遅れて発生します。サーバーとのやり取りに遅延が存在しているためです。遅延の要因は他にも数多く存在します:入力やレンダリング、そしてサーバーのチックレートも含まれます。
そのうえ、ほぼ確実に自分とは異なる遅延の度合いを持っているプレイヤーが対戦相手です。この問題を解決するには、サーバーは自分と対戦相手が現在何をしているのかだけでなく、お互いが行動を入力した時点で何が起きていたのかを両方の視点から常に確認する必要があります。ラグ補正とは、少しずつ異なる体験を一つの共有された現実へと統合する技術です。
完璧な解決策は存在しません。真実はひとつでありません。言ってみれば、サーバーはある種のタイムマシンなのです。あなたの射撃が誰かに当たったかどうかを確認するため、常にワールドステートを巻き戻し、それ合わせて全員のゲーム内世界をアップデートします。
この原則をよりわかりやすく説明するために、私の同僚であるEarl Hammonが、公平性とラグ補正、そして「エーペックスレジェンズ」における仕組みについて、ちょっとしたエッセイを書いてくれました。ここでそのエッセイを共有しますね:
「エーペックスレジェンズ」で遊ぶ二人のプレイヤー、HIGHとLOWを例に使って、いくつかの状況を解説していきます。まず、HIGHには300msの高Pingを、LOWには50の低Pingを設定しましょう。Ping値の違いは250msです。
現実世界の同じ時間に、お互いへ向けて射撃したらどうなるでしょうか?LOWの射撃は、HIGHの射撃よりもはるか先にサーバーへと到達するわけですから、LOWの方が有利です。
どちらかが角を曲がり、突然お互いの姿を見たという場合には?この例でもLOWが有利です。LOWの方が「過去にいる」度合いが低いので、LOWが先にHIGHの姿を見ることになります。繰り返しになりますが、LOWが優位に立っているのはPingのおかげです。そしてこれが、LOWの弾が先にサーバーへと到達するという優位性と組み合わさります。
これら二つのケースは、LOWが有利だという意味では「不公平」ですが、Pingの低いプレイヤーがこのような状況で有利にプレイできると思うのは妥当という意味では「公平」です。
では、LOWが姿を隠すために曲がり角の向こうへ行ったらどうなるでしょうか?HIGHはまだLOWが姿を隠していない過去にいるわけですから、LOWが身を隠す前にHIGHは銃弾を撃ち込むことができます。ですが、LOWがその事実に気が付くのはHIGHのパケットがサーバーへと到達し、その後LOWの元へと辿り着いてからです。この時点でLOWは自分が安全な場所にいることを確認しているのですが、それでも攻撃を受けるわけです。LOWの視点からすれば、これは少し馬鹿げていますよね。
ですが、最初の二つの例ではLOWに有利であったことを考えると、これはまさに対称の関係にあるのです!LOWがHIGHへと攻撃するために遮蔽物から身を乗り出した場合、HIGHの方ではまだLOWの姿が見えていない一方で、LOWはHIGHの姿を先に見て撃つことができます。まだ身を隠しているプレイヤーから撃たれるというのは、HIGHの視点からすれば少し馬鹿げた話です。この「馬鹿げた状況」を排除することは不可能であり、両プレイヤーに起こります。Pingというものが現実に存在し、それぞれのプレイヤーが違った値を持っている以上、どうしようもありません。
LOWが隠れられていると思った時に、HIGHが攻撃を加えることができるというのは、LOWに対して不公平だと考える人もいるでしょう。代替手段として、HIGHは自分の高いPingを考慮した動きをすべきだという人もいるでしょう。ですがその場合、私たちは不平等かつ非対称的な遅延の処理方法を実装しなければなりません。
Pingが悪いせいで、遮蔽物に身を隠せていると思っている時に撃たれるのは気分が悪いでしょう。これはLOWに起こりうることです。Pingが悪いせいで、相手の姿が見える前に撃たれるというのも腹が立つでしょう。これはHIGHに起こりうることです。ですが「馬鹿げた状況」は左右対称に分配されているのです。
一つ断っておきたいことがあります。全てのオンラインゲームが「エーペックス」と同じ仕組みなわけではありません。Pingがより低い方のプレイヤーを常に有利にしているゲームもありますが、私たちのシステムでは、積極的にそうならないようにしています。利点と欠点の両方に目を向け、オンライン対戦の公平性を真剣に考えた後、私たちはこの方向性で行くことを決定したのです。
簡単に言えば、Ping値の低いプレイヤーが常にPing値の高いプレイヤーに対して有利なわけではなく、時として「馬鹿げた状況」を経験することもあります。
これはシステムへと意図的に組み込まれたトレードオフです。ただし、利点もあります。それは、平均よりもレイテンシーが高い場合でも「エーペックスレジェンズ」を比較的うまくプレイすることが可能であるということです。地方のプレイヤーや、接続が不安定な地域にいるプレイヤーにとっては非常に重要なことです。できる限り「馬鹿げた状況」を減らしていくべきだと思ってはいます。ですが、理想的でない体験へと対処する際には、全プレイヤーにとって平等で公平な方法で対処したいと考えています。
壁の後ろにいるのに撃たれたり、曲がり角を曲がった瞬間に攻撃されるといった「馬鹿げた状況」の原因の大半が、必ず存在するプレイヤー間のレイテンシーの差異や、私たちのシステムがその差異を分配する方法にあるのは、それが理由です。とは言え、それでも私たちはこの問題を減らしていくことに全力を傾けています。私たちは皆さん全員に公平な体験をして欲しいだけでなく、皆さん全員に楽しんで欲しいとも思っているのです。
撃っているのに命中判定が発生しないのですが。
命中判定についてお話ししましょう。命中の判定がされていないということはつまり、あなたは標的に命中させたと思っているのですが、サーバーはそう思っていないということです。あなたの視点では、血しぶきや音といった様々な形で命中の証拠が表示されているのに、ダメージカウンターが出てきません。「エーペックスレジェンズ」のようなシューティングゲームにおいては、非常に不愉快な現象です。
この問題の原因は数多くあります。時として、高いレイテンシーやパケットロスが、あなたのローカルシミュレーションとサーバー間に同期ズレを引き起こすことがあります。誰かがいると思ってあなたが射撃した場所は、相手のプレイヤーが少し前にいた場所だったということです。残念ながら、あなたのワールドのバージョンがもう一度同期するまで、あなたはその事実に気が付きません。
時には、ゲームの物理シミュレーションの不具合であることもあります。皆様へと即座にフィードバックを返すために、私たちは予測というコンセプトに頼っています。あなたが射撃したとき、私たちは弾道を把握しているので、銃弾があなたのゲーム内でどこに向かっているのかが予測でき、サーバーからあなたへとその情報を送る必要がなくなるのです。これにより、ゲームの反応性が向上します。
通常であれば、クライアントとサーバーは同じ結論に至り、銃弾は予測通りの場所に着弾します。以前は、弾道や弾の軌道を計算する方法にバグがありました(例えばスナイパーライフルといった、弾のサイズが点ではない全ての武器において)。この種のバグは発見するのが非常に困難なので、問題をすぐ発見できるよう、プレイテストの際に視覚効果を導入しました。残念ながら、この診断コードは(帯域幅の懸念から)公開しているゲームで使用するには重すぎるため、社内でのテストに頼るしかありません。
判定なしが発生するたび、私たちは当たり判定と銃弾の軌道を図にします(軌道は少し曲がるはずなのですが、大体合っているので良しとします!)。問題が起きたことがすぐわかりますし、サーバーのログを確認する際の視覚的資料としても役立ちます。
この問題に関しては、二つの方法で改善を行っています:
一つ目は、命中検出の問題を引き起こす様々なバグの調査を絶えず行うことです。開発者が新しいバグを回避できるよう、私たちは自動検出ツールの開発も行っています。私たちはこれからもこの方法で継続的に取り組んでいく予定です。
二つ目は、あなたとの協力です!プレイヤーの皆様から命中検出に問題が起きてる状況の映像を送っていただければ、修正すべきバグがあるのかどうかを突き止める助けになります。多くの場合、送信された動画は命中検出の問題ではなく、レイテンシーの問題に関連しています。そのため、命中判定の問題を報告する前に、パフォーマンス表示をご確認いただくようお願いいたします。ですが上記で述べた通り、私たちはこの方法でバグを発見し、解決してきました。つまり、報告はゲームの改善に役立つということです。ご協力に感謝いたします!
「code:net」のような、ログインができなくなるバグはどうなんですか?
「Code:net」はゲームがサーバーからタイムアウトした時に表示される一般的なエラーメッセージです。この問題の原因は数多くあり、私たちの側に問題があることもあれば、あなたの側に問題がある場合もあります。実のところ、最も深刻なcode:netバグ(およびcode:leafのような関連したバグ)のいくつかは本ゲームを支えるRespawnのサービスに関連する可能性があり、詳細な調査が必要になります。
私たちはcode:netバグが起きる確率を減らすために数多くの対策を講じました。また、サポートチームへと連絡していただければ、多くの場合は問題を解決できます。ログインができず、コード:netメッセージが表示されているという場合は、EAヘルプサイトを使ってご報告いただくようお願いいたします。
code:netは一般的なメッセージですので、このメッセージが指し示している可能性のある問題は数多く存在しています。この数週間でこういった問題のいくつかにはうまく対応できていますが、まだまだやるべき作業があります。できる限り迅速にこれらの問題を解消できるように、不具合を見かけられましたらぜひご報告ください。私たちもこのバグのことは大嫌いなのです。
サーバーのチックレートについて
大変な話題がやってきましたね。この問題に関しては、透明性のある形で取り組みたいと考えています。サーバーのチックレートについては、他のオンラインシューティングゲームのように20Hzから上げてしまわないのは何故なのか、という質問を多くのプレイヤーから受け取っています。
チックレートが画面に映る物のリフレッシュレートに影響を与える仕組みについては説明しましたので、こういった疑問が出てくるのは当然でしょう。ですが、とあるゲームのチックレートと、他のゲームのチックレートを比較するのは、あなたが思っているよりも厄介な問題なのです。その理由をこれから説明しましょう。
サーバーのチックレートは、サーバーが一秒ごとに実行するシミュレーションの数を示しています。チックレートは固定された数字です(スローモーションに関するセクションをご覧ください)。Apexはスナップショット・ベースのレプリケーション・モデルを使用しています。大まかに言うと、チックが終わるたびにサーバーはワールドステートを保存し、すべてのクライアント上で再現します。ここには、武器やマップ、レジェンドのデザインを最高の品質で再現するための多くの情報が含まれています。
「エーペックスレジェンズ」で成功を収めるには、マップ全体で起きている多くの情報に注意を払う必要があります。戦術アビリティの使用、パッシブの発動、アルティメットの使用、ケアパッケージの投下、クリプトのドローンの範囲内に侵入した新たな部隊などなど。プレイヤーには、情報を何一つ見逃してほしくないと思っています。そして、そのおかげでデザイナーは全世界で楽しんでいただけるゲームを作ることができるのです。多くのゲームはチックのたびに完全なワールドステートを計算しないため、「20Hz」対「30Hz」のように一つの数字だけでゲーム同士を比較すると誤解を招くことになります。
問題なのは、 各チックの間にいったい何が起きているのかということです。サーバーが完全なワールドステートをチックのたびに保存するのは、ワールドステートの精度をできる限り高くしたいからです。こうしていなかったなら、サーバーのCPUコストを少し減らせていたかもしれませんが、シミュレーションの精度が落ちてしまいます。そのリスクに見合った価値はありません。
簡単に言えば、チックレートが高いほど全プレイヤーに送信される帯域幅が増加します。20Hzのサーバーから60Hzのサーバーに移行した場合、ゲームが使用する帯域幅は3倍に増えます。現時点で「エーペックスレジェンズ」はゲーム開始時に約60kB/sを消費しています。60Hzのサーバーであれば、180kB/sが消費されます。大したことがないように聞こえるかもしれませんが、実際はとても重要なことで、私たちは帯域幅を減らせるように常に改善策を模索しています。
ですが、帯域幅が少し上がった程度で問題が起きるんですか?映像のストリーミングなどとは違い、ゲームにおいて帯域幅コストを低く保つことははるかに重要です。帯域幅の高いアプリケーション(ストリーミング、ダウンロードなど)の場合、数分間のストリームをバッファリングしたり、ストリームの品質を落としたりすることで、通信が中断したり、速度が変動している状態を隠すことは容易です。ダウンロード中に速度が変動したところで目に見えませんし、数ミリどころか、数百ミリ秒ほど速度が変動したところで気にも留めないでしょう。
ゲームの場合だとそうはいきません。50ms程度であっても、数回データに抜けが生じると快適とは言えなくなります。その後さらに何度か抜けが発生すると、再び同期するためにプレイヤーへと送らなければならないアップデートがどんどん大きくなっていくという、負の連鎖が始まります。クライアント上で正確に描画するには完璧なワールドステートが必要なため、アップデートは必ず送る必要があります。
上記の例は、各チックに含まれる情報はそれぞれ異なるため、ゲーム間でチックレートを比較するのは簡単ではないということを示しています。厄介な問題はもう一つあります。サーバーが送受信できる入力の上限は、チックレートが同じであっても常に同じではないという点です。もう少し具体的に説明しましょう。多くのゲームにおいて、サーバーが60Hzで動作している場合、クライアントは60Hzの入力しか送信できないということです。60fpsで動作している場合は問題ありません。ですがクライアントが120fpsで動作している場合、入力の半分が失われてしまいます。ですが「エーペックスレジェンズ」の場合は違います。入力のレートが変動しても、問題なく処理が可能です。(ちなみに「エーペックス」ではfpsが高いほど、帯域幅の使用量が増加します。)
さて、サーバーのチックレートを上げた際の不利益をいくつか解説しました。ですが、例えば20Hzから60Hzまで上げた場合の利益はどうでしょうか?そんなの簡単でしょ、Respawn!サーバーの速度が3倍速くなって、3倍快適になるんじゃないの?上げちゃえばいいじゃん!
私たちが調査した結果をもとにお話ししますと、上げてもゲームの体験は大きく変わりません。その理由を説明しましょう。
仮定の話として、あなたのPing、あるいはレイテンシーの平均が50msだとしましょう。Pingが測定しているのは、お使いの機器とサーバー間を往復する速度だということを覚えておいてください。レイテンシーの変動やハードウェアのラグ(例:ディスプレイには20~50msの遅延があります)といったその他の問題がないと仮定した場合、あなたがボタンを押すか、あるいはマウスを動かすと、サーバーは25ms(Pingの半分)後に入力を受け取ります。
私たちのサーバーは20Hzですから、ワールドステートは50msごとに更新されます(1秒は1,000msであり、それをチック20回で割ると50ms)。そのため最悪の場合であれば、入力は75ms(25ms + 50ms)後にサーバーで処理されます。
75msの遅延がプレイヤーの体験に及ぼす影響を理解するには、フレームレートについて考える必要があります。難しい計算が必要ですが、60fpsのゲームでは、各フレームが表示される時間は16.67msだということを覚えておきましょう(1秒は1,000msであり、それを60fpsで割ると、フレームあたり16.67ms)。上記の例のように、入力がサーバーによって75ms後に処理され、ゲームが60fpsで動作している場合、あなたが入力してからゲームへ反映されるまでのラグは、5フレームとなります。(アップデートごとに75ms、それをフレームあたりの数値である16.67msで割ると、約4.5フレーム。半フレームなどというものは存在しませんから、切り上げて5フレーム)。
60Hzのサーバーで上記と同じ計算を行った場合、入力とサーバー処理の間に生じる最大の遅延は、41.67msとなります(25msのPing + [1,000ms / 毎秒60チック = 16.67ms] = 41.67ms)。
41.67msが75msよりいい数値なのは間違いありませんが、フレームレートという点で考えると、この数値にはどんな意味があるのでしょうか?ここでも60fpsで動作していると仮定しましょう。各フレームは16.67msを要します。つまり入力してからサーバーが認識するまでのラグは、約3フレームです(毎アップデート41.67ms / 毎フレーム16.67ms = 約2.5フレーム、半フレームは変わらず存在しませんので、切り上げて3フレーム)。
計算結果を見てお気付きになられたでしょうが、20Hzのサーバーでは約5フレームの遅延、60Hzのサーバーでは3フレームの遅延が発生します。つまり、最善の場合であっても、帯域幅とCPUコストを3倍にして削減できる遅延はたった2フレーム分だけだということです。利点はあるのですが大きくはありませんし、普通のラグに関係する問題(遮蔽物に隠れているのに撃たれる)やISPレベルの問題、あるいはバグ(命中判定やスローモーションのサーバー関連)に関してはまったく効果がありません。
先ほどの例では、20Hzから60Hzへ上げた際の利益について検証しました。20Hzから30Hz、40Hzなど、その他の数値へと変更した場合にも、同じ計算方法を使えばその効果がわかるでしょう。先ほどの例と同じように、フレームレートへの効果はかなり小さいです。体感できるほどの変化を求めるのであれば、チックレートをかなり上げなければなりません。20Hzから60Hzへの上昇でさえ、58fpsから60fpsに変わった程度の違いしか感じないでしょう。全く変わらないというわけではありませんが、より効率の良い改善策を捨て置いてまで、チックレートの変更を優先する価値はないと私たちは考えています。
最後に
最後に言及しておきたいことがあります。それは、オンラインの問題のせいでプレイヤーの皆様が感じる、心の底からのフラストレーションです。ラグ、命中判定なし、あるいはスローモーションのサーバーといった問題に遭遇するのは、楽しくありません。現実に引き戻されるような気持ちになります。ランクを上げようとしている時、友達といい結果を残そうとしている時、あるいは夕方にリラックスしようとしている時なんかには、やる気が削がれてしまいます。 これらの問題によってプレイヤーの皆さまにご不便をお掛けしている点に付きまして誠に申し訳ございません。
オンラインの問題について話す際の難しいところは、ラグ補正またはチックレートといった問題に対する私たちの姿勢や、対応方針について説明すると、ただただゲームを改善してほしいと思っているプレイヤーがフラストレーションを感じてしまう可能性があるということです。レイテンシーの問題やサーバークラッシュのバグ、アカウントが破損する問題、あるいは「エーペックスレジェンズ」をプレイする際に直面するその他のあらゆる問題を経験している皆さまにとって、私たちの説明で納得いただけない面も有るかと存じます。
ですが、私たちは持てる技術や環境の中で出来る限りゲームを良くしたいと思って対応して参ります。全ての改善が難しくとも、できる事から少しずつ改善を進めてゲームが良くなるほど、プレイする人の数が増え、私たちは大好きな仕事を続けることができます。
近い将来取り組んでいく予定である数多くの改善策をこのブログ記事で共有したのは、それが理由です。改善策の例を以下に記載しておきます:
- 問題の特定と対応をより迅速にする、リアルタイムの通知機能の使用
- 問題があるサーバーを素早く排除して置き換えできるように、サーバーを特定するツールの導入
- スローモーションのサーバーに注力 — 問題のあるサーバーを排除することも重要ではありますが、私たちの目標は、コードに変更を加えてこの問題が発生する頻度を大幅に減らすことです。
- 新機能の最適化を行いレイテンシを低減
- 命中判定のバグを修正し、新たなバグの導入を回避に役立つ自動検出ツールを作成
ですが皆さまに知っておいていただきたいのは、今挙げたものだけに取り組んでいるわけではないということです。サーバーレベルからISPレベルにまで改善を施すため、私たちはパートナー企業と協力をしており、それに加えてオンラインインフラストラクチャーへの投資も行っています。最終的な目標は、プレイヤー皆さまからの問題の報告数を減らし、全体的なゲーム体験を向上させることです。こういった努力が実を結び始めた時には、将来の投稿でその内容についてより詳しくお伝えするつもりです。
私たちが懸念を抱いている問題について、皆さまともっと意思疎通をするようになれば、私たちが解決しようとしている問題の根本的な原因について、同じような視点から会話ができるようになるのではないかと、私たちは期待しています。このブログ記事を書いたのはそれが理由です。私たちの思考プロセスを説明し、オンラインシューティングゲームを動かす上での技術的な側面をわかりやすくお伝えできているとよいのですが。この記事が対話のきっかけとなることを願っています。
本記事をお読みいただき、ありがとうございました!
- Samy(Ricklesauceur)と「エーペックスレジェンズ」チームより
基本無料*の「エーペックスレジェンズ」をPlayStation®4、PlayStation®5、Xbox One、Xbox Series X|S、Nintendo Switch、PC(OriginおよびSteam)で今すぐプレイ。
TwitterとInstagramで「エーペックスレジェンズ」公式アカウントをフォローし、YouTubeでチャンネル登録。さらに、ゲーム公式フォーラムもチェックしよう。
今すぐニュースレターに登録して、「エーペックスレジェンズ」の最新ニュース、アップデート、開発舞台裏コンテンツ、限定オファーなど(EAニュース、製品、イベント、プロモーションを含む)をメールで受け取ろう。
本告知はコミュニティーからのフィードバックと、ライブサービスとコンテンツの開発・進展に伴い変更される可能性があります。開発チームでは、コミュニティーへの最大限の情報発信に努めています。さらに詳しくは、EAのオンラインサービスアップデートの情報をご覧ください:https://www.ea.com/ja-jp/service-updates
*対象機種のアカウントとサブスクリプション(別売)が必要になることがあります。インターネット常時接続環境とEAアカウントが必要です。年齢制限が適用されます。ゲーム内購入が含まれます。