イベント
PS Vitaのローンチタイトル「パワースマッシュ 4」が60fpsを達成できたワケ
グラフィックスの品質を重視しフル解像度60fpsにこだわったパワースマッシュ 4
ご存じの方も多いだろうが,セガの「パワースマッシュ」シリーズはドリームキャストでスタートし,PlayStation 3など数多くのゲーム機向けにリリースされてきた人気のテニスゲームである。その最新版となる「パワースマッシュ 4」は,PlayStation 3とXbox 360版が先行してリリースされており,PS Vita版は同機のローンチタイトルの一つとなった。
セッションは,CPUの最適化部分をセガ第二研究開発本部の平山 尚氏が,GPUの最適化部分を同じく第二研究開発本部の鈴木 宏氏が説明するという順で行われた。
通常,ローンチタイトルは開発期間も短いことが多いのだが,平山氏によるとパワースマッシュ 4のPS Vita版の開発については,比較的,時間に余裕があったそうだ。開発はPS3版のベタ移植からスタートし,中断を挟みつつ,わずか5か月でゲームをPS Vita上で動作させることができたという。しかし,その時点では「フレームレートは一桁しかなかった」(平山氏)ほか,ゲームを少し動かすとメモリが溢れてゲームが停止する状態。そのため,ここからの作業に,さらに数か月を要することになる。
というように,移植直後は,厳しい状態ではあるものの,PS Vitaで「据え置きと同じシェーダが動く,そしてメモリは十分に多い」ということが分かったと平山氏は言う。メモリ溢れで停止していたのは,テクスチャ圧縮に対応していないベタ移植だったためで,想定内の事態だったようだ。「テクスチャ周りを書き直し,メモリアロケーションを見直したら問題なく動くようになった」とのこと。
この時点では,解像度を落としてもフレームレートがあまり上がらなかったため,足を引っ張っているのはCPUだと判断。GPUに余力がありそうなことと,PS Vitaの魅力は,有機ELディスプレイによる画像の美しさにあるという理由で,フル解像度かつ4×MSAAによる高品質なグラフィックスを堅持するという目標を設定したという。
一方,フレームレートに関しては,当初から60fpsを目指していたわけではなかったそうだ。携帯機ということもあって,どこまでいけるか不明だったため可変フレームレート制を導入したという。
平山氏が説明したCPU側の最適化の道筋は,「重くなっているところに手を加えていく」という,どちらかというとad-hoc(場当たり的)な対応という印象だった。例えば,据え置き機ではCPUでスキニングを行っていたものを,GPU側に移す。また,布や髪など動くものは減らして対応,という具合。さらに,スタジアムなど大きなオブジェクトを複数に分割し,カリング(表示されない部分を事前に処理から外すこと)してDrawコールを減らすといった,やや力技的な最適化を行っていったようだ。ゲームの高速化では,まずDrawコール数を減らすというのが,いつの時代でも基本的な手法となっている。
PS3からの移植ということで,コードの書き方にも問題はあったようだ。平山氏が挙げたのは,新たなオブジェクト(メモリ領域)を確保する「new」の問題。これはC++とSTL(標準テンプレートライブラリ)を知っている方ならおおよそ承知しているだろうが,例えば,STLの文字列クラスでは裏でnewとdeleteが大量にコールされている。また,オブジェクト指向言語では,オブジェクトの生成と消去は常に負荷が高い処理として語られる類の処理である。
据え置き機ではCPUに余力があったので,オブジェクト指向を意識した綺麗なコードを書いてもさほど問題にはならなかったのだが,携帯機には重い処理になるので,オブジェクトの生成処理を削減する必要があったとのこと。つまりSTL禁止である。
PS Vitaは4コアのCPUを搭載している点も特徴であり,もちろんマルチスレッド化も行っているという。
パワースマッシュに代表されるような,シリーズが長く続いているゲームでは,シングルスレッドで作成されているものが多い。パワースマッシュも「マルチプラットフォームのタイトルなので,CPUのコア数に頼れない」(平山氏)ことや「もともとはドリームキャストで動いていたタイトルで,ロジックの部分はあまり重くなかった」(平山氏)こともあり,さほど積極的にはマルチスレッド化されていなかったという。こうしたゲームがPS Vitaに移植されるケースは今後も多いと思うが,PS Vitaではマルチスレッド化が一つの課題になりそうな気配だ。
CPUがボトルネックになる状況ではマルチコアを活用することは急務といえ,PS Vita版では,2コアをスレッドプール管理専用に割り当ててマルチスレッド化を計ったとのこと。
もう一つ興味深かったのが,GPUにからむCPU側の処理の問題だ。ゲームの描画ではGPUとCPUは同期を取る必要がある。頂点バッファでの処理をGPU側が処理し終わったら,CPUから次のフレームの頂点を書き込むという具合だ。
PS VitaではGPUとしてタイルレンダリング式のPowerVRを採用しているため,この同期の部分が従来の据え置き機とはやや異なり,ここをPowerVRに最適化しないと極端にパフォーマンスが低下するという。
具体的には,タイルベースのGPUでは「頂点を処理し終わらないとピクセルシェーダが動き出さない」(平山氏)という仕様のため,頂点バッファをダブルバッファ式にする必要があったとのこと。現フレームの頂点バッファの処理が終わったら,前のフレームで処理した頂点バッファの描画を開始するといった感じの処理になる。
また,GPUがテクスチャを使い終わるのは2フレーム後になるため,原則としてCPUからのテクスチャの書き換えは行わない仕様にしたという。テクスチャの書き換えが必要なのはムービー再生くらいに限られているが,PS Vita版ではROM容量の関係でムービーは省略されたためとくに問題はなかったと説明していた。
このようなPowerVRへの対応も,先のマルチスレッド化と並ぶPS Vitaの一般的課題になりそうだ。
GPUではポストエフェクトを軽くすることで60fpsを達成
平山氏の説明にあったように,PS Vita版のパワースマッシュ 4では可変フレームレートを採用している。具体的にはエフェクトが多用される演出シーンでは60fpsを割り込むことを許容するが,ゲーム中は60fpsを維持するという方針で実装されたそうだ。
そのために,60fpsが必要なゲーム中は,ポストエフェクトをパスすることで描画負荷を下げたという。ポストエフェクトでは,ブルーム(明るいところがにじむ)と被写体深度調整を行っているそうだが,ゲーム中はそのようなエフェクトを使わないグラフィックスになるわけだ。
さらに,パワースマッシュ4では,セルフシャドウ(シャドウマップ)を含むシャドウ処理が実現されている。しかし,すべてのシーンでシャドウマップを使うと重くなるので,選手が選手に落とす影,背景が選手に落とす影,という具合にシャドウの種類を区分けして,それぞれに対して最適な処理を行うことで,すべてのシーンで自然なシャドウが表現されるよう工夫したと鈴木氏は説明していた。
例えば,動かない背景が動く選手に落とす影は,背景の影を切り出したモデルを用意しておいてシャドウマップに合成しているそうだ。動かないオブジェクトなので,単純に合成するだけで影が作れるわけである。また,選手がほかのオブジェクトに落とす影は,コートに対してのみなので,単純な平面への影処理で済むという。
講演前半の平山氏からも「重い」と指摘されていたユーザーインタフェース部分は,GPU側で最適化が行われている。PS Vita版のユーザーインタフェースでは,得点部分をポリゴン化するなど,表示方法そのものにも手が加え,さらにGPUの負荷を減らすような工夫が盛り込まれているそうだ。
そのほか,もちろん頂点数を減らすといった一般的な負荷軽減策も併用し,ゲーム中に関しては60fpsの達成が可能になったと鈴木氏は説明していた。
セッションの最後に平山氏は,PS Vitaについて「SDKがしっかりしているのでベタ移植は難しくないが,そのままでは使えるものにはならない」とアドバイス。しかし,平山氏自身,今回の60fpsの達成に「なにが効いたのか正直分からない」と語っていた。
最適化は,パフォーマンス解析を行って,ボトルネックになっている部分を見つけ,そこを改善していくという工程で行われるのが一般的なのだが,開発ノウハウがないハードということもあって,原因を調査するコストをかけるよりも,怪しそうなところは片端から改善していくほうがよいという判断で各部分を同時並行で進めた結果,いつ目標値を達成したのかもよく分からないという状況になってしまったようだ。
開発ノウハウのないローンチタイトルということもあって,かなり特殊な開発体制が取られていたようだが,それでもなんとか目指すパフォーマンスが達成できてしまうあたりが,PS Vitaのパフォーマンスの高さを示していると平山氏はまとめていた。
「パワースマッシュ4」公式サイト
- 関連タイトル:
パワースマッシュ4
- この記事のURL:
(C)SEGA. All trademarks used herein are under license from their respective owners.