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

3Dゲームファンのための「3DMark 05」エンジン講座(前編)
新しい影生成技法Perspective Shadow Mapsに注目



 久々となる3Dゲームファンのための3D講座では、先月末より公開が始まった3DMark05を取りあげることにしたい。なお、本稿はFuturemarkより提供された技術資料と筆者の独自取材を元にしている。


■ 「3DMark 05」登場~その登場に秘められた意味とは?

3DMarkシリーズの先祖的存在である「Final Reality」
初代3DMarkの「3DMark 99」。メガデモ「Final Reality」から、3Dベンチマークソフトの「3DMark」シリーズへ
3DMark03より。プログラマブルシェーダ2.0仕様の活用は、蝶が飛び、亀が這うGame Test4「Mother Nature」に限定的に活用された
 「3DMark」シリーズは、言わずとしれた業界標準の3Dベンチマークソフトだ。その歴史については「MAX PAYNE」のレビュー記事で詳しく触れているので、そちらを参照して頂きたい。

 「3DMark」シリーズは、現在、事実上のPCグラフィックスパフォーマンス評価基準となっており、今やその実行によって算出されるスコアの高低が、そのPCにおける3Dゲームパフォーマンスの善し悪しを表していると見なされている。また、各グラフィックスプロセッサ(GPU)の相対的な3Dグラフィックス性能は、この「3DMark」のスコアで判断されることも多い。それだけに新しい「3DMark」の登場は、業界やユーザーに与える影響が大きいのだ。

 さて、今回、新登場した「3DMark 05」にはどのような意味が込められているのだろうか。2003年2月に登場した「3DMark 03」は、プログラマブルシェーダ1.Xをメインに活用した3Dグラフィックスがメインであった。当時、既にGPUとしてプログラマブルシェーダ2.0完全対応のATI RADEON 9700が登場してからしばらく経っていながらも、「3DMark 03」のグラフィックスエンジンは1.Xベースの設計を採用していた。

 ローエンドクラスのGPUにまでプログラマブルシェーダ2.0が搭載され、プログラマブルシェーダ3.0仕様のGPUまで登場した昨今において、「3DMark 03」はハイエンドクラスGPUで実行させた場合には、そのスコアがそろそろ飽和状態になりつつある。算出スコアが飽和状態になれば的確なパフォーマンス診断がやりにくくなるのは言うまでもない。

 3DMark 03の寿命がそろそろ近づいてきた。3DMark05は、そんな状況の中での登場となったわけだ。


■ 「3DMark 05」のグラフィックスエンジンの秘密

MAX-FXエンジンを使っていたのはこの3DMark2001まで
 実際に「3DMark 05」を実行してみるとわかるが、Pentium 4 3GHzクラスとGeForce 6800 Ultraクラスで実行しても、その動きはもっさりとした感じで、かなり重いことが実感できる。ここまで重いのは一体なぜなのだろう?

 「3DMark」シリーズは、「3DMark 2001」までは「MAX PAYNE」用に開発されたゲームエンジン「MAX-FX」エンジンの独自カスタム版を使用していたが、「3DMark 03」ではMAX-FXから決別し、3DMark 03オリジナルエンジンを活用していた。

 今回登場となった3DMark 05も、3DMark 03と同様、新設計のグラフィックスエンジンを開発、これを採用している。エンジンといっても、一般的なゲームエンジンのような汎用性はほとんど無く、実際には各Game Testを実行するためにAPIを整理してまとめたスタイル、いわゆるWRAPPER程度の原始的なもののようだ。

 さて、3DMark 05では、すべてのGame Testにおいて実際のリアルタイムレンダリングが行なわれている。ライティング、影生成、キャラクタアニメーションのスキニング処理などは実際の描画時にその都度リアルタイムに行なわれている。しかし、パーティクルの挙動制御等の例外を除けば、登場キャラクタの思考AI、動きを制御する物理処理については3DMark 05ではリアルタイム処理されていないという。つまり、3DMark 05に登場するキャラクタ群の動きなどはあらかじめ決定されたシーケンスをなぞるだけのものなのである。

 それでも、ここまで重いのは、やはり、重いグラフィックス処理を行なっているからだ。特に、その重さの高い割合を占めているのがリアルタイム影生成部分だとされる。


■ 「3DMark 05」は影生成技法として改良版のシャドウマッピング技法を採用

