PS4: P4版のThe Crewは、どのようにしてPS4に移植されたか(3) | みらいマニアックス !

PS4: P4版のThe Crewは、どのようにしてPS4に移植されたか(3)




ゲームのもう一つの重要な分野はプログラマブル・ピクセルシェーダだ。Reflectionsの経験によれば、PSのシェーダ言語(PSSL)はDirectX 11のHLSL規格に非常に類似している。違いといえばほんの些細なもので、前処理マクロや、あるいはもっと複雑な違いについてはO'Connor氏が「正規表現検索と置換」とよぶ作業によって、ほとんどを取り除くことができるほどのものだ。

UBISoftのE3のイベントではThe CrewのPC版は30fpsで動作していた。だがPS4のコードベースの最初の動作するコンパイルは10fps付近で動作しており、非常にホットだとは言えないものだった。Chris Jenner氏は、Razerとして知られるソニーの開発ツールについて語った。

「PS4のSDKには素晴らしいCPUプロファイリングツールが付属しています。それを開発のごく初期に用いたのですが、私たちのコードでハイレベルのボトルネックがどこにあるのかを発見するのに大変役立ちました。

「The Crewは2つのCPUスレッドを持つように設計されています。そのうちの一つはシミュレーションを実行し、もう一つはシーンを描画し、それらが並列で実行されているのです。ボトルネックを分析し、これらのスレッドから他のCPUコアに処理を吐き出したことで、大変多くの処理を平行して実行できるようになりました。

驚くことではないのだろうが、ボトルネックがあることが分かったのはレンダリングスレッドだった。特にプログラマブル・ピクセルシェーダを設定するという点で、「定数」が大きな問題となった。定数とはシェーダに供給されるデータだが、頂点やテクスチャではない。 オブジェクトの位置や太陽光の色、骨格アニメーション化されたオブジェクト内の骨の正確な位置といった要素のデータだ。シェーダはこれらの定数を数十から数百も必要とする。現代のゲームのシェーダ処理量を考えると、これは顕著なボトルネックになりうるのだ。

「この問題を解決するのに、私たちはいくつかの解決策を持っていました。そのうちの一つはレンダリングスレッドに定数を設定する時間を短縮することでした。もう一つは、コマンドバッファ生成をマルチスレッド化することで、各コアでのロードバランスを平準化することでした。

Jenner氏はまた、それがPS3よりもずっと簡単であることを明らかにした。CPUコアが全てメインメモリへのアクセス権を持っているという事実によるものだ。(訳注:PS3のCell b.e.の各コアにあたるSPUは、それぞれ固有のメモリをもつが、メインメモリへ直接アクセスすることはできないため)

「私たちが他に行ったのは、定数の設定を見直すことです。GNMX(ソニーのグラフィックス・エンジン)は定数アップデート・エンジンと呼ばれるコンポーネントを持っており、GPUに送る必要のあるすべての定数の設定を行います。ですがこれは私たちが望むものよりもの遅かったのです。このコンポーネントはCPUの時間を多く取っていました。

「現在はソニーはこれを改善してくれましたので、SDKの後のリリースにはもっと速いバージョンのCUEがあります。ですが私たちはこれを自分自身で作る事に決めました。なぜなら、私たちは自分たちのエンジンがどうやってデータにアクセスするのか、定数がいつ更新される必要があるのかについて良く知っていましたから。一般的な実装よりもです…。そして私たちは、当時ソニーから提供されていたコンポーネントよりも早くすることができました。


[1] [2] [3] [4]



NS: Eurogamer  How The Crew was ported to PlayStation 4