|
会場:KONAMI東京本社
■ 「MGS4」における影生成は? 今世代のゲームらしく「MGS4」は、歴代の「MGS」シリーズと比較すると高度な動的影生成メソッドを実装している。影生成技法としてはデプスシャドウ技法(シャドウマップ技法)の改良形を採用する。 デプスシャドウ技法は、光源位置から見たシーンの深度情報(奥行き情報)をテクスチャにレンダリングしてシャドウマップを生成し、最終的なシーンのレンダリングはこのシャドウマップを参照して、ピクセル単位で第3者に遮蔽されているか(影になる)、されていないか(影にならない)を判断しながら実行していく。 この技法は発想としてわかりやすいのだが、シャドウマップ解像度に影の品質が強く依存してしまうため、近年では各所で考案された様々な改良型技法を使うことが一般化している。
「MGS4」では、シャドウマップの生成においては、シャドウマトリックスを歪めるタイプの独自技法を実装している。「MGS4」のものとは違うが、こうしたタイプの改良型技法としては「Perspective Shadow Maps」(略称PSM)などがある。なおPSMについては、本連載「3DMark05」編を参考にして欲しい。
「MGS4」では、「ロストプラネット」で行なっていたような、複数のシャドウマップをカスケード生成するような拡張は実装されていない。そのため先天的に影にジャギーが出る可能性があるが、「MGS4」では4点近傍比率フィルタリング(PCF:Percentage Closer Filtering)を適用して簡易的ではあるが影エッジをぼかすソフトシャドウ処理を入れている。
それでも、50mを超えた先の影へのジャギー発生の可能性を完全に回避できなかったため、ステージのマップデザインを悟られにくい構造に工夫している。この他、GPU負荷低減のために影生成対象を選択式にしたり、屋内シーンではテクスチャとして(ライトマップ)静的な影を適用しているところもある。
■ 簡易的なプロシージャル技法を組み込んだ「MGS4」のエフェクトシェーダー 「MGS4」では、様々なシェーダー・エフェクトが実装されている。その中から代表的なものをかいつまんで紹介していこう。筆者が思うには「MGS4」のシェーダー・エフェクトは、リアルタイム性とパフォーマンスの高さを維持するための潔い割り切りと、動的な表現をそつなくこなせるクレバーな実装になっている。 まずは、血、濡れ、焦げ(以下、これらを“汚れ”と総称する)の表現のエフェクトについて。 ゲーム中、被弾したキャラクタの衣服に流血した血が染み出てきたり、あるいは水につかったキャラクタの衣服が濡れて黒ずんだりする表現があるが、ああしたエフェクトを司るシェーダーが「MGS4」にはシステマティックに実装されている。ちなみに、血についてはPS2の「MGS2」から、各種汚れについてはPS2の「MGS3」から実装されていて、こうした汚れ表現は「MGS2」、「MGS3」においては、頂点カラーの変更で表現していた。「MGS4」においても、この頂点カラーで実現するという実装方針は変わっていない。 汚れテクスチャの浮き出方を汚れ具合に応じてシェーダーで浮き出させる実装や、汚しの半透明被せモデル(シェルポリゴン)を重ねる手法もテストしたそうだが、採用は見送られている。
テクスチャの実装にしなかったのは、既に各シェーダーが優先度の高いテクスチャを多く参照しており、これ以上テクスチャ参照を増やすとパフォーマンス面に問題が出る可能性があったため。半透明汚しモデルにしなかったのは、描画負荷増加を嫌ったことと、半透明描画において乗算ブレンディングと相性の悪いブレンドバッファ技法を採用していたため(前述したようにブレンドバッファ技法では、仕様の関係上、加算ブレンディングとαブレンディングのみをサポートしている、汚れはデカールテクスチャに対して乗算ブレンディングをした方が自然に見える)。
とはいえ、汚れの適用先のキャラクタモデルは5,000から10,000ポリゴンに及ぶため、頂点粒度は相当細かい。なので、頂点単位のエフェクトと言っても表現精度上全く問題ないという印象が持たれる。
実際の実装だが、3Dモデル側の頂点カラーのRGB成分(3要素のパラメータ格納スペースとして利用)に血、濡れ、焦げの具合(汚れの濃さ)を書き込む。汚れ具合が変わったときには、ここをSPEで更新することで、汚れ具合を動的に変更可能としている。濡れ具合については、時間の経過と共に乾く表現が成されているが、これはこの濡れ具合を時間と共に低減更新させることで実現している。
実際の描画では、この頂点カラーが補間された値がピクセルシェーダーに受け渡され、その汚れごとの固有のカラーを陰影処理結果のピクセルカラーにブレンドさせている。具体的には「血」ならば血の汚れ具合が濃ければ濃いほど赤く、「濡れ」ならばより濡れているほど黒っぽくしている。主人公スネークの着ている特殊樹脂製のスニーキングスーツについては、濡れているときにはテカる質感を与えるためにスペキュラ強度を上げるスペシャルな調整も入っているとのこと。
ところで、いくら頂点カラーに実装してテクスチャ参照はないとはいえ、陰影処理計算負荷は決して低くはない。そこで最適術として、全く「汚れ」のない状態の時には「汚れ適用シェーダーなし」のシェーダーに切り換えているとのこと。
まず「MGS4」の雪は、「吹雪の風向きに向いている面から積もっていく」ものとしている。一定時間、そのポリゴンが吹雪方向に向いていると積雪量が増え、吹雪に向いていないところは移動しているうちに(時間経過と共に)溶解していく。また、屈んだり横たわったりして積もっている雪に埋もれた部位についても雪が付着する仕組みを取り入れている。
これは3Dモデルに対し、氷結テクスチャ(後述)を貼り付けるための被せモデル(シェルポリゴン)を一層分用意し、これに対して積雪シェーダーを適用している。イメージとしては一層だけのファーシェーダーのようなものを連想するとわかりやすいかもしれない。なお、前出の汚れエフェクトシェーダーではボツとした被せモデル案だが、積雪シェーダーの実装においては採用したということになる。付着させる氷の半透明描画が、乗算ブレンディングではなく加算ブレンドで済むため、これがブレンドバッファ法の制限に引っかからなかったというのが採用の主な理由のようだ。
決めうちではあるが、「雪が多い=白」、「雪が少ない=黒」という感じで積雪量を濃淡で表した「氷結テクスチャ」を用意しておき、ピクセルシェーダーは受け取った頂点αと、この氷結テクスチャから取り出したテクセルの値を比較する。受け取っている頂点αには積もらせたい積雪量が格納されているので、取り出した氷結テクセルがこの値に見合う場合は実際に描画され、そうでない場合は描かれないようにする。 なお氷結テクスチャには、対応する法線マップも持たされており、実際の陰影処理時はバンプマッピング的なピクセル陰影処理も成される。このため、微細な凹凸感のある雪が付着している表現ができている。 氷結テクスチャは事前生成した固定パターンとなるが、その氷結の広がり方は頂点単位の積雪量によって変化し、風向きや吹雪の強さによってばらつきが発生するため、全体として見たときには反復パターンは気づかれにくくなっている。
キャラクタの行動に対して動的な積雪表現がなされるという点において、この積雪シェーダーはプロシージャル的な表現といえ、ユニークだといえる。プロシージャル的な積雪シェーダーと言えば独CRYTEKの「CRYSIS」があり、これについては本連載「CRY ENGINE2」編で紹介しているが、あちらは懲りすぎていた分、描画負荷が異常に高かった。「MGS4」の手法は得られる効果の高さの割りには低負荷で合理的な手法だといえよう。
■ 「MGS4」における顔面シェーダーの秘密
リムライトとは、キャラクタが逆光でライティングされているときに、その側面部分(輪郭部分)から光が溢れ出るようなハイライトが出る現象をいう。光が物質の内部に浸透して再び出てくるような、人肌に代表される「透明度の“低い”半透明材質」でよく起こる現象であり、これを物理的に正しく表現するためには表面下散乱(Subsurface Scattering)のシミュレーションをしなければならない。しかし、それではあまりゲーム向きではないため、3Dゲームグラフィックスでは多様な疑似手法が考案されている。ちなみに、本連載では「バーチャファイター5」編の時にも、セガが実装した独自の疑似手法を紹介している。「MGS4」でのリムライティング処理は、逆光時と順光時で処理を切り換えているのが特徴だ。
順光時は「ソフトライト処理」と命名された陰影が柔らかく出るシェーディングを行なう。具体的には陰影が急激に暗くなる箇所に対し、ベースのデカールテクスチャのカラーの影響を強くするような処理で実現している。これは肌で言えば、肌下に浸透した光が肌下で散乱して(皮下散乱)鈍く明るくなる陰影を簡易的にエミュレーションしていることになる。
ちなみに、このリムライティング処理における「逆光」と「順光」の判断は、そのシーンの代表光源との向きではなく、前出の半球ライトの基準軸に対して行なっている。これは、デザイナーが細かく設定した半球ライト環境光によるリムライトの方が、キャラクタ達をドラマチックに見せられることが主たる理由だろう。 髭やシワなどのディテール表現は、法線マップを用いたオーソドックスな手法を採用する。ただし、表情アニメーションによって法線マップのシワの出方を変える処理を適用していたり、陰に入ったときに法線マップのディテール表現が消えないように陰影の出方を調整していたりと、工夫は細部にまで至る。 人間キャラクタの「生きている」感を左右する眼球表現については、黒目部分の水晶体の膨らみを法線マップで表現するという細かいこだわりを入れている。さらに、ライティング時には「死んだ目」にならないように、常にカメラに相対して瞳にハイライトが出るような特別なシェーダーを仕込んでいる。 髪の毛はPS2時代からの伝統的手法である、毛ヒレを植え込むタイプの表現で実現されている。髪の毛のライティングについては、異方性の陰影とハイライトが出るような特殊なシェーダーを実装しているのが面白い。
「MGS4」の人肌、顔面表現は、物理ベースでリアルに持っていくのではなく既存技術をうまく応用して説得力のあるビジュアルに持っていっているのが特徴的であり、また興味深い。
■ 「MGS4」における水面表現 近代3Dゲームグラフィックスでは水面表現も見どころの1つとなっている。「MGS4」では、あまり水面をメインに取り扱ったゲームシーンはないが、ゲームプレイで水深の浅い川を横切るようなステージがあり、ここでは動的な水面表現が用いられている。
「MGS4」では当初、水面ポリゴンに対して頂点ベースの波動シミュレーションを実行する実装も試したとのことだが、「MGS4」ではあまり大きな波を立てる必要性がなかったことから、波動シミュレーションベースではなく、それらしく見えるピクセル陰影処理ベースの疑似手法を採択した。
基本的な実装方針は、微細な凹凸を表現するバンプマッピングの凹凸を動的に作り出して陰影処理するという、オーソドックスなバンプマップ・アニメーション技法になっている。この手法の実現には動的な法線マップを生成する必要があり、さらにこれを生成する前素材として動的なハイトマップ(凹凸を濃淡で表したテクスチャ)を生成する必要がある。 このハイトマップ生成については、水面レンダリング用の出力テクスチャに対して、波紋が発生した箇所に事前生成しておいた波紋ハイトマップを重ね描きしていくことで行なっている。これにより、動的キャラクタが水面に入ったことで波紋を立たせるインタラクト表現が実現される。
開発段階で事前生成しておく表現単位となる波紋ハイトマップは、「さざ波」状のもの、同心円的なもの……といくつかのバリエーションを持っており、水面上の波に規則性が露呈しないような工夫が成されている。また広がる波紋の表現などは、単位となる波紋ハイトマップを拡大しつつ書き込んでいる。拡大していくにつれて波が弱まる様を表現するため、拡大するにつれてハイト量(高さ量)を減衰させる処理はちゃんと入れているとのこと。
そして特徴的なのが、この水面レンダリング用の出力テクスチャは、プレーヤー視界ベース(ビュースペース、カメラ座標系)、透視投影された形で生成されているという点。この手法だと、画面に映っていない水面についてはレンダリングを行なわないため、水面表現負荷を最低限にできて、さらに波紋生成負荷を一定に保てるというメリットがある。ただ、水面を捉える視線角度に応じて波紋が変形されて書き出されることになって品質が心配になる。だがこれも、もともと波紋自体が曖昧な見え方をするのであまり気にならない。 水面レンダリング用のテクスチャサイズは256×256テクセルという意外にコンパクトなもので、これが拡大されて水面に適用される。バイリニアフィルタで拡大される段階でハイト情報が滑らかにぼやっと補間されるため、低解像度だからといって嫌味に視覚されることはないようだ。「MGS4」でのハイトマップ精度は諸般の事情から8888の整数32ビットバッファを使用しているが、これについて高部氏は、ハイトマップについては16ビット浮動小数点バッファ(FP16)を活用した方が精度が維持しやすいはずと述べている。
ハイトマップが完成したらあとはこれを法線マップへ変換し、フレネル反射に配慮した環境バンプマッピングをピクセルシェーダーで実行するだけだ。なお、水面に映り込む情景は固定の事前生成の環境マップで、水面には動的な鏡像シーンは描かれない。水面の鏡像表現は「MGS3」では行なっており、「MGS4」でも動的な環境マップの生成はシステム的に行なえなくはなかったが、描画負荷低減に配慮し今の仕様になったとのことだ。
もちろんカメラ座標系で生成していることと、事前生成した波紋を重ね描きしているだけの方式なので、岸に衝突した波の折り返しや、波と波の衝突による波の減衰、波の増強といった現象は実現されないが、ゲームプレイにおいて水面のインタラクトシーンはごくわずかなのであまり気にならない。この判断はアクションゲーム向け水面実装としては妥当だと思う。
■ 六角形絞り形状を再現した被写界深度のシミュレーション PS2の時代から映像表現としてピントが合っているところと、ぼけてしまっているところを描き分けて印象的な被写界深度表現を行なうアプローチは実現されていたが、プログラマブルシェーダー・グラフィックス時代となった今世代では、実在するカメラで撮影したような、シミュレーションベースの被写界深度表現を実装しようとする試みが各所で行なわれている。
「MGS4」でも簡易的ではあるが、仮想的なカメラモデルを想定し、捉えたシーンに対しての焦点距離と絞り開口率を与えて、合焦距離に対して前と後ろに出るボケの大きさを算出してぼかしを行なっている。
カメラの絞り形状の六角形状のボカし用フィルタカーネルとしては19点サンプリングを採用。19点サンプルという仕様はけっこう贅沢だが、それでもボカし半径が大きくなると19点サンプリングを持ってしてもスカスカ感が出てきてしまうため、19点サンプリングで不自然にならない程度の半径に抑制するロジックを盛り込んでいるとのこと。
HDRエンコードレンダリングされたシーンに対しての被写界深度シミュレーション処理では、さすがに19点のデコード処理を全ピクセルに対して行なうことは重すぎると判断され、デコードせずに物理量の正確性を無視して19点サンプリングの被写界深度シミュレーションを適用している。そのため、高輝度な六角形絞り形状のボケは出ない。ここも、ゲームとしてのリアルタイム性を重視して割り切っている。
■ 深度値を利用したエフェクト処理 近年の3Dゲームグラフィックスではピクセルシェーダーを積極活用したエフェクトが多いわけだが、レンダリングを完了したシーンに対して何らかの画像処理……いわゆるポストプロセスでエフェクトを描画する手法が典型となりつつある。 この際に高頻度で利用されるのが、そのシーンのデプスバッファ(Zバッファ、深度バッファ)の内容だ。「MGS4」でもご多分に漏れず、デプスバッファの積極利用によって多様なエフェクト処理を実現しており、前出の被写界深度シミュレーション、フォグエフェクトなどはまさにこの深度値を“キー”にして実現しているものになる。 「Killzone2」で採用されたDeferred Renderingのテクニックや、最近のPCゲームでも多いZバッファの先行レンダリングのテクニックなど、これに関連した多様なテクニックがあるが、「MGS4」では普通にシーンのレンダリング完了後のデプスバッファを利用している。 ただし、デプスバッファを直接テクスチャとして再利用するとアクセスコストが大きい。というのもデプス値(深度値)は非線形の値が格納されているからだ。しかも「MGS4」では浮動小数点デプスバッファを採用しているため、整数デプスバッファよりもさらにアクセスコストが高い。
「MGS4」では、多数のエフェクトシェーダーでデプス値を利用することが見えてきたので、扱いやすい線形値のW値へ変換したポストプロセス用の浮動小数点W値テクスチャに変換している。
このW値テクスチャを用いて表現されるエフェクトは、前出の被写界深度シミュレーション、フォグエフェクト以外にソフトパーティクルなどが挙げられている。これは爆煙などのパーティクルが、背景やキャラクタなどの他モデルのポリゴンと交差した際にそこに鋭い交差線が出てしまうことを低減させる処理のこと。
具体的にはパーティクルのピクセル描画の際に、他者との深度値を比較して、深度値が近いほど交差線に近いと判断し透明度を上げて描画する。これは、今世代の3Dゲームグラフィックスではよく見られるテクニックだ。
この他爆発時にシーンに付着する焦げ跡のような、動的に付着するデカール表現も投射テクスチャマッピング(投影マッピング)のように見えるが、実はW値テクスチャを利用し、パーティクルを貼り付けるような実装となっている。
単純に貼り付けると、貼り付け先の形状に無関係に貼られてはみ出してしまうが、パーティクル側の深度とシーン側の深度(W値)を比較して、その差が一定以上の場合はピクセルを破棄する処理を入れることで、貼り付け先の形状で正確に切り取ったように貼り付けている。
これは、着弾地点にパーティクルを貼り付けるような実装になってはいるのだが、前出のようなただ切り取る手法ではなく、そのパーティクルの各ピクセルにおける深度値(W値)を参照して、この値と画角情報から3D座標を逆算し、その位置にピクセルを描画することで実現している。これにより、まるで映像をシーンに投射したような、これまたあたかも投射テクスチャマッピングのような結果が得られることになっているのだ。
■ 「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の徹底活用にあると言われている。
他社の平均的なPS3タイトルと比較すると「MGS4」におけるSPEの稼働率は高いとみてよいだろう。なお「MGS4」におけるSPE活用は、大別して2つのタイプにわかれているという。 1つはSPEがある目的で集中活用されるタイプ。これに当たるのはサウンド処理、描画処理、物理シミュレーションで、プログラム進行上の専用フェーズにおいて集中的にSPEが起用されることになる。 2つ目は、様々なモジュールから発行されるジョブを動的SPEに割り当てて処理するタイプだ。これには衝突判定、アニメーション処理が相当する。例えば、敵キャラ処理のモジュールならば、衝突判定やアニメーション処理をSPEに発行し、その結果が帰ってくるまで別の処理を行なうような実装になっている。これは処理遅延を隠蔽するために用いられる常套手段だ。
「MGS4」はもともとPS3専用タイトルとして開発されていたため、SPEを活用する仕組みは開発初期から色々実験されていたようだ。
高部氏によれば「MGS4」では、データの展開(Compression)のライブラリは使ったという。しかし、Playstation Edgeのウリであった、SPEで頂点シェーダー的なことを行なわせる機能については活用しておらず、自前で同種のものを開発してしまっていたのでそちらを利用したとのこと。例えば、モーションデータによってキャラクタの姿勢を変化させるアニメーション処理におけるスキニング処理(頂点ブレンディング)などは、「MGS4」チームが自前で開発して実装したSPEジオメトリシステムで行なってしまっているのだ。
物理シミュレーション・エンジンは、「MGS4」で自社フルスクラッチ開発した解析法ベースのものを採用している。解析法は関係する物体間の拘束力に配慮して運動方程式をフレーム間時間(Δt)の微分方程式にして解くタイプの手法。こちらも主にSPEを起用して実装されている。解析法ベースの物理シミュレーションでは互いにめり込んでしまった場合の抗力で運動が振動したり、あるいは不自然に跳ねたりといったエラーが起こるが、これが起こらない工夫が施されているという。
■ 「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ゲームグラフィックスのベンチマーク的存在となることだろう。
□KONAMIのホームページ (2008年12月4日) [Reported by トライゼット西川善司]
また、弊誌に掲載された写真、文章の転載、使用に関しましては一切お断わりいたします ウォッチ編集部内GAME Watch担当game-watch@impress.co.jp Copyright (c)2008 Impress Watch Corporation, an Impress Group company. All rights reserved. |
|