投射テクスチャマッピング技法
「Half-Life 2」(Valve Software)より。最新3Dグラフィックスビジュアルが注目されているあの「Half-Life 2」も、影生成に関しては投射テクスチャマッピング技法を採用する
ステンシルシャドウボリューム技法
「EverQuest 2」より。左の椰子の木に注目。その影は椰子の葉ではなくその葉を構成するポリゴン形状になってしまっている。これがこの技法の弱点のうちのひとつ
シャドウマッピング技法
「Splinter Cell」の屋外シーンでは、通常のシャドウマッピングの他に、広範囲に落ちる投射距離の長くなる影については投射テクスチャマッピングによる疑似影生成も併用していた
 最近の3Dゲームグラフィックスにおいて、最も重要な命題となっているのが影生成にまつわるものだ。この連載でも繰り返し言ってきていることだが、ここ最近までの3Dゲームにおいても、影生成に配慮した3Dグラフィックス表現を行なっているのは少数派だ。

 影とは、「光が当たらないところ」と定義づけることができるわけだが、この影ができる場所というのは「その面(ポリゴン/ピクセル/フラグメントと言い換えても良い)が光源方向に向いていない」ケースと、「その面が第三者によって遮蔽されている」ケースに大別できる。

 現在のリアルタイム3Dグラフィックスの基本処理系で生成できるのは前者のケースだけで、後者のケースについては、別途、明示的な処理系を追加しなければ実現できないのである。

 「3DMark 2001」では、この影生成処理で最も基本的な手段である投射テクスチャマッピングを採用していた。これは3Dオブジェクトのシルエットテクスチャを光源方向からシーンへ投射するような形でテクスチャマッピングを行なう方法で、処理系としては比較的軽めであり、現在でも多くの3Dゲームで採用されている。特に今となっては非力なプレイステーション 2用の3Dゲームでは半ば標準的に採用されている傾向にある。

 投射テクスチャマッピングの弱点としては、影の投射単位がオブジェクト単位となり、自身の影が自身に投射されるセルフシャドウ表現が行なわれない。たとえばこの影生成手法を用いた3D格闘ゲームなどでは、正拳を突きだした状態で腕の影が胸に落ちず、地面にのみに影が落ちることになる。

 一方、3DMark 03では、「DOOM 3」や「DeusEx」、「EverQuest II」などでも採用されている「ステンシルシャドウボリューム技法」が活用されていた。

 これは光源方向から見て輪郭となる3Dオブジェクトの頂点を光源が進む方向に引き延ばしてできる影領域(シャドウボリューム)を生成することからこの名前が付いている。そのピクセルが影領域内部にあるか(影になる)、外にあるか(光が当たっている)を、視点から見たそのシーンの深度情報(奥行き情報)を参照しながら判断しつつ、その結果をステンシルバッファにマーキング、最終的にステンシルバッファの内容に従って描画シーンに“影色”を付けていくというプロセスを取る。

 利点は複雑なシーンの遮蔽構造に配慮した影生成ができるため、複数の3Dオブジェクト同士が影を落とし合う相互投射影や、自身の影が自身に落ちるセルフシャドウも考慮される。

 弱点は処理系が比較的重いこととだ。実際に影が落ちても落ちなくても、シーン全体のシャドウボリュームを生成するために、実際の見た目以上にGPUのメモリバスを消費する。ちなみに、この無駄な消費を削減するための仕組みがGeForce FX 5900以上に搭載された「UltraShadow」(Depth Bounds Test)だ。

 「3DMark 03」のステンシルシャドウボリューム技法では、光源から見てどの頂点が輪郭となって引き延ばされるかの判定をCPUで行なっていたために、CPU負荷も相当なものだった。また、この他、この技法では影生成が頂点単位となるため、テクスチャ内容に配慮されないという細かい弱点もある。つまり、例えば正方形ポリゴンに描かれた葉っぱの影は、正方形の影になってしまうのである。

 ステンシルシャドウボリューム技法自体を否定したわけではないだろうが、3DMark 05ではこの手法から一転、「シャドウマッピング技法」(デプスシャドウマップ技法)を採用している。

 これは、光源から見たシーンの深度情報(奥行き情報)をテクスチャなどにレンダリングし、シャドウマップと呼ばれるその光源の遮蔽構造分布を生成することから、この名前が付いている。最終的なシーンのレンダリング時には、各ピクセル描画時に、そのピクセルが光源から遮蔽されているかどうかをシャドウマップを参照しながら描画していく。

 この技法ではステンシルシャドウボリューム技法同様に、複雑な遮蔽構造に配慮できるために、相互投射影もセルフシャドウにも配慮した影生成が行なえる利点がある。また、光源からみての輪郭判定も不要で、やろうと思えばテクスチャの内容に配慮したシャドウマップも生成できるので、前述した「葉っぱの影が四角くなる」という珍現象もこの技法では回避できる。

 ちなみに、この技法は「Splinter Cell」シリーズ(Ubisoft)、「Unreal Engine 3.0」(Epic Games)などで採用されており、現在では、ステンシルシャドウボリューム技法に並び3Dゲームグラフィックスにおけるメジャーな影生成技法として認知されている。

 この技法の欠点は、その影のクオリティが、遮蔽構造を記録しておくシャドウマップのサイズに強く依存してしまうところだ。屋外シーンなどでは広大な領域が視界として描画される。例えば1km×1km四方が見えているようなシーンの遮蔽構造を512×512ドット(テクセル)で表現されるテクスチャにシャドウマップとして生成したらどうなるか。単純に約1.95m×約1.95mの領域の遮蔽構造が1テクセルに集約されてしまうことになり、非常に大ざっぱな影生成しかできないことになる。

 これはあくまで極端かつ単純な例だが、このためシャドウマッピング技法は「屋外シーンの影生成には向かない」とされてきた。実際、「Splinter Cell」などでも、視点から一定距離離れたところの影は綺麗に出ているが近い位置の影はジャギーが目立つといった現象が見られる。

