オススメ機能
Twitter
お気に入り
記事履歴
ランキング
4Gamer.net
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
QRコードでLINEの4Gamer
アカウントを友達登録すると
月〜金の週5回,21時に厳選
ニュースをお届けします!
※購読にはLINEアプリが必要です
特集記事一覧
注目のレビュー
注目のムービー
印刷2012/08/22 19:13

イベント

[CEDEC 2012]「GRAVITY DAZE」のグラフィックスエンジン詳説。いかにしてSCEはリッチな画面効果と30fps動作をVita上で両立させたのか

GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
 PlayStation Vita(以下,Vita)専用タイトル「GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動」(以下GRAVITY DAZE)は,Vitaの同時発売タイトルとして企画された――実際には約2か月遅れたが――いわゆる初期タイトルでありながら,VitaのGPUであるグラフィックスIPコア「PowerVR SGX543MP4+」をかなり極限に近いところまで活用しており,ゲーム性そのものもさることながら,グラフィックス面での評価も高い。

 CEDEC 2012の2日めとなる8月21日に実施されたセッション,その名もズバリ「バンドデシネの世界を掌に 『GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動』のグラフィックスエンジン解説」では,ソニー・コンピュータエンタテインメント(以下,SCE)のプログラマー自らがグラフィックスエンジンの技術解説を行ってくれたので,今回はその内容をレポートしたい。



オープンワールドを30fpsで描ききる

立役者となる,2段構えのカリング処理


GRAVITY DAZEの開発でリードプログラマーを務めた横川 裕氏(ソニー・コンピュータエンタテインメント JAPANスタジオ インターナルデベロップメント部 プログラマー)
 GRAVITY DAZEは,Vitaという携帯ゲーム機で取り扱うにはやや難度が高いと言えるレベルの,広大なゲーム空間を取り扱っている。

 具体的な数字を挙げてみると,GRAVITY DAZEのゲーム世界は垂直に±7km,水平に±1km。しかも主人公は周囲の重力を自在に操れるため,この世界を自由に飛び回り,好きな場所へ着地できる。地面に足を付けているだけの,従来的な三人称視点のゲームとは様相が異なるのだ。
 さらに,ゲーム世界に配置されるオブジェクトには破壊可能なモノが多い。すなわち動的オブジェクトが多いということである。

GRAVITY DAZEは広く立体的なオープンワールドを舞台としている
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

GRAVITY DAZEでシェーダ開発やプログラムの最適化に携わった宮前雄生氏(ソニー・コンピュータエンタテインメント JAPANスタジオ インターナルデベロップメント部 プログラマー)
 GPUは一般に,ピクセルの無用な上書き描画を抑制するメカニズムを持っているが,Vitaの採用するGPUコアであるPowerVR SGX543MP4+(≒PowerVR Series5)ではシェーダユニットの絶対数が少ないため,できる限りシェーダユニットを“無駄な処理”のために駆動させたくない。もっとはっきりいうと,頂点負荷を徹底的に削減したい。
 そこでGRAVITY DAZE開発チームは,3Dモデル単位のアグレッシブなカリングメカニズムを実装することを決断したのだという。

 ちなみに,今日(こんにち)的なゲームグラフィックス描画において,こうしたカリングに対する期待は非常に高くなっている。カリング専用ミドルウェア「Umbra」などが人気を博すほどである。

 さてGRAVITY DAZEでは,視点からの視界外(=視錐台外)に外れた3Dオブジェクトを切り捨てる「視錐台カリング」と,他者から遮蔽されて視点からは見えなくなっている3Dオブジェクトを切り捨てる「オクルージョンカリング」の2つを実装している。

GRAVITY DAZEでは2種類のカリングを実装している。なお,カリング(culling,間引き)というのは,簡単に言うと,描画するポリゴンの量を減らし,ひいては座標変換する頂点の数を減らす処理のこと
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

