【Watch記事検索】
最新ニュース
【11月30日】
【11月29日】
【11月28日】
【11月27日】
【11月26日】

西川善司の3Dゲームファンのための「METAL GEAR SOLID 4」グラフィックス講座
職人芸的最適化術によって生まれたPS3最高峰グラフィックスの秘密に迫る(後編)

10月24日 収録

会場:KONAMI東京本社

 2008年最大のPS3キラーソフトとなった「METAL GEAR SOLID 4(MGS4)」。そのグラフィックスの秘密に迫る3Dグラフィックス講座「MGS4」編の後編は、影生成の話や特殊エフェクト、シェーダーの話題を取り上げていく。また、「PS3専用」として開発されただけに気になる、「MGS4」におけるCELLプロセッサの活用状況についても話を伺った。


■ 「MGS4」における影生成は?

 今世代のゲームらしく「MGS4」は、歴代の「MGS」シリーズと比較すると高度な動的影生成メソッドを実装している。影生成技法としてはデプスシャドウ技法(シャドウマップ技法)の改良形を採用する。

 デプスシャドウ技法は、光源位置から見たシーンの深度情報(奥行き情報)をテクスチャにレンダリングしてシャドウマップを生成し、最終的なシーンのレンダリングはこのシャドウマップを参照して、ピクセル単位で第3者に遮蔽されているか(影になる)、されていないか(影にならない)を判断しながら実行していく。

 この技法は発想としてわかりやすいのだが、シャドウマップ解像度に影の品質が強く依存してしまうため、近年では各所で考案された様々な改良型技法を使うことが一般化している。

 「MGS4」では、シャドウマップの生成においては、シャドウマトリックスを歪めるタイプの独自技法を実装している。「MGS4」のものとは違うが、こうしたタイプの改良型技法としては「Perspective Shadow Maps」(略称PSM)などがある。なおPSMについては、本連載「3DMark05」編を参考にして欲しい。

高部氏「シャドウマップ解像度は1,024×2,048テクセルです。この解像度で、PSMのような歪ませるタイプのシャドウマップでも、視点と光源の位置関係がある一定の角度を超えると極端に品質が落ちる特性があります。そこで『MGS4』では、こういう位置関係に近づいたときには平行投影の普通のシャドウマップ技法に切り換える工夫を導入しています」

 「MGS4」では、「ロストプラネット」で行なっていたような、複数のシャドウマップをカスケード生成するような拡張は実装されていない。そのため先天的に影にジャギーが出る可能性があるが、「MGS4」では4点近傍比率フィルタリング(PCF:Percentage Closer Filtering)を適用して簡易的ではあるが影エッジをぼかすソフトシャドウ処理を入れている。

 それでも、50mを超えた先の影へのジャギー発生の可能性を完全に回避できなかったため、ステージのマップデザインを悟られにくい構造に工夫している。この他、GPU負荷低減のために影生成対象を選択式にしたり、屋内シーンではテクスチャとして(ライトマップ)静的な影を適用しているところもある。

シーンに投射される動的生成された影はデプスシャドウ技法の独自改良形によるもの 屋内での焼き込みライトマップ影


■ 簡易的なプロシージャル技法を組み込んだ「MGS4」のエフェクトシェーダー

 「MGS4」では、様々なシェーダー・エフェクトが実装されている。その中から代表的なものをかいつまんで紹介していこう。筆者が思うには「MGS4」のシェーダー・エフェクトは、リアルタイム性とパフォーマンスの高さを維持するための潔い割り切りと、動的な表現をそつなくこなせるクレバーな実装になっている。

 まずは、血、濡れ、焦げ(以下、これらを“汚れ”と総称する)の表現のエフェクトについて。

 ゲーム中、被弾したキャラクタの衣服に流血した血が染み出てきたり、あるいは水につかったキャラクタの衣服が濡れて黒ずんだりする表現があるが、ああしたエフェクトを司るシェーダーが「MGS4」にはシステマティックに実装されている。ちなみに、血についてはPS2の「MGS2」から、各種汚れについてはPS2の「MGS3」から実装されていて、こうした汚れ表現は「MGS2」、「MGS3」においては、頂点カラーの変更で表現していた。「MGS4」においても、この頂点カラーで実現するという実装方針は変わっていない。

 汚れテクスチャの浮き出方を汚れ具合に応じてシェーダーで浮き出させる実装や、汚しの半透明被せモデル(シェルポリゴン)を重ねる手法もテストしたそうだが、採用は見送られている。

 テクスチャの実装にしなかったのは、既に各シェーダーが優先度の高いテクスチャを多く参照しており、これ以上テクスチャ参照を増やすとパフォーマンス面に問題が出る可能性があったため。半透明汚しモデルにしなかったのは、描画負荷増加を嫌ったことと、半透明描画において乗算ブレンディングと相性の悪いブレンドバッファ技法を採用していたため(前述したようにブレンドバッファ技法では、仕様の関係上、加算ブレンディングとαブレンディングのみをサポートしている、汚れはデカールテクスチャに対して乗算ブレンディングをした方が自然に見える)。

