大いなる挑戦へ――開発当初の動き

 2014年2月22日に発売された『龍が如く 維新!』は、シリーズ初となるPS3&PS4の同時並行開発でありながら、1080P/60fps動作を実現させたタイトル。このセッションは、その開発の時系列を追いながら、マルチプラットフォーム開発のノウハウや留意点が語られるという内容だ。講師を努めるのは、セガ第一CS研究開発部 リードプログラマーの厚孝氏。セッションはまず、厚氏の自己紹介からスタートした。
 「今回の『龍が如く 維新!』では、フレームワーク統括という肩書きで、要は技術系のなんでも屋です。ワークフローの構築、デバッグなど、あらゆることに口を出すような立場で、いろいろと取り仕切らせてもらいました」(厚氏)。

▲厚氏はPS3版『龍が如く』シリーズのライブラリ開発を手がけるほか、『バイナリードメイン』ではメインプログラムを担当。
▲開発の手順をスライドで順次紹介しながらセッションは進んだ。

 人気シリーズ『龍が如く』は、下に並べたように、PS3以降だけでも、2008年3月の『龍が如く 見参!』以来ほぼ毎年リリースされている。なお“※”の空欄は、同じチームが手がけた『バイナリードメイン』で、それを入れると、単一のチームで、非常に短いペースでタイトルをリリースし続けているという状況だ。

2008年3月 龍が如く 見参!
2009年2月 龍が如く3
2010年3月 龍が如く4 伝説を継ぐもの
2011年6月 龍が如く OF THE END

2012年12月 龍が如く5 夢、叶えし者
2014年2月 龍が如く 維新!

 今回ピックアップするのは、最新作『龍が如く 維新!』。厚氏によると、開発当初の技術的目標は、以下の4点だったという。

・PlayStation Vitaとの連携
・ミニゲームのネットッワークマルチプレイ対応
・街中の人の動きの向上
・可変フレームレート

 「PS4版の予定はありませんでしたし、これくらいの技術目標でした」と、当初を振り返る厚氏。だが2013年春、状況が変わってくる。PS3と内容は同じ内容でかまわないので、PS4でHD版とかは作れないかという打診があったのだ。とはいえそのときは、同時発売ではなく、PS4版は少し遅れてもいいのでという話だった。
 「PS4のハード自体、2013年の年末くらいの発売だろうとなんとなく思っていました。なので、『龍が如く 維新!』もその2、3月後に出るタイトルなんだろうな、という認識でしたね」と語る厚氏。まずは作れるかどうかを軽く検討しようと、CPUやメモリなどの機能をいろいろ比較してみた。ここで厚氏が最初に不安に感じたのは、64bitポインタという点だ。
 「これはけっこう大きな話でした。32bitポインタの環境になってから20年以上が経つので、意図せずに間違って使っているケースが埋もれていて、全部洗い切れるかが不安でした」(厚氏)。何よりもPS3版の開発が進行中で、1日にソースのリビジョンが100以上も変わっていたという状況。ただ、PC版が存在していたなど、幸いに有利な点もいくつかあった。以下にまとめておこう。

【不安点】
・64bitポインタ
・グラフィックスAPIの世代の違い
・PS3版自体が開発作業中
【有利な点】
・スペックはかなり余裕がある
・開発用PC版の存在
・マルチスレッドフレームワークが導入済み
・ソースコードのほとんどが内製

 「PC版が存在したので、それをもとに作れるのでは、という気持ちがありました。また内製コードで、全部自分たちでコントロールできることも利点でした」という厚氏。まずはPCの安定した環境で、とりあえず動くものを作ってしまおうという作業方針を固めた。

▲PS3とPS4の機能を比べたフリップ。

