西川善司の3Dゲームファンのための「End of Eternity」グラフィックス講座(後編)
影生成から物理シミュレーションまで様々な実装テクニックを紹介!


3月収録

会場:トライエース本社




 前編に続いて後編では「End of Eternity」の影生成やモーションブラー、グローバルイルミネーション(GI)、物理シミュレーションなどについて取り上げたい。



■ PS3版とXbox 360版で異なる「EoE」の影生成

 ASKAエンジンでは現存する多様な影生成アルゴリズムを実装しているが、「EoE」では、主にデプスシャドウ系の影生成を採択して使用している。

 Xbox 360版では、シーンによっても違うが、視点位置から遠い方に向かって3枚のシャドウマップに遮蔽情報を生成するカスケードシャドウマップ技法を主に活用している。

 PS3版では負荷低減の目的もあってカスケードなしの単一シャドウマップを用いたライトスペース・パースペクティブ・シャドウマップ技法を採用している部分もある。なお、ライトスペース・パースペクティブ・シャドウマップ技法についての詳細は本連載「Xbox 360」編を参照して欲しい。

 ちなみに、Xbox 360版でのカスケードシャドウマップ技法における各シャドウマップの生成手法は、ライトスペース・パースペクティブ・シャドウマップ技法ではなく、定義通りの“素”のデプスシャドウ技法による実装になっているとのこと。

【影生成(左がXbox 360、右がPS3)】
Xbox 360版では複数枚のシャドウマップをカスケードさせて生成している(左)、PS3ではライトスペース・パースペクティブ・シャドウマップ技法を主に活用(右)
Xbox 360版では複数枚のテクスチャに異なる範囲のシャドウマップを生成。左から右に向かって視点から遠い範囲に相当。ただし、かなりの領域がダブっている。シャドウマップ解像度は1,024×1,024テクセル。これを3枚カスケードさせている(左)、PS3版では光源方向基準でシャドウマップを最適化。シャドウマップ解像度は2,048×1,024テクセル(右)
同じスポットシャドウの例。何故かPS3(左)の方が解像度が高い逆転現象が起きている
Xbox 360版(左)、PS3版(右)とも同じカスケードでPCF数のみが異なるシーン(ただしパラメータが微妙に異なるため、最遠距離とカスケード分割距離が異なっているため、かなり違う見た目になっている)。Xbox 360版が16点PCF、PS3版が9点PCF

庄子氏「セルフシャドウは、イベントシーン、通常のゲームシーン、ともに基本的には出してはいるはずですが、一部のシーンでは意図的に消しているところもあります。これは美的観点上、美しくないセルフシャドウを排除したいという演出的な理由から、わざとそうしています」

 ソフトシャドウ処理も、Xbox 360版とPS3版とで若干違っており、Xbox 360版では4×4の16点近傍比率フィルタリング(PCF:Percentage Closer Filtering)でぼかしているが、PS3では3×3のPCFで実施している。よって場合によってはXbox 360版の方が影のボケ方が自然となっている箇所がありうる。

【半影表現(上段がXbox 360、下段がPS3)】
半影表現オフ(左)、半影表現オン(16点PCF)
半影表現オフ(左)、半影表現オン(9点PCF)

五反田氏「ASKAエンジンでは影生成の処理系をライティングに完全に統合してしまっているので、昔ながらの影生成の考え方のような“影と判定される箇所を暗くする”ような事は行なっていません。影と判定される場所については、“その影の生成元の光源からのライティングを行なわない”という手法で処理しています」

 たとえば「赤と青の2つ光源から照らされているキャラクターがいて、そのキャラクターは赤の光源の光からは照らされているが、青の光源からの光は何物かに遮蔽されていて届かず、影の中にいる」というシーンを考える。クラシックな影描画手法だと、「キャラクターには黒い影が投射されて描かれる」でお終いだが、「EoE」の実装の場合は、そのキャラクターに投射される影の部分にも赤い光はあたっている表現となる。これは物理的な意味合いにおいて正しい。なぜなら青い光は届かなかったが、赤い光は届くことになるからだ。

 もちろん、一切の光源が遮蔽された影領域内であっても、環境光によるライティングも行なわれる。影は暗いものではなく、ある特定の光源のライティングを邪魔するものがいるだけなので、この意味において、ASKAエンジンは正しいライティングが行なえるように設計されているのである。

 この考え方は本連載「バイオハザード5」編でも紹介しており、近代の3Dゲームグラフィックス表現においてスタンダードなものとなりつつあるようだ。