血の汚れがだんだんと濃くなる表現は、“汚れ”シェーダーの一機能。頂点単位の制御だが、「MGS4」のキャラクタモデルはそもそもポリゴン数が多いので、“汚れ”を表現するには十分な分解能

 とはいえ、汚れの適用先のキャラクタモデルは5,000から10,000ポリゴンに及ぶため、頂点粒度は相当細かい。なので、頂点単位のエフェクトと言っても表現精度上全く問題ないという印象が持たれる。

高部氏「汚れ具合の更新先が5,000から10,000ポリゴンに及ぶモデルであるため処理負荷はそれなりに高いわけですが、これについてはSPEを用いています。PS3の場合はSPEがあるので、救われました」

 実際の実装だが、3Dモデル側の頂点カラーのRGB成分(3要素のパラメータ格納スペースとして利用)に血、濡れ、焦げの具合(汚れの濃さ)を書き込む。汚れ具合が変わったときには、ここをSPEで更新することで、汚れ具合を動的に変更可能としている。濡れ具合については、時間の経過と共に乾く表現が成されているが、これはこの濡れ具合を時間と共に低減更新させることで実現している。

びしょ濡れ状態から徐々に乾いていく様子。“濡れ”も汚れシェーダーの一機能

実際に水に入り、それが乾くまでのムービー

 実際の描画では、この頂点カラーが補間された値がピクセルシェーダーに受け渡され、その汚れごとの固有のカラーを陰影処理結果のピクセルカラーにブレンドさせている。具体的には「血」ならば血の汚れ具合が濃ければ濃いほど赤く、「濡れ」ならばより濡れているほど黒っぽくしている。主人公スネークの着ている特殊樹脂製のスニーキングスーツについては、濡れているときにはテカる質感を与えるためにスペキュラ強度を上げるスペシャルな調整も入っているとのこと。

乾いているときのスニーキングスーツ 濡れているときのスニーキングスーツ。よりテカっている。こちらはスネーク専用のスペシャルな“汚れ”シェーダーの一機能
乾いているスーツ姿のスネーク(参考) びしょ濡れ状態のスネーク(参考)

 ところで、いくら頂点カラーに実装してテクスチャ参照はないとはいえ、陰影処理計算負荷は決して低くはない。そこで最適術として、全く「汚れ」のない状態の時には「汚れ適用シェーダーなし」のシェーダーに切り換えているとのこと。

焦げる前 焦げた後。焦げ表現も“汚れ”シェーダーの機能だ

吹雪の風向きに向いている面から積もっていく
 この汚れエフェクトシェーダーを、拡張したような手法で実現しているのが「積雪表現」だ。ゲーム中、雪原のシーンで吹雪の中で活動するキャラクタ達の衣服に雪が積もっていく表現があるが、こうした汚れを実現するシェーダーが「積雪シェーダー」だ。こちらも、いうなれば簡易的なプロシージャル的発想を実装したものになっている。

 まず「MGS4」の雪は、「吹雪の風向きに向いている面から積もっていく」ものとしている。一定時間、そのポリゴンが吹雪方向に向いていると積雪量が増え、吹雪に向いていないところは移動しているうちに(時間経過と共に)溶解していく。また、屈んだり横たわったりして積もっている雪に埋もれた部位についても雪が付着する仕組みを取り入れている。

 これは3Dモデルに対し、氷結テクスチャ(後述)を貼り付けるための被せモデル(シェルポリゴン)を一層分用意し、これに対して積雪シェーダーを適用している。イメージとしては一層だけのファーシェーダーのようなものを連想するとわかりやすいかもしれない。なお、前出の汚れエフェクトシェーダーではボツとした被せモデル案だが、積雪シェーダーの実装においては採用したということになる。付着させる氷の半透明描画が、乗算ブレンディングではなく加算ブレンドで済むため、これがブレンドバッファ法の制限に引っかからなかったというのが採用の主な理由のようだ。