カリング処理は2段構え
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
 順に見ていこう。
 視錐台カリングで実装されているのは,3Dオブジェクトをちょうど覆う大きさの直方体「AABB」(Axis Aligned Bounding Box,アクシスアラインド・バウンディングボックス)が視錐台平面,すなわち画面平面の外にあったら,その3Dオブジェクトを描画対象から除外するというメカニズムである。

視錐台カリングの概要
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 一方,オクルージョンカリングのメカニズムは少々複雑だ。
 まず,背景などの静的3DモデルでZバッファレンダリングを行うのだが,このときにはオクルージョンカリング専用の低ポリゴンモデルを用いる。これは表示用の多ポリゴン3Dモデルだと描画負荷が高いためである。

GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
GRAVITY DAZEではGPUベースのオクルージョンカリングを採用
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
背景用にはオクルージョンカリング専用のモデルを用意。オクルージョンカリング用の深度バッファは256×384テクセルというサイズになる

 このあと「描画すべきか否か」を調べるためのオクルージョン判定を行うわけだが,ここでも表示用の多ポリゴン3Dモデルで判定するのではなく,AABB(≒直方体)でのテストとしている。

 そして,遮蔽されているか否かの実質的な判定処理は,「低ポリゴン遮蔽モデルで描画されたZバッファに対して,これから描画する3DモデルのAABBが描画できるかどうか」で行われる。VitaのGPUには,「全ピクセル中の何ピクセルをちゃんと描画できたか(=深度テストをパスできたか)」を返す「オクルージョンクエリ」(Occlusion Query)と呼ばれる可視判定機能があるので,この機能を利用して行うわけだ。

遮蔽テストにはオクルージョンクエリを利用
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 ここでの独特な技術ポイントを2つ紹介しておきたい。
 1つは,視点からの深度情報と,シャドウマップに相当する太陽光(=平行光源)からの深度情報の2つをレンダリングしている点である。
 「視点からの深度情報」は文字どおり,視点から見て遮蔽されているかどうかの判定のため,「太陽光からの深度情報」は,余計な影生成を行わないためにそれぞれ利用しているという。
 ただ,「ある3Dオブジェクトが第三者に遮蔽されていて,その影だけが視界に入ってくる」という場合に,どういったカリングが行われるのかの説明はなかった。こういった特殊な局面でどのようなカリングが行われるかは,残念ながらよく分からない。

 もう1つの技術ポイントは,1つのレンダーターゲットに視点からの遮蔽情報(192×128テクセル)と太陽光からの遮蔽情報(256×256テクセル)を生成している点だ。この理由は単純で,複数のレンダーターゲットを用いるとVitaのGPUには荷が重くなり,処理が極端に遅くなるためだ。この特性は,Vita開発者の間では共通認識となりつつある。

 SCEによれば,2段構えのカリングを行ったときとそうでないときで性能検証を行ったところ,カリングを行ったときは,行わなかったときと比べて2倍近い性能向上を実現できたとのこと。SCEは,「GRAVITY DAZEにおける30fps達成は,このオクルージョンカリングの効果が大きかった」と振り返っている。

GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
性能検証に用いたシーンがこちら
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
カリングなしだと描画対象は5800モデルに
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
視錐台カリングによって,2131モデルにまで描画対象を減少させることに成功
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
オクルージョンカリングをさらに組み入れ,367モデルにまで減少させられた

ここで示されているのは実行速度視点での検証結果。GRAVITY DAZEにおいて30fpsを達成できた立役者はこのオクルージョンカリングシステムだった!?
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動 GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動 GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動


限られたリソースで

リッチな影を出す方法


 GRAVITY DAZEでは,リアルタイム生成される影が非常にリッチで美しいが,携帯ゲーム機の(PCや据え置き機と比較すれば相対的に非力な)GPUで説得力のある影生成を行うために,SCEは実践的な工夫を盛り込んでいる。
 具体的には,影生成技法として「Light Space Perspective Shadow Maps」(ライトスペース・パースペクティブシャドウマップ,以下 LiSPSM)を採用しているとのことだ。