【物理的に正しい影表現】
「影は暗くなっている領域」ではなく、「影生成元の光源からの光から遮蔽されている」という物理的に正しい影表現となっている。影領域も環境光で照らされる点に着目!


■ 「EoE」におけるモーションブラー

 「EoE」における印象的なポストプロセスエフェクトは、前述したカメラ撮影シミュレーション部の効果として現われるのがメインになる。モーションブラーなども、ASKAエンジンに対し、設定したシャッター速度に準じたブラーが出るのだ。

【モーションブラー強調有り無しの比較】
左がモーションブラー強調無し、右がモーションブラー強調有り。強調ありなしでポーズが微妙に変化しているのは取得フレームが微妙にずれているため

 なお、モーションブラーの実装形態は、本連載で紹介した「CRY ENGINE2」編の手法に準じた実装となっている。詳細はそちらを参照して欲しいが、ここでも簡単に原理を紹介しておこう。まず、オブジェクトの前フレームの状態と、現在の状態とで対応するポリゴンがどのくらい移動しているかを算出し、この値を単位時間あたりの速度情報としてテクスチャへレンダリングする。これが視点から見た画面内オブジェクトの速度分布をテクスチャ化したベロシティマップとなり、これを参照しつつ、動いた方向に速度の幅だけぼかしていくというのが基本的な流れとなる。

 「EoE」では、視点(カメラ)の動きから算出されたそのフレーム全体の移動速度と、キャラクター・アクションから算出される速度を同一のベロシティマップに生成していて、さらにその動きをより過激に見せるためにベロシティマップを強調させる「味付け」も負荷している。ベロシティマップを強調すると、モーションブラーとして出力されるブレがより大きなものとなる。

 CRYTEKの実装では1/2解像度のベロシティマップにガウスブラーを適用して膨張処理を行なっているのに対し、トライエースの実装では、ベロシティマップを1/8解像度まで下げる代わりに、もう少し真面目に速度量に応じた膨張、マスク生成をしている点が異なる。これはベロシティマップの膨張処理を速度値を参照して行なうためだ。

庄子氏「『EoE』では、アクションを過激に見せるために、ベロシティマップの強調は強めに与えていますね。カメラブラーもオブジェクトモーションブラーも共にやや過度に掛けてスピード感を増強した演出がなされています。ブラーのマスターレートは1.0が、カメラシミュレーションの結果として正しいブラー度なのですが、『EoE』ではシーンによっては3.0を与えているところもありますよ」

 EoEにおけるモーションブラーの処理系は基本的にはCRYTEKの実装によく似ているが、オブジェクトの外にもブラーを伸ばすため、各ピクセルに対して、自分自身に影響を与えそうな速度値を近傍から荒く探索して拡張した中間的な仮膨張べロシティマップを作っているのが特徴となっている。詳細な探索及びブラーはこの後段で別途行なうため、かなり大ざっぱなものになっている。

 イメージとしては、最初に探索の方向だけ決めて(前段)、次にその方向に対して小刻みに探索(後段)をするような感じになる。この時のタップ数は8方向の8だが、単純なブラー処理ではないため、この仮膨張ベロシティマップは、ずらして合成したような見栄えとなる。CRYTEKの実装では、固定サイズのブラーを一様に掛ける実装であったが、キャラクターが大写しになって動く機会の多いEoEでは、複雑なモーションで動くキャラクター達が折り重なっても問題が出ないように、やや手の込んだ実装となっている。

【ベロシティマップ(解像度はレンダリングフレームの1/8)】
強調無しのベロシティマップ(左)、速度を意図的に増して生成したベロシティマップ(右)
左が膨張無し、中央が膨張有り。ベロシティマップの膨張処理は速度値を参照して行なう。そのため、自然と膨張領域が拡大する。膨張処理はいったん右のような仮膨張イメージを作り、元ベロシティマップと、その仮膨張の2枚を元に最終的な膨張ベロシティマップを生成している