「雪が多い=白」、「雪が少ない=黒」という感じで積雪量を濃淡で表した「氷結テクスチャ」
完全に氷結してしまった様子
 実際の積雪シェーダーの制御の仕組みだが、シンプルながらもクレバーな実装になっている。まず、被せモデルの各頂点の頂点α部に更新された雪の積雪量パラメータを書き込んでおき、レンダリング時にはこれが補間されてピクセルシェーダーに受け渡される。

 決めうちではあるが、「雪が多い=白」、「雪が少ない=黒」という感じで積雪量を濃淡で表した「氷結テクスチャ」を用意しておき、ピクセルシェーダーは受け取った頂点αと、この氷結テクスチャから取り出したテクセルの値を比較する。受け取っている頂点αには積もらせたい積雪量が格納されているので、取り出した氷結テクセルがこの値に見合う場合は実際に描画され、そうでない場合は描かれないようにする。

 なお氷結テクスチャには、対応する法線マップも持たされており、実際の陰影処理時はバンプマッピング的なピクセル陰影処理も成される。このため、微細な凹凸感のある雪が付着している表現ができている。

 氷結テクスチャは事前生成した固定パターンとなるが、その氷結の広がり方は頂点単位の積雪量によって変化し、風向きや吹雪の強さによってばらつきが発生するため、全体として見たときには反復パターンは気づかれにくくなっている。

 キャラクタの行動に対して動的な積雪表現がなされるという点において、この積雪シェーダーはプロシージャル的な表現といえ、ユニークだといえる。プロシージャル的な積雪シェーダーと言えば独CRYTEKの「CRYSIS」があり、これについては本連載「CRY ENGINE2」編で紹介しているが、あちらは懲りすぎていた分、描画負荷が異常に高かった。「MGS4」の手法は得られる効果の高さの割りには低負荷で合理的な手法だといえよう。


■ 「MGS4」における顔面シェーダーの秘密
  物理ベースではなく職人芸的シェーダーでリアルな肌質感を再現

順光時は「ソフトライト処理」と命名された陰影が柔らかく出るシェーディングを行なう。首下の陰影の違いに注目
 「MGS4」では魅力ある人間キャラクタが多数出てくる。CGっぽい美形キャラが中心ではあるが、「MGS4」の顔面表現には一種独特の質感が漂っている。この表現は単一ではなく、いくつかのユニークなシェーダーを組み合わせることで実現されている。まず、基本となるのは「リムライト」(Rim Lighting)のテクニックだ。

 リムライトとは、キャラクタが逆光でライティングされているときに、その側面部分(輪郭部分)から光が溢れ出るようなハイライトが出る現象をいう。光が物質の内部に浸透して再び出てくるような、人肌に代表される「透明度の“低い”半透明材質」でよく起こる現象であり、これを物理的に正しく表現するためには表面下散乱(Subsurface Scattering)のシミュレーションをしなければならない。しかし、それではあまりゲーム向きではないため、3Dゲームグラフィックスでは多様な疑似手法が考案されている。ちなみに、本連載では「バーチャファイター5」編の時にも、セガが実装した独自の疑似手法を紹介している。「MGS4」でのリムライティング処理は、逆光時と順光時で処理を切り換えているのが特徴だ。

 順光時は「ソフトライト処理」と命名された陰影が柔らかく出るシェーディングを行なう。具体的には陰影が急激に暗くなる箇所に対し、ベースのデカールテクスチャのカラーの影響を強くするような処理で実現している。これは肌で言えば、肌下に浸透した光が肌下で散乱して(皮下散乱)鈍く明るくなる陰影を簡易的にエミュレーションしていることになる。

