連載
西川善司連載 / 「DiRT 2」のグラフィックスオプションで知るDirectX 11世代のポテンシャル
Windows 7が発売され,新しいWindowsの時代が幕を開けたわけだが,それと同時に新しいグラフィックスAPIとしてのDirectX 11(≒Direct3D 11)も登場した。そう,Windows 7,そしてWindows Vista環境におけるDirectX 11時代が始動したのだ。
DirectX 11世代に対応したGPUとしては,AMDがATI Radeon HD 5800シリーズで一番乗りを達成。とりわけ「ATI Radeon HD 5850」の評判は上々で,出荷量不足などもあり,一時期は店頭で見つけるのも困難だったほどだ。
かくして,あとはDirectX 11世代のゲームタイトルが普及するのを待つばかりとなったのだが,いち早くイギリスのCodemastersが「Colin McRae: DiRT 2」(以下,DiRT 2)PC版をDirectX 11に完全対応させて2009年12月に発売すると宣言。その予告どおり,(パッチレベルではない)世界初のDirectX 11対応タイトルとして,2009年12月にリリースしたのだ。
開発に当たってAMDの技術協力を受けたとされる本作だが,果たしてどんなグラフィックスを体験できるのか? 用意されているグラフィックスオプションからそのへんをじっくり探ってみることにしよう。
DiRT 2のメニューはインゲームのGUIになっていて,早い話,グラフィックスのメニューがどこにあるのか分かりにくい。キャンピングカーを出たところにある「OPTIONS」の,さらに階層下にある「GRAPHICS」がグラフィックスオプションとなる
DiRT 2は,ドライブ系のゲーム開発に定評のあるCodemastersが贈る,オフロードをテーマに据えたレース/ラリーゲームの最新作だ。PC向けの日本語版はリリースされていないが,12月初頭からSteamなどで配信が始まっているほか,並行輸入品がPCゲームショップの店頭を賑わしてもいるので,入手性は良好だろう。
また,ATI Radeon HD 5800/5900シリーズを搭載したグラフィックスカード製品の中には,DiRT 2のフルバージョンを無料でSteamなどからダウンロードできるクーポン券が封入されているものもあるので,対象製品を持っている人はチェックしてみるといいだろう。
ちなみに,DiRT 2にはベンチマークモードが搭載されているので,普段ゲームをプレイしないという人でも(DirectX 11対応GPUを持っているなら)一度は動かしてほしい。
また,このベンチマークモードは,DiRT 2の体験版にも実装されているので,ちょっと試してみたいという場合,4Gamerに掲載したデモ版をダウンロードすることをオススメしたい。ゲーム性の評価については,2009年11月に掲載したレビュー記事を参照してもらえれば幸いだ。レビューはPlayStation 3/Xbox 360版のものだが,ゲームの内容に違いはない。
というわけで,さっそくここからはグラフィックスオプションを見ていくわけだが,結論めいたことを先に言うなら,もともとDiRT 2自体がPlayStation 3/Xbox 360向けに開発されていたということもあって,グラフィックスエンジンのベースはDirectX 9世代のGPUに対応したものとなっている。DirectX 10世代のGPUが持つ機能は性能向上のための最適化目的に使われ,DirectX 11世代のGPUが持つ機能は,ピンポイントの表現力アップに使われているという感じだ。
まあ,DirectX 11がリリースされたタイミングと,本作の発売時期を考えれば,かなりがんばっている印象である。
さて,グラフィックスオプションの項目ラインナップは,基本的に製品版と体験版で違いはない。
ただ,細かく見ると,DirectX 11以外の環境において,体験版では「AMBIENT OCCLUSION」(アンビエントオクルージョン)の設定項目が省略され,また,「POST PROCESS」(ポストプロセス)の最上位設定となる[ULTRA]が選べない。この点を踏まえつつ,以下,グラフィックスオプション,「GRAPHICS」の内容をチェックしていこう。
基本的なレンダリングパラメータを設定するのが,このセクションになる。
画面の解像度を決めると同時に,レンダリング解像度にも相当する設定。値を高くすればするほど美しくなるが,当然ながらそのぶん,描画負荷は高くなる。
対応機種としてPlayStation 3/Xbox 360を想定して開発されたタイトルだけに,テクスチャなども高解像度で作成されており,高解像度(1280×720ドット〜1920×1080ドット)で表示したときのビジュアルの違いは明らかだ。使用しているPCにとって負荷が高すぎると感じたときは,解像度を高くしたままで,後述するアンチエイリアシングのサンプル数を下げるか,あるいは,解像度を一段低くして,アンチエイリアシングのサンプル数を上げるという選択が考えられる。
少しだけアドバイスしておくと,パネルサイズが20〜22インチで1920×1080ドット程度という,最近増えてきた液晶ディスプレイを使っている場合は,レンダリング解像度をパネル解像度と同じ値に設定し,アンチエイリアシング設定を下げたほうが,パリッとしたクリアな画質が得られる。
一方,30インチ以上のフルHDテレビと接続する場合は,解像度をパネルと同じに設定したうえで,フレームレートに影響が少ない範囲でアンチエイリアシングを適用すると,高解像度感と滑らかさが両立した美しいゲーム画面が得やすい。
レンダリングを毎秒何コマ(=フレーム)で行うかを設定するもの。
本連載で何度か書いてきたように,この設定は「グラフィックスカードから出力される映像のリフレッシュレート」とは異なり,あくまで「ゲームエンジン側が毎秒何フレームをレンダリングするか」を決めるものであるという点に注意が必要だ。
この値を上げれば上げるほどゲームの動きは滑らかになるが,そのぶんGPUへの負荷は高くなる。
選択可能な設定値は環境に依存すると思われるが,筆者が今回テストした「ATI Radeon HD 5850」搭載グラフィックスカードと,HDMI接続ディスプレイの組み合わせでは,選択肢として[23/24/59/60/67/70/72/75/85]が用意されていた。
多くの液晶/プラズマディスプレイでは,表示レートの上限が60Hzあたりになっているので,表示が重いようなら下げればいいだろう。
ここで,アンチエイリアシングの設定を行う。
ご存じのように,コンピュータグラフィックスは格子状に並んだ多数の画素によって描かれるため,オブジェクトの形状によって「ジャギー」と呼ばれる階段状のギザギザが目立ちやすくなる。これを低減させるのがアンチエイリアシング処理で,DiRT 2では,アンチエイリアシングを実現する手法として「Multi-Sample Anti-Aliasing」(マルチサンプリングアンチエイリアシング,以下 MSAA)法を採用している。
設定値はPC環境によって変わってくるが,上記したATI Radeon HD 5850を搭載した環境では2x/4x/8x MSAAを選択でき,さらに「GeForce GTX 280」を搭載した環境では,これに加えて8x/8xQ/16x/16xQ CSAA(Coverage Sampled Anti-Aliasing)が選択できた。
なおDiRT 2は,透明ピクセルを含むテクスチャのエッジに対してアンチエイリアシングを施す,Transparency Anti-Aliasing(トランスペアレンシーアンチエイリアシング)には対応していないようで,MSAAの設定を変えてみても,網のジャギーは低減されなかった。
これは,垂直同期を取るか取らないかの設定を行うもので,前出のREFRESH RATEと関係が深い。つまり,「ON」を選択すると,REFRESH RATEで設定された値でレンダリング結果を表示する固定フレームレートになるわけだ。反対にOFFだと,REFRESH RATEと同期を取らない可変フレームレートなり,そのPCが持つ最大の値が得られる。
ゲーム側がフレームレートの上限を決めるタイトルも多いが,DiRT 2ではPCのパフォーマンス次第の“青空天井”で,純粋な可変フレームレートになるようだ。
垂直同期の有効と無効,「どちらがいいのか?」というのは永遠の議論で,筆者的には好きなほうを選べばいいと思うのだが,GPUの能力を計測するベンチマークモードでは,垂直同期を無効にすべきだろう。
垂直同期をOFFにして可変フレームレートにすると,「ディスプレイが描画を完了するのを待たずに(=垂直同期をとらずに)次のフレーム表示へ移行する」ため,「Tearing」(ティアリング)という現象が生じる可能性が高まる。一瞬で描き変わっているように見えるゲーム画面も,実は左上から1ドット/ラインずつ順番に描画しているので,ディスプレイが一画面を描画し終えないままにGPUが次のフレームの描画を始めてしまうと,タイミング次第では表示が上下でズレて見えてしまう。これがティアリングだ。
フレームレートの変動を少なく,なおかつティアリングを回避してプレイしたい場合は,VSYNCをOFFにした状態でベンチマークテストを実行し,最低フレームレートを計測。その値に一番近いREFRESH RATEの値を設定して,それからVSYNCをONにすればよいだろう。
これはアスペクト比を設定する項目で,選択肢は[NORMAL][4:3][5:4][16:9][16:10][5:3]が用意されている。
NORMALは事実上の自動設定で,レンダリング解像度の縦横画素比率をそのままディスプレイのアスペクト比に割り当ててくれる。通常はNORMALを選んでおけばOKだ。
ではなぜNORMAL以外の選択肢が用意されているのかというと,エントリークラスのテレビ製品に多い,「長方画素系」に対応させるためである。
現行製品を例に挙げると,パナソニックのプラズマテレビ「TH-P42X1」「TH-P37X1」はそれぞれ42インチ,37インチでアスペクト比16:9の製品だが,画素は長方形になっており,それぞれ1024×768ドット,1024×720ドットに相当する。
画面比率が4:3になる1024×768ドットは,ご存じのようにXGAとして知られる解像度だが,TH-P42X1では横長の長方画素によってこれを16:9で表示しているのだ(つまり横方向の解像度が低い)。TH-P42X1を例にとるなら,上記のレンダリング解像度(RESOLUTION)で1024×768ドットを選択し,アスペクト比はNORMALではなく16:9を設定すべきなのである。
以下にアスペクト比と,正方画素系の場合の解像度を示しておくので,設定の参考にしてほしい。
- 4:3…640×480,800×600,1024×768,1400×1050,1600×1200,2048×1536,
3200×2400 - 5:4…1280×1024
- 16:9…848(〜856)×480,1280×720,1360(〜1366)×768,1920×1080
- 16:10…1280×800,1680×1050,1920×1200
- 5:3(15:9)…800×480,1280×768
ゲーム画面の階調カーブ(ガンマ補正)を設定するもので,設定できる範囲は0.1刻みで0.5〜2.5となっている。
ガンマ値の直接指定ではなく,基準値からのズレを指定していると思われ,通常はデフォルト設定の1.0を動かす必要はない。HDMI接続したディスプレイで,階調が暗すぎる/白すぎると感じた場合は,もともとHDMIの階調レベルの設定を間違えている場合がある。GAMMA値を変更する前に,筆者のコラムを参照してほしい。
ここからは,ゲームエンジンの描画設定に関わるパラメータを設定することになる。
●CHOOSE PRESET(プリセットの選択)
各種パラメータに対して一括設定を行うもの。バリエーションとしては[ULTRA LOW][LOW][MEDIUM][HIGH][ULTRA HIGH][AUTOMATIC]が用意されている。
もちろん,[ULTRA LOW]が低機能PC向けで,[ULTRA HIGH]がハイスペックPC向けの設定になる。また[AUTOMATIC]は,そのPCに一番適した設定を選んでくれるので,通常はこれを選択すべきだろう。
●NIGHT LIGHTING(夜の光)
DiRT 2の夜のシーンには,あらかじめテクスチャに描き込まれたライトマップと,動的に光源を与えるリアルタイムライティング処理とが共存している。当然,動的光源の数が多いほうがリッチなビジュアルになるが,その代わりGPUの負荷が高くなる。NIGHT LIGHTING設定は,夜のシーンにおける動的光源のライティング品質を決めるもので,[LOW][MEDIUM][HIGH]の三段階が用意されている。
HIGHでは動的光源によるライティングを行い,さらにスポットライト的な光条表現と影生成を行う。MEDIUMでは動的光源のライティングと光条表現は行うが,影生成はキャンセルされる。LOWでは動的光源のライティングをキャンセルし,さらに光条表現もなくなる。それぞれの設定におけるスクリーンショットを以下に掲載しよう。
●SHADOWS(影)
DiRT 2では,デプスシャドウ(シャドウマップ)系の技法によるリアルタイムの影生成が行われている。ここでは,そうした影の描画クオリティにまつわる項目を設定できる。設定範囲は[ULTRA LOW][LOW][MEDIUM][HIGH]の4段階だ。
これらは,実質的にはシャドウマップの解像度を設定するもので,言うまでもなくULTRA LOWが最も低く,HIGHが最も高い。HIGHでは元になるオブジェクトの形状を正確に反映した影が生成され,車のウイングのセルフシャドウなどもきめ細かく描画される。また,細長い影についてもジャギーが目立ちにくい。
設定を下げて行くにつれて,シャドウマップの解像度も下がり,影の形状が大ざっぱになる。そして,ULTRA LOWでは車の影生成が完全にキャンセルされてしまうのだが,静的オブジェクトの影は焼き込みで描かれているので,この設定とは無関係だ。
DiRT 2の影生成は,あまり高度なものではないようで,最高位設定のHIGHでも,光源が遠い影には強いジャギーが出る。さらに群衆については,どのような設定でも影生成は行われない。
●PARTICLES(パーティクル)
水しぶきや土煙といったパーティクル表現にまつわる品質設定で,[OFF][LOW][HIGH]の3段階の設定が行える。
OFFは文字どおり,パーティクル表現なし,LOWとHIGHはパーティクルの解像度を設定するものだが,もともとパーティクル自体がボヤっとしているので,見た目の違いはほとんどない。
ちなみに,LOWでもHIGHでも,パーティクルの境界線をなめらかに消失させるソフトパーティクル処理が行われているようだ。
●MIRRORS(バックミラー)
後方視界を描き出す,バックミラー(リアビュー)の品質を決定するもので,[OFF][LOW][MEDIUM][HIGH],そして[ULTRA]の5段階に設定が行える。レースゲームならではといえる設定だが,コクピットビューでプレイしない場合はあまり関係がない。
OFFは完全にバックミラーの映像をキャンセルしてしまう低負荷設定で,LOW以上からバックミラーに後方視界を鏡像として描き出すようになる。設定の違いは,シーンをバックミラーにレンダリングするときの精度の違いで,具体的には,単純に後方視界の解像度を変えているようだ。
トリビアとしては,どの設定にしても(たとえULTRA設定でも)バックミラーには群衆の姿は描き出されない。目前に広がる観客席は満席でも,バックミラーに見える観客席はすべて空席となっている。プレイ時に確認してみよう。
●CROWD(群衆)
これは,道の脇にいる群衆のLOD(Level Of Detail)にまつわる設定。設定範囲は[NONE][LOW][HIGH][ULTRA]の4段階になっている。
NONEは文字どおり群衆描画を一切キャンセルしてしまう低負荷モードで,ビジュアルよりもフレームレートを重視するプレイヤーや,ロースペックのPC向けの設定といったところ。
LOW以上で群衆が描画されるが,違いは遠景の群衆モデルのポリゴン数にある。HIGHでは遠景も近景も区別なく同じ3Dモデルで描画しているが,LOWの場合,遠景に低ポリゴンモデルを使用する。見た目の違いはわずかなので,LOW設定でも十分かもしれない。
ULTRAは,基本的にはHIGHと同じで,すべての群衆を多ポリゴンモデルで描画するが,さらに近景のモデルに限り,DirectX 11の新たなシェーダステージであるテッセレーションを活用し,自動的に滑らかな曲面を持った多ポリゴンモデルに変換してくれる。
AMDの資料によると,ポリゴンの分割メソッドとして,隣接する頂点の法線を補間して新しい頂点を生成する「N-PATCH法」が採用されているとのこと。DirectX 10世代以下の環境でもULTRA設定を選択できるが,DirectX 11世代以上のGPUでないとグラフィックスに変化は起こらない。
各設定ごとのスクリーンショットを下に示そう。
群衆はかなりアグレッシブに動くため,比較するのはなかなか難しいが,よく観察すれば,ULTRAとHIGHの相違として頭部の丸み具合や,肩や腕のカーブの滑らかさの違いなどが確認できるはず。だが,HIGHとLOWの区別はかなり難しい。
●GROUND COVER(地表植物)
GROUND COVERとは,地表に描写される植物のことで,この項目で背景の地面に生い茂る植物の密度設定を行うことになる。設定には[OFF][LOW][HIGH]の3段階がある。
OFFでは地表の植物描画をキャンセルするが,DiRT 2でいうGROUND COVERとは,透明な板ポリゴンに植物のテクスチャを貼りつけた,いわゆるビルボード表現による草木のことを指している。そのため一見,雑草のように見えても,それが3Dモデルで作られていた場合,設定をOFFにしても描画される。
LOWでは近景の植物はそこそこ高い密度で描くが,遠景の植物を大胆に削る。そしてHIGH設定では,遠近に関わらず,シーンで指定された密度ですべての地表植物を描く。
植物自体,相当な量あるのだが,ビルボード表現された植物は同じテクスチャを使い回すことが多いため,キャッシュに乗りやすい。そのためフィルレートの食いつぶしが少ないようで,設定をHIGHからLOWに切り替えても,あまりフレームレートは向上しないが,OFFにすれば数フレーム向上する。
●DRIVERS(運転者)
ドライバーモデルに関する描画品質を決定するオプションで,[OFF][LOW][MEDIUM][HIGH][ULTRA]の5段階設定だ。
ULTRAではドライバーが多ポリゴンモデル,ナビゲーターが中程度のポリゴンモデルになり,HIGHでは運転者とナビゲーターの二人ともが中ポリゴンモデルになる。MEDIUM設定では,運転者が中ポリゴンモデルでナビゲーターが低ポリゴンモデルになるが,LOWとMEDIUMの違いはあまりハッキリ分からない。
群衆の描画と違い,運転者描画にはDirectX 11のテッセレーションが用いられておらず,DirectX 10世代以下のGPUでもULTRA設定が選べる。
●DISTANT VEHICLES(遠景の車)
遠く離れた場所にいる車両の描画品質を決めるのがこの設定。これには[LOW][MEDIUM][HIGH][ULTRA]の4段階がある。
DiRT 2の車両には,3段階のポリゴンモデルバリエーションが用意されているようで,LOW設定では,比較的近景から低ポリゴンモデルの使用を開始する。逆にULTRA設定では,かなり遠距離の車でも,ホイール形状やテクスチャなどが正確に再現される。
●OBJECTS(背景オブジェクト)
背景オブジェクトの描画を設定するもので,範囲は[ULTRA LOW][LOW][MEDIUM][HIGH][ULTRA]の5段階。
考え方は上記DISTANT VEHICLESと同じであり,ポリゴン数の増減やテクスチャの解像度の変更によって,描画の品質とPCへの負荷を設定するものだ。
ULTRAでは遠近問わず,すべての背景オブシェクトが高品位の多ポリゴンモデルで描画される。掲載したスクリーンショットで言うなら,画面左側のアーチのシルエットが美しい曲線になっているのがその効果。HIGHでは中距離のオブジェクトが中程度のポリゴンモデルになるほか,テクスチャの解像度が落とされたり,遠景の一部の法線マップ適用がキャンセルされる。スクリーンショットのアーチが角張ってしまっているのが,お分かりだろうか。
MEDIUMでは中距離のオブジェクトの低ポリゴン化がさらに進み,LOWではもう一段階,遠景のポリゴン数が削減される(正面のビル群に注目)。そしてULTRA LOWでは,その低ポリゴンモデルが中距離にあるオブジェクトにも適用されことになる(左側のビル)。
設定を低くすればするほど負荷は軽くなるが,表示そのものがキャンセルされるわけではないので,設定の変更によるパフォーマンスの変化はわずかだ。
●TREES(樹木)
背景に登場する樹木描画の設定。設定範囲は[ULTRA LOW][LOW][MEDIUM][HIGH][ULTRA]の5段階で,上記のOBJECTS設定と同じような感じだ。
設定が下がれば下がるほど,近い距離の樹木が低ポリゴンになっていくが,最下位設定のULTRA LOWにしても,描画される樹木の本数自体は最上位のULTRAと変わらない。GROUND COVERと違って登場する樹木の密度は変化しないため,それほど見た目に大きな変化は起こらないのだ。
●VEHICLE REFLECTIONS(車への映り込み)
車体表面への映り込みを決める設定で,バリエーションとしては[LOW][MEDIUM][HIGH][ULTRA]の4段階が用意されている。
DiRT 2の映り込み表現は,そのシーンをリアルタイムレンダリングしたテクスチャによって実現されているが,この設定は,そのテクスチャの解像度を上下させることと同じだ。
ほかの車両がボディへ映り込む表現まで確認できるDiRT 2だが,LOWを選んだときには,映り込む敵車のみを低ポリゴンモデルで描いて負荷を低減させているようだ。なかなか芸が細かい。
●WATER(水面)
水面の描画を決めるもので,[LOW][MEDIUM][HIGH][ULTRA]の4段階設定。
LOW設定は水面こそ描かれるものの,さざ波も映り込みもキャンセルされた簡易表現になる。MEDIUMでは,さざ波が現れて車の影が水面へ落ち,HIGH設定では,これに加えて周囲の映り込みが表現されるようになる。
MEDIUMとHIGHでの波は,法線マップレベルのもので,ライティングによって凹凸があるかのように見せて波の表現を行う定番の手法だ。
ULTRA設定では,DirectX 11世代のGPUが持つテッセレーションステージが活用され,ジオメトリレベル(頂点レベル)で高低差のある波が作り出されるようになる。
AMDからの資料によれば,まず,テッセレータを活用し,視点からの距離に応じた解像度で水面ポリゴンを分割する。続いて,さざ波生成用のハイトマップ情報(凹凸情報)に従って,分割後の水面ポリゴンの頂点を上下に摂動させるのだが,これにはドメインシェーダを活用する。こうした手法により,大きな高低差のある波を表現しているのである。
●POST PROCESS(ポストプロセス)
レンダリング結果に対し,ピクセルシェーダーによってフォトレタッチ的な処理を施すことをポストプロセスと呼ぶ。この設定は,このポストプロセスの品質を決定するもので,設定範囲は[LOW][MEDIUM][HIGH]の3段階。
HIGHはDirectX 11世代以上のGPU専用の設定で,AMDからの資料によれば,高輝度領域からのブルーム表現(光のあふれ出し)を2パスのガウスフィルタによってレンダリング解像度と同じ解像度で処理しているとのこと。よく見ると分かるが,ボンネットに映った映り込み情景の高輝度部分にも,ブルーム表現やグレア表現が使われている。
つまり,DiRT 2は環境マップもHDR対応ということになる。なお,同じくAMDからの資料によればDiRT 2はDirectX 11世代以上のGPU環境で,テクスチャをフルFP16(R16G16B16A16)のHDRに対応させている,とある。
DirectX 10世代以下のGPU環境で利用できる設定はMEDIUM以下で,MEDIUMでは,HIGH設定のときのブルーム表現が薄く柔らかくなる。これは遠景のブルーム処理をレンダリング解像度の4分の1程度で行っているためだ。HIGHをMEDIUMにすると,予想以上にパフォーマンスが向上する(1920×1080ドット解像度で10フレームほど)。
LOW設定では,ほぼすべてのブルーム処理をMEDIUMの4分の1の解像度で行うが,MEDIUMとの表現差はごくわずかで,パフォーマンスの違いはほとんどない。
●SKIDMARKS(タイヤ痕)
路面に付いたタイヤ痕のオン/オフ設定。DiRT 2ではブレーキ痕や加速時の空転痕などをステッカーのように地面に貼り付ける処理を行っているが,この設定項目によって,それを行うかどうかを決める。テクスチャアクセスが増えるので,ローエンドのGPUではオフにすることを勧める。
●AMBIENT OCCLUSION(アンビエントオクルージョン)
和訳するならば「環境(光)遮蔽」という感じの効果で,最近,流行の表現だ。結論だけいえば,柔らかな“陰影”を画像処理的なアプローチで付け加えるものとなる。
3D処理でよく聞く「Zバッファ」(深度バッファ)とは3Dオブジェクトを描画する際に,ピクセル単位で他者との前後関係を判別するための作業バッファだ。
レンダリングを行うと,そのシーンがフレームバッファに描画される以外に,このZバッファには,描画結果の各ピクセルに1対1に対応した奥行き情報(深度情報:視点からの距離)が残る。つまり,レンダリングを終えたあとのZバッファを参照すれば,視点から見た各ピクセルの奥行き情報が得られるのだ。
ある一つの(ピクセルに対応した)奥行き値に着目したとき,その周辺の奥行き値を調べることで,自分が凹凸の底にいるのが,あるいは頂にいるのか,あるいは片方は壁が立ち塞がっているようだが,反対側は開放されているのかなど,周りがどういう状況になっているのかが分かる。
間接光が周り中から均等に照射されていると仮定し,Zバッファ上の奥行き値一つずつに着目して,そこが,ほかの物体によってどれくらい遮蔽されているのかを調べ,その遮蔽状況に応じて陰影を付けていくのがAMBIENT OCCLUSIONだ。
具体的には遮蔽されていればいるほど黒みを付けていく処理で実現される。完全に疑似的なものではあるが,グローバルイルミネーションぽい“影”表現ができるのが特徴となる。
完全なリアルタイム処理系なので,シーンが動いた場合や,動的オブジェクトがアニメーションしても,常につじつまのあった形で対応できるのが強みだ。もともとはドイツのCrytekが「CryENGINE 2」の開発時に実用化したテクニックだが,今では,Epic Gamesの「Unreal Engine 3」などにも採用され,広く認知されている。
DiRT 2では,このAMBIENT OCCLUSIONの処理をピクセルシェーダではなく,DirectComputeの演算シェーダ(Compute Shader)で処理することにしたことから,DirectX 11世代以上のGPUが搭載されたシステムでないと利用できなくなっている。
設定範囲は[LOW][HIGH]の二段階で,LOWでも影が出るが,かなり淡い。HIGHでは,着目したピクセルの遮蔽調査を広範囲にわたって行うため,より正確な影が出る。
AMDは,「DirectComputeで実装したことには理由がある」としている。AMBIENT OCCLUSIONの実装では,アルゴリズムの関係上,深度バッファに対して反復的な参照を行う。これは非常に高負荷な処理であり,グラフィックスパイプラインとして処理する場合はGPU内部のキャッシュ機構に頼ることでしか負荷低減の手立てがない。そこで,DirectComputeを用い,その深度バッファ調査の範囲内の局所的な深度値群をローカルデータストアに先に格納しつつ処理させることで,大幅な負荷低減を実現させたというのだ。
DirectComputeは一般に「GPGPU向け」と解釈されていて,確かにそれは間違いではないが,もう一方で,このようにレンダリング結果に対し,高負荷な画面座標系のポストプロセスを行う場合の最適化手段としても注目を集めているのである。これまでGPUのキャッシュシステムの振る舞いは,そのGPUのアーキテクチャに依存し,触ることが出来なかったが,DirectCopmuteであれば,キャッシュメモリとほぼ同じ速度のオンチップメモリであるローカルデータストアを,実装するアルゴリズムに適した形で多目的に利用できる。ここがポイントなのだ。
下のスクリーンショットで,LOW設定とHIGH設定の比較を示そう。
HIGH設定では,車の左右にある緑の時計マーク入り光電管装置の足元に自然な影が出ているのが分かるはず。また,左側の黄色いテントの中の影や,「Flip」と書かれた地面置き看板と縦置き看板の接触している付近にも相互投射影的な影が出ているのが分かる。
●CLOTH(布)
布の表現に関するグラフィックス品質の設定。主に背景物としての旗の表現に影響するが,一部の柄の長い旗は無関係となっている。基本的には風でバタバタと揺らめくものに対して効く設定という認識でいいだろう。
設定範囲は[OFF][LOW][HIGH]の3段階で,OFFでは完全に旗が消失し,柄の部分だけが描かれる。
LOWでは低ポリゴンの旗が描かれ,さらにちゃんと風にはためくアニメーションが適用される。さらにHIGHでは,この旗に対してDirectX 11のテッセレーションステージによってモデルを滑らかに分割してから描くようになる。
ちなみに,テッセレーションのメソッドはCROWD(群衆)の場合と同じで,N-PATCH法を採用している。旗のアニメーション処理そのものは低ポリゴンモデルに対して行われるが,描画時に多ポリゴンモデルにされるため,見た目がリッチなものになる。
なお,DirectX 10世代以下のGPU環境でもHIGH設定は選べるが,描画の結果はLOW設定と変わらない。
DiRT 2のテッセレーションの活用は,DirectX 11対応初期タイトルとしては,想像どおりの内容だった。
DirectX 9世代のGPUを搭載したPlayStation 3/Xbox 360がまだまだ現役である以上,マルチプラットフォームタイトルを手がけなければならない大手ゲームスタジオとしては,DirectX 11世代GPUを前提としたゲームに移行できるはずはない。したがって,今回のDiRT 2のような,LODに従ってテッセレーションを導入していくといった設計が一番現実的なソリューションであり,技術の流れを考えても自然なことだと思う。
群衆であったり水面であったり,テッセレーションが完全な脇役になっているのは残念だが,これが主要キャラクターの描画などに適用されていくようになれば,DirectX 11世代GPUの旨味もどんどん出てきて,ユーザーとしても安心して移行できるだろうが,それにはしばらく時間がかかるだろう。
また,効果としては地味だったものの,ポストプロセスのアクセラレーションにDirectComputeを活用していた点も評価に値する。「ゲームにおけるGPGPUの活用先」と聞くと,すぐAIやら物理シミュレーションやらを連想してしまうが,DirectX 11世代GPU環境が浸透していない現在の状況では,まだゲーム性の根幹に関わる活用は難しい。
その点,DiRT 2で実装されたような,レンダリングエンジンのアクセラレーション手段としての活用は,ゲーム性とは関わりなくビジュアル面でリッチに活用できるため,とてもリーズナブルに現行のゲームグラフィックスエンジンに組み込める。
2010年は,AMDのライバル,NVIDIAもDirectX 11世代のGPUを投入してくると見られる。
AMDとNVIDIA,双方の駒が出揃う2010年には,より進んだDirectX 11の活用が見られることだろう。今から楽しみだ。
- 関連タイトル:
Colin McRae: DiRT 2 日本語マニュアル付英語版
- 関連タイトル:
DirectX
- この記事のURL:
キーワード
(C) 2009 The Codemasters Software Company Limited ("Codemasters"). All rights reserved. "Codemasters"(R), the Codemasters logo and “DiRT”(R) are registered trademarks owned by Codemasters. “DiRT 2”TM is a trademark of Codemasters. "Colin McRae”TM and the Colin McRae signature device are registered trademarks of Colin McRae. All other copyrights or trademarks are the property of their respective owners and are being used under license. This game is NOT licensed by or associated with the FIA or any related company.