【モーションブラー・Z値マスク】
左はZ値の段差を見てブラー制御を抑制する処理を加えた例。これをやらないと、シーンの前後を無視したブラーが出てしまう。右はブラー抑制処理無し。速い動きでは差がわからないため、処理軽減のため製品版ではこちらを採用している。動きの激しい周辺に空間が歪んだような誤った表現が出ているが、コレはコレでかっこよく見える

 被写界深度の表現についても、カメラシミュレーションの結果として再現されており、選択しているレンズが何枚羽根絞りなのかによってボケの形状も変わる。実在のカメラにおいても、絞りを開放に近づけていくと、絞り形状が多角形から円に近づいていくが、ASKAエンジンでは、そこまでが再現される。

 絞り形状が多角形の場合、レンダリング結果に対してちゃんと多角形状にサンプル点をサンプリングしてぼかす処理系を組み込んでいる。3Dゲームグラフィックスの被写界深度の表現において、よく問題になるのが、ピントが大きくずれて半径のでかいボケが出た際に、見られるツブツブ状のエリアシングだ。これは、そのぼかし処理においてサンプリング数が少ないときに強く表われる。

 この問題についてASKAエンジンでは、レンダリング結果をより低い解像度の複数レベルのMIPMAP構造で持ち、でかいボケが出た際には解像度の低いMIPMAPからサンプリングするという、いわゆる縮小バッファ的なアプローチの手法を実装することで解消している。もちろん、低解像度バッファからサンプリングして作り出した大きなボケはかなり大ざっぱなものになるが、現実のカメラにおいても大きなボケはボヤ〜としたものになるので、不自然さはない。

【被写界深度のシミュレーション1】
左は六角形の絞り形状。EF28-200 F3.5-5.6 80mm F6のバーチャルレンズで撮影。右は絞り開放。EF28-200 F3.5-5.6 80mm F4のバーチャルレンズで撮影

【被写界深度のシミュレーション2】
大きなボケは何も考えないで実装すると、サンプル点が有限であることから、このようにブツブツ状のアーティファクトが出てしまう(左)。製品版「EoE」では、低解像度の複数レベルのMIPMAPを用いて、有限のサンプル点数にとどめながら広範囲サンプルを疑似的に実現。ほぼ同負荷でこのクオリティの大ボケを実現

【トライエースのカメラシミュレーション】
左から順に手前に合焦、人物に合焦、背景に合焦。フォーカス位置によって画角が微妙に変化しているのがわかるだろうか


■ 「EoE」のグローバルイルミネーション

SHライティングによる環境光の表現

 「EoE」では、自然な環境光ライティングが印象的だが、特別な事前計算ベースのグローバル・イルミネーションの仕組みは採用されていない。それでは、どのようにしてああいったナチュラルライティングを実現しているかというと、ASKAエンジンでは環境光ライティングを球面調和関数(SH:Spherical Harmonics)ライティングベースで実装しており、これが「EoE」のライティング表現のキモとなっているのだ。

 球面調和関数とはなにかという話題については本連載「KILLZONE2」編や、「バイオハザード5」編にて解説しているので詳細はそちらを参照して欲しいが、ここでも簡単に解説しておこう。球面調和関数とは全方位のエネルギー分布を少ないパラメータで圧縮できる仕組みのこと。

 パラメータが少ないと復元したときには情報としては大ざっぱなものとなる。この球面調和関数(SH)を用いたSHライティングとは、球面調和関数で表現された、各方向に色や輝度の異なる光を放射状に発する全方位発光体を用いてライティングを行なう仕組みになる。環境光とは自発光する光源が放った光が方々で相互反射したり拡散したりしてそのシーンに充満した大ざっぱな柔らかい光のことだが、これは球面調和関数で表現するテーマとしてはおあつらえ向きなのだ。

 ASKAエンジンでは、シーン内に点光源、並行光源、面光源など、多様な光源を無制限に置くことができ、それらを球面調和関数で表現した全方位光源に置き換える機能を持っている。イメージ的にはシーン内に置かれた複数の光源を、環境光として実装する際にはSH光源として圧縮してしまうと言うイメージだ。

 「EoE」では、そのシーンに置かれた複数の光源達が作り出すグローバルイルミネーション的な環境光を、ASKAエンジンのSH光源の機能を活用して実装し、これで背景やキャラクター達を統合的にライティングしているのだ。これにより、背景とキャラクター達、光源達が一体感のある見栄えとなっているのである。