いよいよ作業がスタート……!

 実際に作業がスタートしたのは、2013年6月6日で、PC版(DX11/64bit)に移植作業という形で始まった。ちなみに作業開始時にどれくらいの規模があったかというと、ソースファイル数はアプリケーション層が5810ファイル、フレームワーク層が392ファイル、ライブラリ層が1377ファイル。トータルすると、コンパイラに通すファイルだけで7500以上という数だった。ここでふたつの懸念事項が出てきた。“ポインタサイズが32bitから64bitに”と、“DX9ベースからDX11ベースに”だ。
 「長年32bitでやっていますので、意図せずに32bitで扱っているケースがあるんです。7500ファイルを手で探すのは無理なので、コンパイラの警告レベルを最大にして、しらみつぶしにしました。これで9割9分は解決できましたが、本当に地道な作業でした」(厚氏)。またDX11ベースへの変更に関しては、“未対応になったフォーマット”、“ステート管理の違い”、“デイファードコンテキストの扱い”、“SM3.0からSM5.0へ”という4つの課題に分け、それぞれに対応していったそうだ。

 そして2013年7月18日。PS4版はPS3版の「ちょっとあと」で出す予定だったが、ここで「やはり同時に出してくれ」という話に変わることとなる。厚氏によると、さらにこの時点でスケジュールがひと月くらい早まったそうだ。そんな中で作業は続き、2013年7月25日にPC版が初めて起動。基本的なテストモードが動いただけだったが、「ちょっと個人的には感動しました」と厚氏。
 翌2013年7月26日からは、いよいよPS4版への移植作業がスタート。とはいっても、PC版で大半の問題は解決済みだったので、厚氏は“コンパイラの違い”と“PS4でのライブラリ動作の安定化”の2点に注意したという。
 「内製ライブラリはここで初めて実用的に使われ始めるので、ここで安定化させる必要がありました」(厚氏)。そうしてPS4版が初めて起動したのは、2013年8月7日のこと。まだテストステージにキャラクターが1体いるだけの初歩的な内容で、動作はしたもののパフォーマンスに問題があった。フレームレートは24~26fpsほど。描画のエラーも多く、前途多難かと思われたが、「ここから作業分担できるようになったんです。ここまでひとりでやってきましたが、ようやく増援してもらえることになりました」(厚氏)。体制も整い、ここから最適化を目指して作業が一気に加速することとなる。

タイトル発表で世間が沸き立つ中、最適化を目指しての作業が進む

 厚氏がまず試みたのは、パフォーマンスの分析だ。処理時間を示すバーを見ると、ひときわ高い負荷を示したのは“描画コマンド”で、なんとフレーム処理時間の80パーセント近くを占めていた。厚氏いわく「ほとんどここじゃん、という状態」で、PS3と比べると倍近くの時間がかかっていたという。そこで描画結合と、背景とスキンモデルの再構成という手段で対応してみたが、速度向上は5パーセント程度で、「焼け石に水でした」(厚氏)。ちなみにこのころ、2013年8月18日、キャラクター総選挙発表イベントに合わせる形で、『龍が如く 維新!』が初公開。世間に初めて『維新』の名が出た。この時点では、プラットフォームなどは非公開だった。

▲イベントの様子などもスライドで紹介された。

 パフォーマンスの計測がさらに進む中で、SDK(ソフト開発キット)のAPI層の負荷が非常に高いことが判明した。これはPCでたとえるとDirectXに当たる部分だ。厚氏によると、ゲームに合わせて最適化を進める中、途中で軽量版APIの評価リリースがあったので、それをもとに作業を進めていったとのこと。これで処理時間は、30パーセントくらい一気に縮むこととなった。
 「この時点で、ようやく30fpsで動くようになりました。見込みが立って、安心し出したころですね」と振り返る厚氏。ただ、まだPS3に負けている状況。CPUが遅いわけではないが、ハードウェアが複雑になり、1回の描画をするためにセットアップしなければならない手数が増えて、そのツケが回ってきていた状態だった。なお厚氏によると、現在のSDKではこうした部分は改善されているそうだ。