逆光時は、その輪郭部分にハイライトがこちらにしみ出してくるような表現を付加。ハイライトの出方に注目
 逆光時は、その輪郭部分にハイライトがこちらにしみ出してくるような表現を付加している。こちらも物理的な陰影結果に対してベースのデカールテクスチャの色を強く出すような処理でハイライトを表現している。これも皮下散乱光を擬似的に再現した効果になる。なお、このリムライティングは「MGS4」では人肌以外には、布などにも適用されている。

 ちなみに、このリムライティング処理における「逆光」と「順光」の判断は、そのシーンの代表光源との向きではなく、前出の半球ライトの基準軸に対して行なっている。これは、デザイナーが細かく設定した半球ライト環境光によるリムライトの方が、キャラクタ達をドラマチックに見せられることが主たる理由だろう。

 髭やシワなどのディテール表現は、法線マップを用いたオーソドックスな手法を採用する。ただし、表情アニメーションによって法線マップのシワの出方を変える処理を適用していたり、陰に入ったときに法線マップのディテール表現が消えないように陰影の出方を調整していたりと、工夫は細部にまで至る。

 人間キャラクタの「生きている」感を左右する眼球表現については、黒目部分の水晶体の膨らみを法線マップで表現するという細かいこだわりを入れている。さらに、ライティング時には「死んだ目」にならないように、常にカメラに相対して瞳にハイライトが出るような特別なシェーダーを仕込んでいる。

 髪の毛はPS2時代からの伝統的手法である、毛ヒレを植え込むタイプの表現で実現されている。髪の毛のライティングについては、異方性の陰影とハイライトが出るような特殊なシェーダーを実装しているのが面白い。

 「MGS4」の人肌、顔面表現は、物理ベースでリアルに持っていくのではなく既存技術をうまく応用して説得力のあるビジュアルに持っていっているのが特徴的であり、また興味深い。

常にカメラに相対して瞳にハイライトが出る眼球シェーダー
異方性の陰影とハイライトが出る髪の毛シェーダー
スキンシェーダーを見やすく球体に適用したアニメーション


■ 「MGS4」における水面表現
  特徴的なカメラ座標系による動的法線マップ実装で実現

 近代3Dゲームグラフィックスでは水面表現も見どころの1つとなっている。「MGS4」では、あまり水面をメインに取り扱ったゲームシーンはないが、ゲームプレイで水深の浅い川を横切るようなステージがあり、ここでは動的な水面表現が用いられている。

 「MGS4」では当初、水面ポリゴンに対して頂点ベースの波動シミュレーションを実行する実装も試したとのことだが、「MGS4」ではあまり大きな波を立てる必要性がなかったことから、波動シミュレーションベースではなく、それらしく見えるピクセル陰影処理ベースの疑似手法を採択した。

水面に向かって銃を撃つと水柱が立ち波紋が広がる 水面を走るとそこから波紋が広がる

 基本的な実装方針は、微細な凹凸を表現するバンプマッピングの凹凸を動的に作り出して陰影処理するという、オーソドックスなバンプマップ・アニメーション技法になっている。この手法の実現には動的な法線マップを生成する必要があり、さらにこれを生成する前素材として動的なハイトマップ(凹凸を濃淡で表したテクスチャ)を生成する必要がある。

 このハイトマップ生成については、水面レンダリング用の出力テクスチャに対して、波紋が発生した箇所に事前生成しておいた波紋ハイトマップを重ね描きしていくことで行なっている。これにより、動的キャラクタが水面に入ったことで波紋を立たせるインタラクト表現が実現される。

 開発段階で事前生成しておく表現単位となる波紋ハイトマップは、「さざ波」状のもの、同心円的なもの……といくつかのバリエーションを持っており、水面上の波に規則性が露呈しないような工夫が成されている。また広がる波紋の表現などは、単位となる波紋ハイトマップを拡大しつつ書き込んでいる。拡大していくにつれて波が弱まる様を表現するため、拡大するにつれてハイト量(高さ量)を減衰させる処理はちゃんと入れているとのこと。

表現単位の波紋ハイトマップの一例 波紋のハイトマップはカメラ座標系で描き出している

 そして特徴的なのが、この水面レンダリング用の出力テクスチャは、プレーヤー視界ベース(ビュースペース、カメラ座標系)、透視投影された形で生成されているという点。この手法だと、画面に映っていない水面についてはレンダリングを行なわないため、水面表現負荷を最低限にできて、さらに波紋生成負荷を一定に保てるというメリットがある。ただ、水面を捉える視線角度に応じて波紋が変形されて書き出されることになって品質が心配になる。だがこれも、もともと波紋自体が曖昧な見え方をするのであまり気にならない。

 水面レンダリング用のテクスチャサイズは256×256テクセルという意外にコンパクトなもので、これが拡大されて水面に適用される。バイリニアフィルタで拡大される段階でハイト情報が滑らかにぼやっと補間されるため、低解像度だからといって嫌味に視覚されることはないようだ。「MGS4」でのハイトマップ精度は諸般の事情から8888の整数32ビットバッファを使用しているが、これについて高部氏は、ハイトマップについては16ビット浮動小数点バッファ(FP16)を活用した方が精度が維持しやすいはずと述べている。

 ハイトマップが完成したらあとはこれを法線マップへ変換し、フレネル反射に配慮した環境バンプマッピングをピクセルシェーダーで実行するだけだ。なお、水面に映り込む情景は固定の事前生成の環境マップで、水面には動的な鏡像シーンは描かれない。水面の鏡像表現は「MGS3」では行なっており、「MGS4」でも動的な環境マップの生成はシステム的に行なえなくはなかったが、描画負荷低減に配慮し今の仕様になったとのことだ。

