プレイヤーの皆さん、こんにちは!

 

ゲーム内フレームの改善のため、私たちがどのような技術的改善に取り組んでいるのかを説明するシリーズ、名付けて「コンソール開発日記」を今週からプレイヤーの皆様にお送りします。

 

このシリーズは隔週でお送りするもので、開発の段階で発生する様々な問題をどのように改善していくかをまとめたシリーズになります。

 

Intro

世界各国のプレイヤーの皆様からPUBGのフレーム低下、特にゲームの中盤から後半にかけてのパフォーマンス低下について沢山のレポートを頂いております。今回はなぜ中盤以降からゲームパフォーマンスの低下が顕著になるのかについて説明します。

 

コンソール版のPUBGはキャラクターがどこに位置していても、その地点から半径600m圏内の全てのリソースを計算します。

ゲームが後半へと差し掛かると、安全地帯の円が小さくなり、キャラクターが狭い地域内に集まることになりますが、そうなるとスタート時点に比べ、計算するべきリソースが多くなります。

特にゲームの後半では車両や投擲物、射撃など計算すべきリソースの種類も多くなる為、それらがパフォーマンスの低下に繋がることになります。

よって、フレームの低下を軽減し、全体的なパフォーマンスを向上させる為には、計算すべきリソースを最少化する必要があるのです。

 

さらに詳しい説明に入る前に、まずは「View Spectrum」について説明します。

 

View Spectrumとは「モニターに表示される視野の角度」を意味します。

相手が画面に映っているのか、壁の後ろに隠れていて見えないのかなどは関係なく、600mの視野角の中に存在する全ての物は、このView Spectrumの中に存在します。

 

Inside the View Spectrum

View Spectrumの中にあるすべてのものは、必ず計算されなければなりません。つまり、味方や相手のキャラクターの動きが見えるものを表示する為の計算が自動的にされているということです。

そして、その動きをより正確に計算する為には「サーバー側」からの「予測計算」がまず必要になります。

 

例えば、こちらが見ている画面の中でユーザーAがある方向に向かって移動しているとしましょう。サーバーはユーザーAの位置情報をユーザーAのクライアントから受け取り、サーバーが受け取ったユーザーAの位置情報をこちらのクライアントに送ります。

その時、こちらのクライアントが受け取ったユーザーAの位置情報というのは、過去のものになるので、この情報のやり取りのスピードが遅いほど同期ズレ現象(Desync)の問題がひどくなっていきます。

 

そのため、ユーザーの位置情報の精度を改善する為に、サーバーがユーザーの速力に関しての情報を取得して、未来のどの位置にそのユーザーが位置するのかを「予測」するパッチを適用しました。

速力の情報はユーザーが移動している方向はもちろん、ユーザーが向かうであろう未来の予想地点までの経路の地形が上りなのか下りなのか、進路上に障害物はあるのか、などの様々な要素が考慮されます。

これらの情報を基に、サーバーがユーザーの情報を予測できるようになり、反応速度が既存のものよりかなり早くなった為、同期ズレの問題は解決されました。

 

しかしながら、その予測の精度を上げる為には、より多くのリソースの計算が必要になり、計算が多くなれば必然的にフレームが低下します。 そのため、ユーザーの移動にて不必要な部分を減らすことで、自然にゲーム全体のパフォーマンス向上を実現することができました。

 

下記のグラフは「フレーム当たりの衝突体移動計算量」を表しています。 30体のBOTを用いてのテストによるもので、青線が現在のビルド、黄線がこれからのパッチにより改善される数値を示しています。

以下の比較を表すグラフの通り、計算の絶対量が減少するとパフォーマンスが改善していくことが分かります。

上記の内容は現在、作業中であり、今後のパッチを通して、改善される予定です。

 

Outside the View Spectrum

こちらの視野には入っていないけれども半径600m以内に存在する、すなわち、View Spectrumの外に存在するキャラクターに関してはどのような計算が必要なのかを説明します。

例えば、こちらのView Spectrumの外にキャラクターが25体存在しており、それら全ての動きを計算しようとすると多くのリソースが計算の対象となります。

そのため、View Spectrumの外に存在するキャラクターの動きに対しての計算を最少化する為に、「物理的」なキャラクターの計算を減らしていく予定です。

 

一つのキャラクターは「レンダリング」(MeshまたはSkeletal Mesh)キャラクターと「物理」(Physics Body)キャラクターに分けることができます。

「レンダリング」キャラクターはキャラクターモデル、そして足音や射撃の音などを出す役割を持っています。

「物理」キャラクターはキャラクターの当たり判定、すなわち攻撃された際にキャラクターのどこに、どのように銃弾が当ったのかを判定する為のものになります。

リソースを効率的に計算する為に、「レンダリング」キャラクターの情報だけを計算し、「物理」キャラクターは最後の位置に置いたままにしておくように開発を進めました。 「レンダリング」キャラクターがView Spectrum内に入ると、「物理」キャラクターが「レンダリング」キャラクターの位置に移動します。

View Spectrum内に存在するキャラクターは「レンダリング」と「物理」が一緒になって動き、再びView Spectrumの外に出ると「物理」の方の移動を止めるといった方法で、物理計算量を減らし、パフォーマンスを向上させていく予定です。

下のグラフも先ほどの物と同じく、30体のBOTを用いてのテストによるもので、青線が現在のビルド、黄線がパッチにより改善される数値です。

 

 

まとめますと、今後のパッチにより、View Spectrum内外でのキャラクターの移動に対してのリソース計算量を減らなどのパフォーマンスの改善作業を行う予定です。

プレイヤーの皆さんにはより良いゲーム環境を出来るだけ早期に提供することをお約束致します。

 

いつもPUBGを応援して頂きまして、誠にありがとうございます。

それでは、また2週間後にお会いしましょう。

 

『PUBG』チーム一同。

この記事を議論する
この記事を共有する