GRAVITY DAZEにおける影生成
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 LiSPSMはデプスシャドウ技法の進化形にあたり,現行世代の3Dゲームにおいて採用例が非常に多い。
 デプスシャドウ技法の「視点から近い位置の影が粗くなる」という弱点を克服した技法としては,「Perspective Shadow Maps」技法というのがあるのだが,これには視点から遠くの影が逆に粗くなるという弱点がある。そこで,遠近両方の影をバランスよく生成できるよう調整した座標系でシャドウマップを生成する技法として考案されたのがLiSPSM法だ。

 GRAVITY DAZEにおけるシャドウマップ解像度は1024×1024テクセル。生成した影に対しては近傍比率フィルタリング(Percentage Closer Filtering,PCF)を適用してソフトシャドウ表現を実現している。
 なお,このときの影生成負荷を低減すべく,巨大な背景物の影生成には影生成専用の低ポリゴンモデルを用意しているとのこと。一方,主要オブジェクトの影生成においては,オブジェクト表示用モデルをそのままシャドウマップ生成に流用しているという。

 一般的に,GRAVITY DAZEのようなオープンフィールド型のゲームでは,複数のシャドウマップを用意しておいて,視点から見て遠距離,中距離,近距離に割り当てるのが普通だ。しかし,VitaのGPUにはそこまでの性能もグラフィックスメモリ容量もないので,シャドウマップは1枚だけとなっている。
 しかし,それでは当然のことながら,生成される影の品質は低くなってしまう。そこで開発チームは,独特な工夫と妥協を盛り込むことにしたのだそうだ。

 まず,広範囲の影生成を最初からあきらめ,影生成範囲を視点からの一定範囲に限定して,遠距離に向かってフェードアウトさせる工夫を入れた。GRAVITY DAZEの場合,遠方にフォグがかかるのだが,このごまかし方はうまい。
 そして,さらにその「一定範囲」も固定ではなく,ある程度の適応型としている。具体的には,前フレームの深度を20×16テクセルの低解像度で取得し,CPUで最遠点を求め,そこまでを影領域に含めるようにしている。言い換えると,「影領域」以外の領域は影生成の処理対象から除外して速度を稼いでいるのだ。

1枚のシャドウマップで高品位な影生成を行うために,影領域の調節を行う
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 こうした工夫により,キャラクターが壁の近くにいたり,視線を下げて地面を見たりするとき時など,超近距離範囲しか影生成が行われないときなどは,その視界範囲に1024×1024テクセルのシャドウマップが適用されるのでリッチな影生成となるわけだ。一方,視線を上げて遠方までを見渡したときには,その視界範囲に適宜1024×1024テクセルのシャドウマップを割り当て,品質バランスを均一化した影生成が行われていくことになる。

領域調節あり(左)となし(右)の比較。影の見え方はこんなに変わる
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動 GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動


GRAVITY DAZEで採用される

独特なシェーディングモデルを総ざらい


 GRAVITY DAZEでは,キャラクターモデルに対して,アニメ風のシェーディングモデルを採用している。

 ここで用いられているのは,「ライティングの結果の暗部と中間階調部,明部の3段階に色分けして,間をグラデーションでつなぐ」という,一般的なセルシェーディングモデルだ。
 「キャラクターを浮き立たせたい」という演出意図から,ステンシルマスク(stencil mask)を生成して,後段のポストエフェクト処理の影響を受けないようにしているというのが,処理上のポイント。また,背景の影領域に飛び込んだキャラクターに対して,セルシェーディングの効果が落ちてしまったりすることがないよう,ライティングは平常どおり行ったうえでセルシェーディングしつつ,その後でトーンを落とすという独特な処理も行っているという。

キャラクター表現にはセルシェーディングを採用
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 また,これらの処理系は「キャラクターのセルフシャドウに対して適用されると不自然と感じられた」そうで,キャラクターモデルに対しては背景からの影投射とセルフシャドウ生成の重複生成をキャンセルしたとのこと。
 これは,キャラクターモデル自体の影生成にあたって,AABBの“天井”でシャドウマップを生成することで実現しているという。つまり,セルフシャドウは特定条件下でしか生成されないということでもある。