シャドウマッピングに置けるジャギーの問題。以下のスライドはSIGGRAPH2002で公開されたMarc Stamminger氏のものを流用している。シャドウマッピング技法では、相対的に見て視点に近い位置に落ちる影にジャギーやフリッカー(チラツキ)が出やすい。

視界に対して均等な解像度で遮蔽判定が出来るように、シャドウマップ側を透視変換してしまった座標系で生成してやろうというのがPSM技法の基本的な考え方
 そんな中、2002年、ドイツのエアランゲン・ニュルンベルグ大学(University of Erlangen-Nuremberg)のMarc Stamminger氏らは、SIGGRAPH2002にて、この問題に対して改良を加えた新しいシャドウマッピング技法である「Perspective Shadow Maps」(略称PSM)を発表した。「3DMark 05」では、この技法を採用し実装している。

 発想は意外に単純。基本的なアイディアは、視点に近い位置のシャドウマップを高解像度で生成し、遠くに行くに従ってそれなりの解像度で処理するようにしよう、というもの。これにより、よく見えない遠くの影はそれなりのクオリティになるが、よく目に付く視点に近い位置の影は高精度に生成できるようになる。

 具体的にはシャドウマップ生成を、視界からの座標系、すなわち透視投影(perspective projection)した状態で生成しようという方針になる。これで都合よく、近い位置のシャドウマップは高解像度になり置くに行くに従ってそれなりの解像度になる。これで生成される影のクオリティが視点からの距離に左右されることはなくなるわけだ。

 このPSM技法は屋外シーンでも使えるシャドウマッピング技法であり、「3DMark 05」では、このPSM技法を独自改良した技法を採用しているのである。


■ 「3DMark 05」におけるPSM技法の秘密とは!?