上のカメラ座標系で描き出した波紋のハイトマップを法線マップへ変換 最終レンダリング結果

 もちろんカメラ座標系で生成していることと、事前生成した波紋を重ね描きしているだけの方式なので、岸に衝突した波の折り返しや、波と波の衝突による波の減衰、波の増強といった現象は実現されないが、ゲームプレイにおいて水面のインタラクトシーンはごくわずかなのであまり気にならない。この判断はアクションゲーム向け水面実装としては妥当だと思う。

水面へのインタラクションが動的な波紋を生むことを示したムービー


■ 六角形絞り形状を再現した被写界深度のシミュレーション

 PS2の時代から映像表現としてピントが合っているところと、ぼけてしまっているところを描き分けて印象的な被写界深度表現を行なうアプローチは実現されていたが、プログラマブルシェーダー・グラフィックス時代となった今世代では、実在するカメラで撮影したような、シミュレーションベースの被写界深度表現を実装しようとする試みが各所で行なわれている。

 「MGS4」でも簡易的ではあるが、仮想的なカメラモデルを想定し、捉えたシーンに対しての焦点距離と絞り開口率を与えて、合焦距離に対して前と後ろに出るボケの大きさを算出してぼかしを行なっている。

鉄柱あたりに合焦している場合 画面奥に合焦している場合 画面手前に合焦している場合
絞りを小さくして広範囲に合焦すると、ぼけ幅が小さくなる 絞りを大きくして広範囲にボケると、ぼけ幅が大きくなる

被写界深度のシミュレーション。「MGS4」で用いた散乱円半径の算出式
「MGS4」では絞り形状を六角形とし、サンプリング数は19点という贅沢仕様。その代わりけっこう重い
 基本的には合焦点から離れれば離れるほどボケ半径が大きくなるという、典型実装ではあるが、「MGS4」では六角形の絞り形状を与え、この絞り形状が合焦点からずれればずれるほど絞り形状を大きくしてぼかすという工夫が成されている。

 カメラの絞り形状の六角形状のボカし用フィルタカーネルとしては19点サンプリングを採用。19点サンプルという仕様はけっこう贅沢だが、それでもボカし半径が大きくなると19点サンプリングを持ってしてもスカスカ感が出てきてしまうため、19点サンプリングで不自然にならない程度の半径に抑制するロジックを盛り込んでいるとのこと。

 HDRエンコードレンダリングされたシーンに対しての被写界深度シミュレーション処理では、さすがに19点のデコード処理を全ピクセルに対して行なうことは重すぎると判断され、デコードせずに物理量の正確性を無視して19点サンプリングの被写界深度シミュレーションを適用している。そのため、高輝度な六角形絞り形状のボケは出ない。ここも、ゲームとしてのリアルタイム性を重視して割り切っている。

高部氏「他の描画負荷増加によって、19点サンプリングの被写界深度表現がつらくなってくるような局面では、縮小バッファを用い、7点サンプリングにサンプル点を減少させた簡易版も併用しています。また一部のシーンでは、シミュレーションベースの被写界深度表現では無理な、合焦点をはずれた箇所を全て一様にぼかすというような表現が欲しいとデザイナーからの要望もあったりしたので、ただぼかすだけの超簡易版も実装しています。どれを用いるかは描画負荷面、演出面の都合で切り換えています」


HDRボケがみられる開発時のショット HDRボケが現われない出荷版のショット