キャラクターが背景の影領域に入った場合の特別処理。セルフシャドウは一定条件下でキャンセルされる

 キャラクターモデルにはアニメ風の輪郭線が出るが,この輪郭生成には,昔ながらの膨張モデル技法が採用されている。この技法はプログラマブルシェーダ時代以前から利用されているもので,採用タイトルの例としては,トゥーンレンダリング採用のFPSとして話題を集めたUbisoft Entertainmentの「XIII」が挙げられよう。

 具体的には,3Dモデルの描画時に,当該3Dモデルの各頂点を,法線方向へと微妙に拡大。そのうえで,視点からその3Dモデルを見たときの裏側を黒(=輪郭色)で描画する。その後,3Dモデルを通常描画すれば,膨張させた分だけ輪郭線がはみ出て残るという仕掛けだ。
 なお,輪郭線は遠近にかかわらず一定の太さにしたかったそうで,GRAVITY DAZEでは画面座標系の調整を入れているとのこと。この手法だと,視線から見てモデル内部の輪郭線が出ないという弱点があるのだが,そうなっていないことからすると,ピクセルシェーダ側での適応型処理を併用しているのだと思われる。

輪郭生成にはクラシックな手法を採用。この方法だとジオメトリ負荷が高くなるはずなのだが……
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 そのほか変わったところでは,輪郭が不気味に摂動する「敵」の表現において,3Dモデルの各頂点を法線方向に変移させる手法が使われている点も挙げられよう。変位量はあらかじめ用意したノイズテクスチャを基に設定されており,テクスチャをサンプルするときにUVアニメーションを付加することで,不気味な,ぶよぶよと不規則に輪郭が揺れるさまを表現している。

 ちなみにこの処理は,頂点シェーダがテクスチャをサンプルする処理系「VTF」(Vertex Texture Fetching,頂点テクスチャリング)によるもの。余談だがVTFは,DirectX 9時代,AMD(当時はATI Technologies)がサポートに反対し,NVIDIAがサポートするという,PC用GPUメーカーの2強で採用するかどうかの意見が割れた機能なのだが,それが今や携帯ゲーム機で普通に利用できてしまうあたりからは,技術の進歩をしみじみと感じる。

敵の頂点アニメーションにはVTFを利用
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 もう1つ,疑似的な半透明表現である「ジェムシェーダ」も紹介しておきたい。
 これは,GRAVITY DAZEに登場するアイテム「ジェム」の材質表現を行うために作成された特殊シェーダで,不透明パスの描画によって半透明チックな表現を行うものとなっている。

 発想はシンプルで,前フレームの内容を保存し,ピクセル単位で法線ベクトルと視線ベクトルを吟味して,前フレームの内容をサンプルするだけだ。正確性は低いものの,法線マップにも配慮した形で反射鏡像や屈折透過のような表現が疑似的に行えるメリットは大きい。
 半透明の描画順序という議論以前の,大胆な疑似手法だが,正確性があまり求められない,小さなオブジェクトに対しては十分使えるテクニックだし,なにより半透明描画が苦手なPowerVRには威力絶大なテクニックと言っていいように思われる。

ジェムシェーダの概要。割り切った透明屈折表現や鏡像表現には有用なテクニックとなるか
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動


据え置き機品質を実現した

ポストエフェクトの秘密


GRAVITY DAZEで描画プログラムを担当した松田圭司氏(ソニー・コンピュータエンタテインメント ワールドワイドスタジオ JAPANスタジオ インターナルデベロップメント部 プログラマー)
 セッションでは,GRAVITY DAZEにおけるポストエフェクトについての解説も行われた。「携帯ゲーム機のゲームグラフィックスでポストエフェクトが行われるようになった」ということに驚く人も多いのではなかろうかと思うが,セッションで最初に紹介されたのは,背景物の輪郭線についてだ。

 ここでは,背景オブジェクトを描画するとき視線ベクトルと法線ベクトルとの内積を計算してαチャネルに格納しておき,これに対して(画像処理において古くから活用されるエッジ強調フィルタである)「Sobelフィルタ」をポストエフェクト時にかけるという処理がなされている。

