【開発日記】コンソール開発日記 #2

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

コンソール開発日記の第2話をお送りいたします!

コンソール開発日記では開発段階で発生する、様々な問題をどのように改善していこうとしているのかについて説明する隔週シリーズであり、第1話ではView Spectrumについて説明したと思います。

URL : https://bit.ly/2ThpFEw

今回は、GPUの処理時間とその所要時間を減らす為にはどの要素が影響するのかについて説明致します。

GPU処理時間とは?

簡単に説明するとGPUが1フレームを計算し終えるまでの時間です。処理時間の増加はGPUが処理すべき計算量の増加を意味し、計算量の増加はパフォーマンスの低下を招くので、フレームが低下する可能性が高くなります。

GPUの処理時間に影響する要素は数え切れないほど存在します。GPUは、グラフィックプロセシングユニット(Graphics Processing Unit)略称でありまして、その名の通り表示されるグラフィックを処理する装置です。画面に常時される数百万にも上る点(ピクセル)の全てを描く作業を1秒間にフレーム数の分だけやり遂げなければいけません。このピクセルの数を決定する要素がつまり解像度です。一般的に使われる1080Pと4Kを比べると、4Kの方が1080Pよりもピクセル数が約4倍多いです。その分、GPUが処理すべきデータも増え、自然とGPUの処理時間も伸びる訳ですね。

動的解像度 (Dynamic Resolution)

GPUの計算量によって解像度に変動性を持たせる機能を動的解像度と言います。これは解像度が1440Pから3K(4K)までにリアルタイムで変動し、1秒間の表示フレーム数の制限が解除されるオプションです。GPUの計算量が増加すると解像度が自動的に低くなり、より安定したパフォーマンスを見せることが可能になります。下のグラフは動的解像度がGPUの処理時間に及ぼす影響を表しています。

* 上記GPU処理時間はXbox One Xの環境で測定されたもの

動的解像度のオプションをONにすると、GPUの処理時間が約20%ほど減少する効果があります。GPUの処理時間が減少するとフレーム事の計算時間も減少しますので、さらに安定したパフォーマンスを見せることになります。

上記のオプションは現在、最適化の段階にまで進んでおり、今後のアップデートで実装する予定です。

GPU インスタンスカーリング (GPU Instance Culling)

Erangel、Sanhok、Vikendiには結構な広さの森が存在します。故に特定のパフォーマンスを達成する為に、同じ形の木についてはインスタンスにまとめてレンダリングすることにしています。インスタンスを用いることで1本の木を表現するリソースでいくらでも木を表現することができるようになるのですから、下記のように森を少ないリソースで表現できるのです。さらにはLevel of Detail、LODが適用されて距離によっては低画質なディテールとして表現されますので全体のパフォーマンスにも貢献します。

可視距離(viewing distance)内に存在する同じ木を出来るだけ多くまとめてスタンスの数自体を減らすこともGPUの負担を軽減することに繋がりますが、もしここでX8スコープで遠くをズームしたとしたらどうなるのでしょうか?

スコープを使用する際には遠くの木でも高いディテールで表現する為に、可視距離が上昇します。

物体のディテールを決めるLOD(Level of Detail)は画面の比率を基に決められ、LODによって物体を処理するか否か(Cull Distance)も決められます。

上記のような状況ではスコープ内で3~7本の木が見えるのみですが、実際にはView Spectrumにヒットする全てのインスタンスが処理されます。もし、インスタンスを使用してなかったなら数本の木を表現するだけで済みますが、インスタンスを使用しているので必要以上の本数の木を計算しなければなりません。さらには、普段だと最も近い数本の木(直近のインスタンス)のみを LOD0で表現したけれど、スコープ使用すると目標である木までの全てのインスタンスをLOD0で表現しなければならず、GPUの処理時間が著しく増加することになります。

もし、画面上に表示されない(Non-pixelation)インスタンスを取り除くことが出来れば、GPUの負担を軽減できるという発想から最適化をスタートしました。表示の可否(Pixelation)はGPUで自動検知しますのでGPUで処理が必要だと判断されたインスタンスのみに検査をかけ、表示するべきインスタンスを選別します。 そして、これを表示順番の最前列から(front-to-back)処理し、必ず表示しなければならない対象をを選別する過程を経ることでGPUの負担を劇的に減少させることに成功しました。

下記は4Kの環境下でGPUインスタンスカーリングの適用した前後のGPU処理時間を比較したグラフです。

* 8倍スコープでズームした際の、GPU処理時間のグラフ

* 上記GPU処理時間はXbox One Xの環境で測定されたもの

GPUインスタンスカーリングが無ければGPUの処理時間グラフが不安定になる凸凹とした形になりますが、適用後にはより安定的なGPU処理速度を見せており、適用前と比べて約30%ほど減少していることが分かります。

GPUにおいてインスタンスされたデータを取り除く(Instance Mesh)という意味でGPUインスタンスカーリング(GPU Instance Culling)と呼ばれていますが、Xbox One XやPS4 Proのバージョン1.0から適用はされていましたが、最近でのFront-to-Back処理などの最適化により多くのパフォーマンス向上がなされています。PTSにおいては上記機能は一部が適用されており、最新の最適化バージョンは次のライブに適用される予定です。(Xbox One/Sモデルを含む)

これからもコンソールユーザーの皆さんにはより良いゲームパフォーマンスを提供できますように最善を尽くします!

また2週間後に新しいエピソードでお会いしましょう!

『PUBG』チーム一同。

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