PS4版に求められるもの――60fpsへの厳しい道のり

 このころ世間では、2013年9月9日に“SCEJA Press Conference 2013”が開催。このカンファレンスで、『龍が如く 維新!』のPS3版とPS4版が正式発表された。これは内部的にも大きな影響があったと厚氏は語る。PS4版の存在が世の中に知れ渡ることになったが、話題に上がるのは「PS3とPS4で何が違うの?」という話だ。「ここで新たに、PS4になって具体的に何が良くなったの? という点を求められるようになります。とはいっても当初の方針から言って、根本的なデータ変更は無理ですので、ここで実現可能な要件として、プログラム作業のみでなんとか頑張ればできるだろうということで、“60fps”をこの時点で目指すことになりました」(厚氏)。このときに達成できていたフレームレートは、40fps弱。「いきなりゴールが遠のいたという感じでしたね」(厚氏)。

 一気にハードルが上がり、厚氏はこれまでの作業の延長では、とうてい不可能と判断。ここからさらに60パーセント縮めなければならないという、かなり絶望的な状況だった。厚氏はここでやり方を見直して、並列レンダリングを検討する。そのポイントとなった点は3つだ。“DX11ベースなのでライブラリ層は対応済み”、“ゲームの描画パス毎に分割”、そして“描画構造はなるべく変更しない”。そして並列レンダリングを実施したところ、なんと50パーセント程度の高速化に成功。かなり劇的な変化があった。ただ、それでもまだ60fpsには達していない。
 「かなり強い意志を持たないと、60fpsには届かないなと思いいました。厳しい状況ですね」(厚氏)。ここで、何かできることはないか探すことになるが、その結果、処理粒度に偏りがあることがわかったという。それはOPAQUE、つまり不透明の描画だった。厚氏はその結果を「描かれている中でいちばん多いのが、不透明のOPAQUEの描画だったので、当然といえば当然なんですよね」と振り返る。そこで今度は、OPAQUEのパスをさらに分割。ここでさらに20パーセント、処理時間が縮む。そしてとうとう、2013年11月7日に、60fpsを実現。通常状態で動かしているぶんには、処理落ちがないレベルまでようやくたどり着く。じつに長い道のりだった。

さらに続くチューニング――「メモリが余りすぎてヤバイ」!?

 ついに60fpsを達成した厚氏。だがまだまだ、チューニングは続く。通常状態でないときに処理が落ちることがあったのだ。そこで厚氏はまず、プレイ画面に経過時間をずっと流し続けて、チェックすることにしたそうだ。プレイをして「いま落ちたよ!」というところを探して、そこをつぶしていくという作戦だ。そうして調べていくと、原因のほとんどが、ファイル読み込み後の処理にあったことがわかったという。対応策として、ファイル読み込み後の処理を別のスレッドに逃がすことで、この処理落ち問題も解決できた。同時に、予想外のことが起きたと厚氏は語る。
 「ここまで進めてきて、じつは逆に、処理時間に余裕が出てきたんです」(厚氏)。そこで、ならば少しだけでも内容をよくしようということで、ほかの作業に移行。具体的には、街中の遠方にいるキャラクターなどに、最低レベルのモデルを使わないように処理を施した。PS3版では遠方のキャラはちょっとボケた感じだが、PS4版は解像度が高いこともあり、それでは違和感が出てしまうのだ。

 その作業を進める中、厚氏はここで、初めて残りメモリを調べたとのこと。その結果は、「余りすぎてヤバイ状態。怒られるんじゃないかというくらい余っていることがわかりまして、有効活用することにしました」(厚氏)。具体的な対応としては、モーションデータの圧縮率を下げる、一部のテクスチャをリサイズ前のものに差し替える、など。それでも余ったメモリは、すべてファイルキャッシュに回すことにしたそうだ。『龍が如く 維新!』はロード時間が短く極めて快適だが、その要因のひとつは、このファイルキャッシュの大メモリにあると言えるだろう。

 そして2014年2月22日、『龍が如く 維新!』は無事に発売。「厳しいスケジュールだったんですが、肩の荷が降りたという感じでした」と、厚氏は発売当時の心情を語る。ここまで開発の苦労を読んでいただいた方なら、その気持ちもわかるのではないだろうか。では最後に、開発を振り返っての厚氏のコメントを紹介して、リポートの締めくくりとしたい。
 「スケジュール的には無茶だったとはいえ、開発上の好条件に助けられました。PC版が存在したことが大きかったですし、またPS Vita版の対応がかなり役に立ちましたね。あとはなにより、優秀なチームスタッフの協力と、上の方々のご理解があったからこそ、最終的にこの結果に結びついたのだと思っています」(厚氏)。

▲厚氏は、数々の好条件に助けられながらの開発作業だった、と振り返った。