【点光源の配置例】
Askaエンジンでは複数のアンビエント光源をSH化する機能があるが、「EoE」ではこの例の様に最大4つの動的光源による通常のPerPixelライティングの割合が大きい。たとえば、このシーンでは、キャラクター専用光源も含めると全部の17個の光源が配置されている



■ 「EoE」における物理シミュレーション

物理シミュレーション用の間接(ボーン)を可視化したショット

 物理シミュレーションについては、前述したようにASKAエンジンではトライエース内製のものを開発、実装しており、「EoE」ではこれを主に活用している。

 衣服などの動きは非常にリアルだが、これは布の物理シミュレーションを利用しているのではなく、ASAKAエンジン側の基本物理シミュレーションである衝突物理、バネ物理を組み合わせて実現させたものだ。主要キャラクターの髪の毛には250個もの物理シミュレーションで制御されるボーンが仕込まれていることも前述したが、アクションによって振り乱されるそうした髪の毛の挙動も、ASKAエンジン側の基本物理シミュレーションによって算出されている。

 また、キャラクター達を斜面や凹凸などに正しく追従してポージングできるように、ASAKA側の物理シミュレーションエンジン部で用意された逆方向運動学(IK:Inverse Kinematics)制御のボーン処理を活用している。

五反田氏「物理シミュレーション部分については基本設計は『ヴァルキリープロファイル2』時代のPS2エンジンのものと同じですが、ハードウェアスペックが上がった分、計算精度を上げています。具体的にいうと、摩擦の処理については正確になっていますね。PS2時代では、物体が接触したときに生じる垂直抗力を速度ベクトルを無視して一律に発生させる実装になっていましたが、ASKAでは全て正確に計算するようにしています」

 この他、「EoE」では、ダメージを受けたときの人体が吹っ飛ぶ表現などは、ASKAエンジン側の物理シミュレーションで提供されない、独自のラグドール物理シミュレーションで実現されている。ただし、これは、ASKAエンジン開発チーム側の開発ではなく、「EoE」のプロジェクトチーム内製のものだという。

五反田氏「ASKAでは、物理シミュレーションエンジンはCELLプロセッサのSPEを積極的に活用する形で設計、実装されています。実際に走らせてプロファイルをとってみると、物理シミュレーション部分はXbox 360よりもPS3の方がだいぶ速いですね。『EoE』を動かすにあたってはパフォーマンス面でPS3とXbox 360とでは差がでないように負荷調整がなされていますけど、負荷率を見るとこの部分ではPS3の方が余裕はあります」


【ラグドール】
トライエースオリジナルのラグドール・シミュレーション

【キャラクターダイナミクス】
基本設計はPS2時代と同じだとされるトライエースの物理シミュレーションエンジンだが、プロセッサパワーが向上した今世代機に合わせて演算精度を大幅に向上させている

【逆方向運動学(IK:Inverse Kinematics)】
IK制御はトライエースのASKAエンジンオリジナルのものになる


■ 開発はXbox 360で実施。ASKA効果でPS3へのポーティングは3週間で完了

実機デモによるプレゼンテーションをする五反田氏と庄子氏

 「EoE」の開発は、ASKAフレームワークを用いつつも、基本的な開発はXbox 360をターゲットとして行なわれていたという。しかし、「EoE」開発チームは、PS3へのポーティング(移植)を前提としたプログラム設計を行ないつつ、Xbox 360版を作り込んでいたこと、ASKAフレームワークの統合開発環境の効果との相乗効果もあり、驚くべき短期間でPS3版の開発も終えることができたという。

五反田氏「9月の東京ゲームショウにPS3版の出展が決まり、動かせるPS3版を迅速に用意しなければならなくなり、絶対無理だろうと思ったら、『EoE』開発チームは約3週間でポーティング作業を終えてしまいました。我々エンジン開発側もこれには驚かされましたね。その他、細部の後調整を含めてもPS3版は約2カ月で完成しました」

