3Dゲームファンのためのグラフィックス講座
西川善司の3Dゲームファンのための「GRAVITY DAZE」グラフィックス講座(前編)
PS Vitaで4倍速半透明描画を行なう秘策と300万ポリゴンのシーンをレンダリングするための裏技とは?
(2013/2/12 00:00)
2012年に発売されたPlayStation Vita(以下、PS Vita)用タイトルの中でもっとも人気の高かったタイトルの1つに「GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動」(以下、「GRAVITY DAZE」)が挙げられる。
「PlayStation Awards 2012」においてはユーザーチョイス賞とPlayStation Vita特別賞をダブル受賞し、「日本ゲーム大賞2012」においては見事、大賞を受賞した。筆者も、発売直後から、ゲーム内容的にもグラフィックス技術的にも最も優れた作品であると思っていたのであるが、取材するタイミングがなかなか折り合わず、ついにこのタイミングとなってしまった次第である。
2012年を代表する作品であると同時に、携帯ゲーム機向けのゲームグラフィックスとしては、ある種1つの完成形と感じたため、発売からだいぶ経ってしまったが、このタイミングではあるが、取り上げることにした。
【著者近影】
「GRAVITY DAZE」のグラフィックススペック
「GRAVITY DAZE」は、オープンワールドタイプのアクションゲームで、主人公キトゥンは周囲の重力を操作して、主人公の周囲の天地を自在に変化させることができる。舞台は時代不詳の架空の高層都市で、携帯機向けのゲームグラフィックスとしては背景グラフィックスが非常に高密度となっている。
また、グラフィックスタッチは、近年のスタンダードタッチのようなゲームらしいリアル表現(あえて命名するならばゲームリアル系)ではなく、やや絵画よりのテイストを採用している。
山口由晃氏:「GRAVITY DAZE」のグラフィックスは、一般的なトゥーンシェーディングとは違った路線を目指しました。具体的にはフレンチ・コミック「バンデシネ」のアートスタイルを目指して制作されています。
「GRAVITY DAZE」はアーティスティックな視点からも、そして技術的視点からも、見るべきポイントの多い作品だが、まずは基本事項から見ていきたいと思う。
「GRAVITY DAZE」のレンダリングターゲットは、PS Vitaの有機ELディスプレイの960×544ドット解像度ではなく、同期搭載GPUのPowerVR SGX543MP4+内蔵のスケーリング機能がサポートする1段低い解像度の720×408ドットとなっている。
レンダーターゲットのフォーマットはαRGBが各16ビット浮動小数点(FP16)。ついに携帯ゲーム機でFP16バッファが使われるようになったとは感慨深い。アンチエイリアスは掛けていない。フレームレートは可変フレームレート設計で、ゲーム中全シーンにおいてほぼ毎秒30コマ(30fps)が維持できるようにチューニングされている。
一段階低い解像度にしたのはピクセルシェーダ負荷の低減とリッチなビジュアルを両立するためのバランス裁量と目される。アンチエイリアス無しの理由もほぼ同じだろう。ゲームプレイ対象となる街中のシーンは、およそポリゴン数にして300万。携帯ゲーム機向けとしては破格のジオメトリ量だ。
この中にプレーヤーキャラクターを置いて、プレーヤー視点で描かれる1フレームあたりのポリゴン数はカリング後で約30万ポリゴン程度。この値の規模イメージは、PS2向けタイトルとPS3向けタイトルの中間ぐらいといったところか。動的影生成用の低ポリゴンモデルを用いてシャドウマップ生成を行なっているが、このジオメトリ量は約10万ポリゴン程度。
後述するオクルージョンカリング用にも別の低ポリゴンモデルを使用してレンダリングを行なっているが、これが数万ポリゴン程度だと説明されている。まとめると可視ポリゴン、不可視ポリゴンの総レンダリングポリゴン数は40数万ポリゴンといったところだ。携帯ゲーム機向けゲームタイトルもついにこのジオメトリ規模になってきたのだ。
主人公キトゥンのポリゴン数は約7,500。視点からの遠近に応じて3段階のLOD(Level of Detail)制御が介入する設計になっており、遠くなるにつれて約4,500ポリゴン、約800ポリゴンと低ポリゴンモデルに置き換えられていく。
好敵手キャラクターのクロウも大体同程度。一方、脇役キャラクター達は大部ポリゴン数は少なく約1,500程度。LODも2段階程度か、あるいはナシの場合もある。
1シーンあたりでロードされる総テクスチャ容量は約60MB。テクスチャ圧縮メソッドは法線マップに対してのみPVRTCを採用し、それ以外のテクスチャに対してはDXTCを採用している。
テクスチャの種類としては、背景オブジェクトに対しては法線マップ、アルベド(カラーマップ)、スペキュラマップなどが用意されている。キャラクターに対しては特別なものが用意される場合があり、その中の1つにリフレクションマップがある。
松田圭司氏:リフレクションマップは、キャラクターの眼球を始めとして、映り込み表現に用いられるテクスチャです。とはいっても、視点位置とキャラクターの空間位置に連動してスクロールさせて適用させるだけのフェイク技法です。アーティストからより使いやすいものにしてほしいと言われてこのような仕様にしました。
「GRAVITY DAZE」チームが編み出したPS Vita専用の半透明描画倍速化テクニックとは?
PS Vitaに搭載されているGPUコアのPowerVR SGX543MP4+は、PowerVR系であるため半透明描画が不得意だと言われる。筆者もPS Vitaリリース前から、そういった開発者達からの半透明描画時のパフォーマンスに対する悲痛な叫びを耳にしていたが、「GRAVITY DAZE」は、そんな負い目を感じさせない、かなり贅沢に半透明エフェクトを使っている印象がある。しかも、そういったエフェクトリッチなシーンでも、30fpsというフレームレートはちゃんと維持できている。
ここにはなにか特殊なテクニックが使われているのだろうか。あるいはいわゆる縮小バッファ技法のようなものを活用しているのだろうか。
横川裕氏:縮小バッファ技法の一種と言えなくもないですが、同じレンダーターゲットを普段は普段は等倍で描きだしているところを、半透明エフェクトを描き出すときにPowerVRの機能をハック的な手法を使って縦横2倍(面積比4倍)扱いにして描き出すというテクニックを使ってます。GPUのMSAA(Multi Sample Anti Aliasing)のパイプラインをハックして応用しているんです。こんな使い方は他ではあまりやっていないかもしれません(笑)。
これは補足解説が必要だろう。「GRAVITY DAZE」では、MSAAのアンチエイリアスは使われていない。つまり、MSAAオフで描画されている。しかし、半透明描画を多用するときには、今、描き出し先に設定されているレンダーターゲットを4×MSAA用のレンダーターゲットと一時的に見なすようにハックするのだ。
この状態で縦横半分の解像度の半透明エフェクトを描き出すと、半透明エフェクトの1ピクセルが、このレンダーターゲットの2×2ピクセル領域に描き出される。つまり、ピクセルシェーダからの出力が、サブピクセル解像度分にコピーされてレンダーターゲットに描き出されるMSAA適用時の特有のメカニズムを応用しているのだ。
このテクニックを用いると、エフェクトグラフィックスの解像度は平常時の縦横半分(面積比1/4)に落ちるが、描き込み先対象は平常時と変わらないので、疑似的にフィルレートを向上できるわけだ。開発チームによれば、このテクニックを用いる前と用いたあとでは、実測レベルでパフォーマンスが負荷が高い状態で2倍程度向上できたとのことだ。
宮前雄生氏:作中では、開発段階で半透明エフェクト型要されて30fps維持がきつくなるような局面で、この描画手法を活用するように調整されています。アーティスト達には、半透明をたくさん使うと、若干描画品質が下がる、この手法での描き出しになるよと説明しました。ただ、実際問題、半透明描画って解像度が落ちてもそれほど品質劣化が目立たないので、効果は大きかったと自負しています。
確かに平常手法による描画結果とハック手法による描画結果を見比べると、半透明エフェクトの合成輪郭部分にエリアシングの差異が認められるが、映像として動いていればそれほど気になることはない。ハードの限界を使い倒すゲームプログラムらしいテクニックだといえよう。