■ 深度値を利用したエフェクト処理

 近年の3Dゲームグラフィックスではピクセルシェーダーを積極活用したエフェクトが多いわけだが、レンダリングを完了したシーンに対して何らかの画像処理……いわゆるポストプロセスでエフェクトを描画する手法が典型となりつつある。

 この際に高頻度で利用されるのが、そのシーンのデプスバッファ(Zバッファ、深度バッファ)の内容だ。「MGS4」でもご多分に漏れず、デプスバッファの積極利用によって多様なエフェクト処理を実現しており、前出の被写界深度シミュレーション、フォグエフェクトなどはまさにこの深度値を“キー”にして実現しているものになる。

 「Killzone2」で採用されたDeferred Renderingのテクニックや、最近のPCゲームでも多いZバッファの先行レンダリングのテクニックなど、これに関連した多様なテクニックがあるが、「MGS4」では普通にシーンのレンダリング完了後のデプスバッファを利用している。

 ただし、デプスバッファを直接テクスチャとして再利用するとアクセスコストが大きい。というのもデプス値(深度値)は非線形の値が格納されているからだ。しかも「MGS4」では浮動小数点デプスバッファを採用しているため、整数デプスバッファよりもさらにアクセスコストが高い。

 「MGS4」では、多数のエフェクトシェーダーでデプス値を利用することが見えてきたので、扱いやすい線形値のW値へ変換したポストプロセス用の浮動小数点W値テクスチャに変換している。

浮動小数点デプス値を線形のW値に変換したテクスチャを生成し、これを後段の各エフェクトシェーダーで利用している W値の読み込みコード。PACK、UNPACK命令は、OpenGLで浮動小数点値を整数テクスチャに格納して取り扱うためのGeForce系(RSXにも含まれている)拡張命令

 このW値テクスチャを用いて表現されるエフェクトは、前出の被写界深度シミュレーション、フォグエフェクト以外にソフトパーティクルなどが挙げられている。これは爆煙などのパーティクルが、背景やキャラクタなどの他モデルのポリゴンと交差した際にそこに鋭い交差線が出てしまうことを低減させる処理のこと。

 具体的にはパーティクルのピクセル描画の際に、他者との深度値を比較して、深度値が近いほど交差線に近いと判断し透明度を上げて描画する。これは、今世代の3Dゲームグラフィックスではよく見られるテクニックだ。

ソフトパーティクルOFF。煙パーティクルと壁との交差線が露呈している ソフトパーティクルON。煙パーティクルと壁との交差線が見えない

 この他爆発時にシーンに付着する焦げ跡のような、動的に付着するデカール表現も投射テクスチャマッピング(投影マッピング)のように見えるが、実はW値テクスチャを利用し、パーティクルを貼り付けるような実装となっている。

 単純に貼り付けると、貼り付け先の形状に無関係に貼られてはみ出してしまうが、パーティクル側の深度とシーン側の深度(W値)を比較して、その差が一定以上の場合はピクセルを破棄する処理を入れることで、貼り付け先の形状で正確に切り取ったように貼り付けている。

デカールパーティクルをそのまま貼り付けたところ。壁の輪郭からはみ出してしまう シーン側の深度(W値)を比較して、その差が一定以上の場合にピクセルを破棄することで、貼り付け先の形状で正確に切り取ったように貼り付けた結果が得られる

非常に印象的な爆発予測ビジョンの効果
 この発想をさらに拡張して実装されたのが、スネークが装着しているスニーキングスーツの特殊機能である、手榴弾の爆発予測ビジョンの描画だ。着弾地点に爆発範囲を表したインディケータが、そのシーンに投射されたように描かれる、あのユニークな映像表現だ。

 これは、着弾地点にパーティクルを貼り付けるような実装になってはいるのだが、前出のようなただ切り取る手法ではなく、そのパーティクルの各ピクセルにおける深度値(W値)を参照して、この値と画角情報から3D座標を逆算し、その位置にピクセルを描画することで実現している。これにより、まるで映像をシーンに投射したような、これまたあたかも投射テクスチャマッピングのような結果が得られることになっているのだ。

このように描き出される爆発予測ビジョンは、実は…… 1枚のデカールパーティクルをピクセルシェーダーを活用して貼り付けているだけ。深度値を利用した効果的なエフェクトの1つ


■ 「MGS4」におけるCELLプロセッサ活用は? 物理シミュレーションは?

 「MGS4」はPS3専用ソフトとしてリリースされたPS3エクスクルーシブタイトルだが、それだけにやはり気になるのは、PS3のCPUであるCELLプロセッサの活用だ。

 CELLプロセッサは、メインプロセッサである1基の「PowerPC 970」互換コアであるPPE(Power Processor Element)と、7基(8基のうち1基がDisabled)のSynergistic Processor Element(SPE)と呼ばれる128ビットのSIMD型ベクトルRISCプロセッサを1コアに集約した非対称型マルチプロセッサだ。PPEのパフォーマンスがそれほど高くないため、CELLプロセッサの本領発揮はSPEの徹底活用にあると言われている。