天井からの並行光源による影。まるでステンシルシャドウボリューム技法のような、キャラクタ形状の鮮明な影が出ている。PSM技法の利点が前面に押し出されている瞬間だ
蛍の光は点光源扱いで360°全方位に照射される。ここからの全方位の遮蔽構造を6面体のシャドウマップに生成。全方位の影生成を実現している
 「3DMark 05」では、太陽のような並行光源からの光によってできる影は、PSM用として2,048×2,048テクセル解像度のシャドウマップを生成し、1回の影生成に付き2回使用しているとのことだ。1回目は視点から近い位置、もう2回目は視点から遠い位置のシャドウマップ生成を行なうことに用いているという。ちなみに、このシャドウマップの容量は約16MBになる。

 現行GPUならば4,096×4,096テクセル解像度のテクスチャまでは確保できるものがほとんどなので、これを1面使った方がスマートだったとも思うのだが、これではシャドウマップを1面確保しただけでビデオメモリを64MBも消費してしまい、ますます動作条件を厳しくしてしまう。このあたりの判断はFuturemarkも苦渋の選択だったのかもしれない。

 全方位を照らす点光源については、贅沢にも6面分のキューブマップ(立方体)形状の全方位のシャドウマップを生成している。これは影を全方位に投射させる目的のもので、この技法を特に「全方位シャドウマッピング(Omnidirectional Shadow Maps)」と呼ぶ。これはUnreal Engine3.0にも採用されている技法だ。

 さすがに6面分のシャドウマップ生成はかなり重い処理でありビデオメモリも消費するために、さすがに1面あたり512×512テクセル解像度の選択にとどまっている(容量的には、512×512×6面で約16MB)。たとえ全方位とはいえ、この程度の解像度だと大域的な影生成を行なうとジャギーが目立ってきてしまうため、実際3DMark 05では、この全方位シャドウマッピングは局所的な影生成のみに使われている。余談だが、こうしてみてくると、ビデオメモリは今や256MBでも少ないといわざるをえなく、ビデオメモリ容量はそろそろ512MBでも不十分と言う状況になりつつあるのかもしれない。

 シャドウマップのフォーマット自体は、Depth Stencil Texture(DST)形式のD3DFMT_D24X8をサポートしているGPUであればこれを採用し、サポートしていなければ32ビット浮動小数点実数(FP)形式のD3DFMT_R32F(1要素のみで構成されるFPテクスチャ形式)を選択する。採択するフォーマットがGPUによって異なるため、格納できる深度情報の精度が変わり、できあがったシャドウマップの内容に違いができる可能性がある。

 最終的なレンダリング時における、シャドウマップ参照時には、採用したシャドウマップフォーマットによって異なる処理系が採択される。具体的には、シャドウマップにDST形式が採択され、なおかつDST参照の際に自動的にハードウェア・バイリニアフィルタリングが適用できる場合はこれを利用する。これはずばり、NVIDIA GeForce系にてサポートされる「ハードウェア・シャドウマッピング(NVIDIA SHADOW)機能」そのものであり、GeForce系ではこの機能が利用されるようだ。

 一方、この機能が利用できないATI系やその他のGPUでは近傍4点から値を取り出して平均化するシェーダが実行される。こうした処理系の違いは、3DMark 05の算出するスコアや、得られる描画結果に大きく影響する部分となる。

【Game Test3、フレーム1224より】

DST形式のケース。俗に言うGeForceのNVIDIA SHADOW機能を活用したケース。4倍に拡大。以下同。下側のシャドウマップ境界付近の毛羽立ちは良い具合にぼけてくれている シェーダーによるR32F形式のケース。RADEON系もしくはGeForce系でDisable DSTを選択した場合こうなる。下側の影の毛羽立ちはこちらの方がきつく出る
DST形式。影のエリアスが強く出る傾向にある。どちらにも一長一短があるという感じだ シェーダーによるR32F形式。崖の影とはうってかわって今度はこちらの方が淡いボケ方をしている

「Benchmark Setting」にてDST形式をキャンセルして強制的にD3DFMT_R32F形式の影生成が可能。GeForce系でのテストの際、RADEON系と同一処理にて結果を比べたい場合にはチェックオンにする
 「これでは公正なベンチマークテストにはならない」という指摘もあるが、これに対しFuturemarkは「実際の3Dゲームでは、そのGPUのアドバンテージが簡単に利用できる場合、それを有効活用するケースが多い。よって我々もそうした設計にした」とコメントしている。

 とはいうものの、3DMark 05の影生成をどうしても同一条件下で実行させてスコアを得たいというユーザーにも配慮し、3DMark 05の「Setting」には「Disable DST」のオプションが設けられている。これをチェックすれば、必ずシャドウマップ参照時にはGPUの種類によらずD3DFMT_R32Fのシャドウマップが生成され、近傍四点を参照するシェーダが必ず実行されるようになり、同一条件下のテストが実行できるようになる。

 後編では、いよいよ「3DMark 05」の各Game Testの見所と技術解説を行なっていく。是非ともお見逃しなく!

□Futuremarkのホームページ
http://www.futuremark.com/
□「Deus Ex:Invisible War」の公式ページ
http://www.futuremark.com/products/3dmark05/
□関連情報
【5月20日】3Dゲームファンのための「Unreal Engine 3」講座 Ver.2.0
2006年以降の3Dグラフィックスはこうなる!
http://game.watch.impress.co.jp/docs/20040520/3due3.htm

(2004年10月21日)

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


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

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

(C) 2004 Impress Corporation, an Impress Group company. All rights reserved.