庄子氏「『EoE』開発チームのプログラマはだいぶPS3を意識してプログラム設計を行なっていました。PS3は、メインメモリとビデオメモリが分断されている関係で、どうしてもメインメモリが足りなくなりがちですが、これもうまく回避する設計としていたようです。デザインチームはあまりPS3を意識していなかったようで、主要キャラクターのポリゴン数の多さはその表われとも言えます(笑)」

 「EoE」は、前でも少し触れているようにPS3版とXbox 360版との差異は軽微だ。PS3版ではポリゴン数やシェーダーの微調整による負荷調整は行なったものの、最終ビジュアル品質の面でXbox 360版にほぼ見劣りする部分はないという。これはPS3ユーザーにとっては朗報だ。

 両バーションを比べたときに、あえて差が目立ちやすい要素を挙げるとすれば、前述した影生成技法の違いから来る影の描画品質だ。PS3でカスケードシャドウマップ技法が採用できない部分があったのは、やはりPS3の頂点ピーク性能の低さが響いた結果のようだ。カスケードシャドウマップ技法では、シャドウマップを複数枚に分けて生成する際に反復的なZバッファレンダリングを行なうが、この際、ピクセルシェーダー負荷は軽いが、ジオメトリ処理が反復的に行なわれることで頂点シェーダーに高い負荷がかかってしまう。

 カスケードシャドウマップ技法は、頂点ピーク性能の低いPS3ではパフォーマンスが出しにくいと判断され、単一シャドウマップとしては影の描画品質がそれなりに高いとされるライトスペース・パースペクティブ・シャドウマップ技法の方を採択したということのようだ。ただ、ライトスペース・パースペクティブ・シャドウマップ技法は、影生成元の光源ベクトルと視線ベクトルが同一方向に近くなると、シャドウマップ利用効率がワーストケースに近づく弱点があり、つまり、PS3版では、光源と視線の関係性によっては影の描画品質に若干の揺らぎが起こりうるのだ。



■ 進化を続けるASKAエンジン

 ASKAエンジン第1世代最後のタイトルとなった「EoE」。気が早いファンは、すでにASKAエンジン第2世代のタイトルがどういうビジュアルを見せてくれるのか、気になっているだろう。

 ASKAエンジン第2世代以降の3Dゲームグラフィックスにはどういった新要素を期待できるのだろうか。次世代ASKAエンジンの目玉となる表現についてのヒントを五反田氏に伺ってみた。

五反田氏「現在、3Dゲームグラフィックスで実用化されているグローバルイルミネーション(GI)は、突き詰めて言ってしまえば場所ごとに環境光が違うだけですよね。その環境光がちゃんと相互反射や二次反射に即したものであるという点ではいいのですが、オブジェクトへのライティングそのものは変わっていません。陰影をそのシーンに溶け込んだ環境光で出せるのはいいんですけど、その環境光で照らされた材質がみんな同じに見えてしまうことが問題です。これは現在の3Dゲームグラフィックスで採用が盛んなGIでは拡散反射のみに配慮していて、鏡面反射(スペキュラ)の要素を省略してしてしまっている点が原因だと思うんです。我々は、現在、3Dゲームグラフィックス向けのGIにスペキュラを導入する技術を研究開発中です。“ハードの世代が変わったほど”というのは言いすぎにしても、かなり高い効果が得られているので、いずれこの技術の採用タイトルが出てきたときには詳しく解説させていただきますよ」

 現在、最先端の3Dゲームグラフィックスの研究では、次なるリアルタイムGIのテーマに関する研究が盛んだ。2009年最後の本連載でも取りあげた「イメージ・スペース・フォトン・マッピング」などは、そうしたテーマの1つである。「EoE」も今世代の3Dゲームグラフィックスとしては、かなり先進的なものであったことは間違いないが、トライエースはこれに満足することはなく、さらにまた上質の表現に向けて次世代技術の開発に取り組んでいるのだ。

 成熟期を迎えたともいわれるPS3、Xbox 360。その3Dゲームグラフィックス表現は横並びになりつつあるともいわれるが、ここからさらに飛び出した表現を行なうため、トライエースは日々、ASKAエンジンの進化に勤しんでいく。


(C)SEGA
Developed by tri-Ace Inc.

(2010年 4月 2日)

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