高部氏「『MGS4』ではSPEはサウンド処理、描画処理、衝突判定、物理シミュレーション、アニメーション(モーション)処理に活用しています。サウンド処理にはあるSPEを専任で割り当てていますが、それ以外は空いているSPEを動的に活用して処理を行なわせるという実装になっています」

 他社の平均的なPS3タイトルと比較すると「MGS4」におけるSPEの稼働率は高いとみてよいだろう。なお「MGS4」におけるSPE活用は、大別して2つのタイプにわかれているという。

 1つはSPEがある目的で集中活用されるタイプ。これに当たるのはサウンド処理、描画処理、物理シミュレーションで、プログラム進行上の専用フェーズにおいて集中的にSPEが起用されることになる。

 2つ目は、様々なモジュールから発行されるジョブを動的SPEに割り当てて処理するタイプだ。これには衝突判定、アニメーション処理が相当する。例えば、敵キャラ処理のモジュールならば、衝突判定やアニメーション処理をSPEに発行し、その結果が帰ってくるまで別の処理を行なうような実装になっている。これは処理遅延を隠蔽するために用いられる常套手段だ。

 「MGS4」はもともとPS3専用タイトルとして開発されていたため、SPEを活用する仕組みは開発初期から色々実験されていたようだ。

高部氏「『MGS4』はマルチプラットフォームは考えていなかったので、SPEは積極活用する設計になっています。だから、最初からCELLプロセッサ向けのSPEありきの設計になっています。重い処理があったらSPEで実装して負荷を逃がす……という方針です。「MGS4」はマルチプラットフォームで動かさないといけないという縛りがなかったので、PS3だから大変ということは逆に少なかったです。別のプラットフォームで、これから作れと言われたら逆に大変ですね。SPEに頼っていますから(笑)」

物理シミュレーション・エンジンは、「MGS4」で自社フルスクラッチ開発した解析法ベースのものを採用している
 ところで、CELLプロセッサのSPEの活用が難解だとの各スタジオの反応を受けて、ソニーはSPEの徹底活用ライブラリ「Playstation EDGE」をリリースしているが、「MGS4」ではこれは活用されたのだろうか。なお、Playstation Edgeの詳細については本連載の「Playstation Edge編」を参照して欲しい。

 高部氏によれば「MGS4」では、データの展開(Compression)のライブラリは使ったという。しかし、Playstation Edgeのウリであった、SPEで頂点シェーダー的なことを行なわせる機能については活用しておらず、自前で同種のものを開発してしまっていたのでそちらを利用したとのこと。例えば、モーションデータによってキャラクタの姿勢を変化させるアニメーション処理におけるスキニング処理(頂点ブレンディング)などは、「MGS4」チームが自前で開発して実装したSPEジオメトリシステムで行なってしまっているのだ。

高部氏「Playstation Edgeが出てきたのが、我々の『MGS4』の開発が大部進んでからでしたから(笑)、既に我々で似たような機能を実装してしまっていたんです。でも、自前のSPEジオメトリシステムの設計にあたって頂点フォーマットの展開については、Edge Geometryを参考にしたりもしています」

 物理シミュレーション・エンジンは、「MGS4」で自社フルスクラッチ開発した解析法ベースのものを採用している。解析法は関係する物体間の拘束力に配慮して運動方程式をフレーム間時間(Δt)の微分方程式にして解くタイプの手法。こちらも主にSPEを起用して実装されている。解析法ベースの物理シミュレーションでは互いにめり込んでしまった場合の抗力で運動が振動したり、あるいは不自然に跳ねたりといったエラーが起こるが、これが起こらない工夫が施されているという。

 最後に、今回の「MGS4」のプロジェクトを振り返っての所感を伺った。

高部氏「実装したかった技術としては動的影生成におけるシャドウマップのカスケード実装ですね。1枚シャドウマップでの『MGS4』では限界を感じましたし。あとは『MGS4』ではカメラブラーのみなのでオブジェクト・モーション・ブラーも実装しても良かったかなと思っています。キャラクタごとの細かい動きに付くことだけでもかっこよくなりますから。これからの課題としては、開発コストの低減を考えていくことですね。PS3などの今世代機の開発ではデータの制作コスト、すなわちデザイナーの作業負荷が大きいんです。その意味では注目されているプロシージャル技術なんかはデータ制作支援の技術として取り入れていかなくてはと考えたりはします。逆に、個人的にはランタイムやリアルタイムでのプロシージャル技術活用はもうちょっと先かなと思ったりします」