画像処理で著名なSobelフィルタをポストエフェクト時にかけることで輪郭線を付加する。なお,これをキャラクターモデルに適用しなかった理由は明かされなかった
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
輪郭あり(左)となし(右)の違い
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動 GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 GRAVITY DAZEで印象的な空気遠近表現と空の表現にあたっては,シーンの描画後に得られる深度バッファを参照し,遠方に行けば行くほど「空を表現するグラデーション空テクスチャ」の支配率を上げ,至近距離であればあるほどフォグ色の支配率を上げるような計算で最終色を決定しているとのこと。また,レンダリング結果と合成するときには,同じく深度情報をもとに決定した「視点位置から遮蔽物までの距離に応じた空気濃度」(=空気層の厚さ)に配慮しているという。
 つまり,空気層の厚さが薄ければ薄いほど,この処理系で得られたポストエフェクトの効果は薄く,逆に厚ければ厚いほど効果は大きくなるわけだ。空には遮蔽物が当然のことながら何もないため,ポストエフェクトの影響が最大に近くなる。

空とフォグの表現を統合化してポストエフェクトで処理
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

 面白いのは,GRAVITY DAZEだと,フォグの中に埋もれた背景に対しても輪郭線だけは出していること。もちろん,この部分ではマテリアル表現のシェーディングは行われていない。

フォグの中に埋もれた背景物の輪郭線だけは浮かび上がるようにするのがGRAVITY DAZEの特徴。なお私見だが,この処理は,GRAVITY DAZEのビジュアル面における独特な味わいを醸し出す一要素になっていると思う
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
フォグあり(左)となし(右)の比較。輪郭線に注目してほしい
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動 GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

光の溢れ出し表現には川瀬式ブルームを採用
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動
 印象的で柔らかい光のブルーム表現もポストエフェクトによるものだ。
 これは業界的に広く活用されている,川瀬正樹氏(現シリコンスタジオ)のブルームによるもので,一言でまとめると,「レンダリング結果を縮小した物に対し,異なるボカシ径のボカしフィルタを繰り返し適用して,それぞれの途中結果をも合わせて合成していく」という手法。広範囲のボケとボケの中心にある鮮鋭度を両立させるテクニックだ。
 Vitaならではのテクニックとしては,単一のレンダーターゲットに対して,ビューポートを工夫することで,異なる領域に結果を出力している点が挙げられる。これによって「レンダーターゲットの切り換えが遅い」というVita(のGPU)の弱点を克服しているわけである。

ブルームあり(左)となし(右)の違い
GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動 GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動


GRAVITY DAZEはVitaグラフィックスの

ベンチマーク的存在か


 今回のセッションでは,GRAVITY DAZEでPlayStation 3などの現行型据え置きゲーム機にかなり近いグラフィックス表現を実現できているという事実の再確認と,それを実現するためにVitaのGPUの短所をうまく隠蔽する,ファーストパーティらしいテクニックが開示されていたように思う。

 GRAVITY DAZEのグラフィックスタッチは特徴が非常に濃いので,そのまま採用するわけにはいかないかもしれないが,そこで用いられた技術の数々は「ここまでやってもVitaで30fpsというフレームレートを維持できるのだ」という,よい指標を開発者に示してくれたのではなかろうか。

「GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動」公式Webサイト

CEDEC 2012公式Webサイト

  • 関連タイトル:

    GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動

  • 関連タイトル:

    PowerVR

  • この記事のURL:
line
4Gamer.net最新情報
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:06月27日〜06月28日
タイトル評価ランキング
88
82
ARMS (Nintendo Switch)
82
NieR:Automata (PS4)
75
鉄拳7 (PS4)
2016年12月〜2017年06月