■ 「MGS4」というプロジェクトがPS3を変えるか?

 今回の「MGS4」を取材して感じたことが2点ある。1つ目は「開発が難しい」とされるPS3向けタイトルも、「MGS4」のようにPS3専用を大前提として基礎研究を十分に行ない、SCEのバックアップのもと、初期からPS3実装に向けて開発すれば、高部氏の言うように「開発は難しくない」ということ。この言葉は、PS3のタイトル開発を検討しているスタジオを勇気づけることだろう。

 もともと「PS3の開発が難しい」と言っていたのは、マルチプラットフォーム展開を前提にしてタイトル開発を進めてきたチームからの意見が多かった。PS3よりも先行して存在したXbox 360やPCを前提にして開発を進め、Xbox 360、PC基準のエンジン設計で、同じパフォーマンスをPS3で出そうというのが「難しい」のであって、実際にはPS3そのものが極端に開発の難しいハードということではないのだ。

 「PS3自体が難しい」というよりは、「どちらかのハードウェアに強力な最適化を推し進めたソフトウェアは移植が難しい」という、昔ながらの定説が今回も生き続けているに過ぎないのだ。ただ、「MGS4」のようなPS3に特化した開発ができるのは小島プロダクションのような特別なスタジオだけになってしまっているという現状は課題として残る。

 2つ目は、「MGS4」は小島プロダクションとしては初のPS3タイトルでありながら、PS3を非常に現実的なプラットフォームとして捉えていたという点。実現が困難な難しいテーマや、過剰に先進過ぎる技術を背伸びして取り入れることはしておらず、あくまでユーザーが体験できるトータルなゲーム体験をPS2世代から押し上げようというテーマを最優先にして開発が成されている。「MGS4」では、多彩なシェーダーエフェクトが盛り込めて、それでいて十分なハイデフ感も両立できそうな解像度1,024×768ドットを選択し、総合的にスペック以上にリアルで豊かな映像とすることに成功している。ここがとても象徴的だと感じる。

 PS3は本体発表当初から「フルHD、1,920×1,080ドット」というキーワードが必要以上にアピールされて1人歩きしてしまった感があるが、本連載では、RSXの128ビットバス/8ROPアーキテクチャではそれが難しそうであり、リッチなエフェクト付きな映像でゲームを実現するためには、1,920×1,080ドットのフルHDグラフィックスに固執すべきではないと述べてきた。図らずも、「MGS4」はまさにそのセオリーを守った設計のゲームとなった。「MGS4」は、その意味で、PS3の3Dグラフィックス表現力の限界に挑戦し、その中で最高レベルの結果を出したタイトルだったといえる。

 「MGS4」は、ここしばらくは、PS3ゲームグラフィックスのベンチマーク的存在となることだろう。

(C)2008 Konami Digital Entertainment

□KONAMIのホームページ
http://www.konami.co.jp/
□「小島プロダクション」のページ
http://www.konami.jp/kojima_pro/
□「METAL GEAR SOLID 4 GUNS OF THE PATRIOTS」のページ
http://www.konami.jp/mgs4/
□関連情報
【12月3日】西川善司の3Dゲームファンのための「METAL GEAR SOLID 4」グラフィックス講座
職人芸的最適化術によって生まれたPS3最高峰グラフィックスの秘密に迫る(前編)
http://game.watch.impress.co.jp/docs/20081203/3dmg4.htm
【9月12日】「METAL GEAR SOLID 4」関連セッションレポート その2
次世代機という“理想”と、PS3という“現実”の狭間でもがくエンジニア達
http://game.watch.impress.co.jp/docs/20080912/cedec_mgs.htm
【9月10日】「METAL GEAR SOLID 4」関連セッションレポート その1
戸島サウンドディレクターが明かす“戦場ストリーム”とは何か!?
http://game.watch.impress.co.jp/docs/20080910/cedec_mgs4.htm
3Dゲームファンのためのグラフィックス講座のバックナンバー
http://game.watch.impress.co.jp/docs/backno/rensai/3dg.htm

(2008年12月4日)

[Reported by トライゼット西川善司]



Q&A、ゲームの攻略などに関する質問はお受けしておりません
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします

ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp

Copyright (c)2008 Impress Watch Corporation, an Impress Group company. All rights reserved.