連載
西川善司連載 / 完全理解「3DMark Vantage」(5)Feature Test
第4回の掲載から,諸事情で約5か月ぶりとなったが,「3DMark Vantage」を解説するシリーズ最終回をお届けしたい。
今回は,有償版の「Advanced Edition」(19.95ドル)と,業務用途向けの「Professional Edition」(495ドル)で有効となるテストモード,「Feature Test」を解説していこう。Feature Testには,下記のとおり六つのテストモードが用意されており,それぞれ,GPUの特定機能に対して集中的に負荷をかけるように設計されている。
- Feature Test 1: Texture Fill
- Feature Test 2: Color Fill
- Feature Test 3: Parallax Occlusion Mapping(Complex Pixel Shader)
- Feature Test 4: GPU Cloth
- Feature Test 5: GPU Particles
- Feature Test 6: Perlin Noise(Math-heavy Pixel Shader)
「Graphics Test」や「CPU Test」などと異なり,Feature Testの結果は,3DMarkスコアに反映されない。よって,あくまでも「搭載されているGPUの特定機能について,個別にパフォーマンスを計測する」のが,Feature Testの狙いだ。
では,それでは各テストがどういった処理を行っているのか。そして何を調べているのかを,解説していくことにしよう。
ごく小さいテクスチャを,設定された解像度いっぱいに重ね描きするテスト。テクスチャ転送時のフィルレートを計測するのが狙いだ。
使われているテクスチャのサイズは非公開だが,これまでの「3DMark」シリーズの仕様を継承した,2×2テクセルのものと推測される。重ね描き枚数も非公開だが,3DMark06では8枚だったので,これと同じか,あるいはこれより多くなっていると思われる。
使われるテクスチャのサイズがごく小さいこともあって,テクスチャの“実体”はGPU内部のテクスチャキャッシュへ完全に収まった状態で動作する。よって,グラフィックスメモリの読み出しはほとんど無視していいレベルとなり,テスト結果はテクスチャユニットの数やROP(Rendering Output Pipeline)ユニットの数,グラフィックスメモリへの書き込み性能次第,ということになる。
テスト時に映像が動いて見えるのは,テクスチャアドレスをずらしつつ,小サイズテクスチャにアクセスしているため。このアニメーション処理の負荷は,これまたほとんど無視できるレベルだ。
テスト結果は1秒間にどれくらいのテクセル書き込みを行えたかを示す「GTEXELS/S」(ギガテクセル毎秒)で表され,この値が高いほど高性能になる。
先代の「3DMark06」において,テクスチャフィルレートの測定には「Single Textureing」と「Multi Texturing」の2モードが存在したが,3DMark Vantageにはこのテスト1種類しか存在しない。そして3DMark Vantageの本テストは,3DMark06時代におけるMulti Texturingのテストに相当する。
Texture Fillテストの概念図(※重ね描きされているポリゴン板の数などは,あくまでイメージです)
設定された解像度いっぱいに,カラーピクセルを連続で描き出すテスト。四角形の頂点近くから別々の色とα値が設定され,時間とともに変化していく。レンダーターゲット(=フレームバッファ)は各要素16bit浮動小数点形式(FP16)の64bitバッファ(A16R16G16B16)を採用。カラーピクセルにはαブレンディング演算が適用されつつ上書きされていくことになる。
ピクセルシェーダは使われていないため,ここで試されるのは,純粋なグラフィックスメモリの書き込み速度とαブレンディング演算速度。テスト結果は1秒間にどれくらいのピクセル出力が行えたかを示す「GPIXELS/S」(ギガピクセル毎秒)で表され,この値が高いほど高性能だ。
高負荷なピクセルシェーダ(Complex Pixel Shader)テストとして用意されているのが,この「Parallax Occlusion Mapping」(視差遮蔽マッピング)だ。
一見,複雑な地形が描き出されているように思えるが,このシーンで登場しているポリゴンは四角形1枚(=2枚の三角形)のみ。複雑に見えている凹凸は視差遮蔽マッピングの効果である。
そんなわけでやたらと重いこのテストだが,一体何をしているのだろうか? せっかくなので,視差遮蔽マッピングの原理と効果について解説してみたい。
微細な凹凸を表現するため,現行世代の3Dゲームグラフィックスで当たり前のように活用されているのが法線マッピング――正確には,法線マップを用いたバンプマッピング――である。そして視差遮蔽マッピングは,いわばその進化形に相当する。
ライティングの結果として陰影を出すには,このライティング計算に,
- 視線の向きを表す視線ベクトル
- 光の照射方向を表す光源ベクトル
- ライティングする対象の面(あるいはピクセル)の向きを表す法線ベクトル
が必要になる(※鏡面反射の場合。拡散反射の場合,視線ベクトルは不要だ)。
そこで,この発想を逆転させ,「凹凸のない真っ平らな1枚板のポリゴンであっても,法線ベクトルさえ用意してやれば,ライティング計算の結果として,凹凸っぽい陰影が出るはず」という着想が生まれた。これが法線マッピングだ。
ただ,「最初から作ってない」のだから当然なのだが,これは実際のところ,凹凸をまったく考慮していない陰影である。そのため,ある程度の距離さえ置ければそれっぽく見える一方,法線マッピングの適用されたポリゴンを近くで見たり,あるいはその擬似的な凹凸を側面から見る,いわば掠め見るような角度になると,たちまち「ウソ」が露呈する。
この法線マッピングのウソがばれないように,さらにウソの上塗り(?)を実現するのが視差遮蔽マッピングなのである。
大まかな考え方を述べるなら,視差遮蔽マッピングとは,「ポリゴン面に対して,凹部分を彫り込む」ような表現である。これを実現するために,レンダリング対象ピクセルごとに局所的なレイトレーシング(レイキャスティング)を行う。いや,聞くからに重そうな処理だが,実際に重い。だから高負荷なピクセルシェーダ(Complex Pixel Shader)テストに分類されているのだ。
具体的にいうと,下に示した《1》〜《4》のような流れになる。
《1》あるポリゴン面上のピクセルをレンダリングするときに,そのポリゴン面から,さらに視線の延長線に沿って少しずつ視線を潜らせていく
《2》潜らせていくたびに凹凸との衝突判定を行って,衝突と判定されたところで,その直下の,対応する法線マップを参照する(※法線マップから法線ベクトルを取り出してからの陰影計算自体は,法線マッピングと同じだ)。調査点を視線方向に沿って潜らせ,その位置の直下にあるハイトマップを参照し,その高さが進めた視線より低ければ,「まだ進める」ことになる
《3》さらに調査点を進めていくと,いずれはハイトマップの高さがそのときの視線の高さを上回る(=凹凸の中に潜った)ことになる
《4》真の衝突点が今回の調査点と直前の調査点の間にあると判断できる
視線と凹凸との交差点が求められたら,あとのライティング計算には,その「交差点直下の法線マップから取り出した法線ベクトル」を活用して,法線マッピングと同様の陰影計算をすればいい。
こうした処理系の考案によって,凹凸と視線の遮蔽関係が比較的正しく処理されることになった。「手前の凹部分の隙間から,ときに後ろの凸部分が見える」といったような,法線マッピングよりも数段リアルな微細凹凸表現が実現できることになったのだ。
そして,3DMark Vantageの視差遮蔽マッピングでは,さらにこの疑似凹凸のセルフシャドウまでを出す高度な処理が施されている。
その手順は大きく分けて二つ。まず,先ほど求めた視線と凹凸の衝突点から,今度は光源に向かって凹凸との衝突点を求める。
視点と凹凸の衝突点(交差点)から,光源に向けて調査を開始する。先ほどと同様,調査点が凹凸の中に入るまで,順にチェックしていく
続いて,視線と凹凸の交差点から光源の方向に向かって少し進んでは,その位置のハイトマップを参照して衝突したかどうかを判定する。ポリゴン面を抜け出る前に凹凸に衝突した場合は,凹凸に光が遮蔽されていると判断でき,光が届いていない(影である)と判定できるわけだ。
一方,一度もハイトマップと衝突しないでポリゴン面を抜けられれば,「何物にも遮蔽されていない」ことになり,“ここ”(=視線と凹凸の交差点)に光は当たっている(=影ではない)と判定できる。
調査点が凹凸に衝突すると,視点とハイトマップの交差点には光が当たっていないと判定可能。逆に,衝突しないままポリゴン面を抜けられれば,光が当たっているということになる
ただ,これだけだと,「影か,そうでないか」という,はっきりしすぎた違いとなり,結果として影の輪郭がきつく出てしまう。そこで,「調査点が凹凸に衝突したあともしばらく光源方向に調査を進め,『影であるにしても,どのくらい遮蔽されているのか』」をチェックすることになる。
具体的には,なおも光源に向かって突き進んでいる調査点の高さと,その調査点と凹凸の高さとの距離を求め,これを「遮蔽具合」として計測していくのだ。適当なところで――理想はポリゴン面を抜け出るまで,だが――調査を打ち切り,一連の調査のなかで最も高い遮蔽具合を基準に影の色を決める。そして遮蔽具合が低ければ薄い影,すなわち半影(ソフトシャドウ)にする。
これで影のエッジ付近が柔らかくボケるようになり,リアリティが増すというわけだ。
セルフシャドウ付き視差遮蔽マッピングにおける,ソフトシャドウの実現方法
Feature Test 3では,巨大な四角形(=2枚の三角形)に対し,4096×4096テクセルのハイトマップ(凹凸マップ)を用いて,ソフトセルシャドウ付き視差遮蔽マッピングを実装している。
シーンには四つの点光源,三つの平行光源が登場し,ピクセルシェーダプログラムは,この点光源×4,平行光源×3,合計七つの光源に対するソフトセルフシャドウ付き視差遮蔽マッピング計算を,1パスで行う。
視線や光線の衝突判定やループ制御には,動的条件分岐を多用しているとのことで,現行3Dゲームに用いられているピクセルシェーダプログラムと比べても,GPU負荷は数段高いものとなっている。テクスチャ読み出しも頻繁に行われるため,テストの種類としてピクセルシェーダパフォーマンスの評価に重きを置いてはいるが,実際に出てくるスコアは,GPUの総合的なパフォーマンスを表していると見ていいい。
なお,テスト結果はフレームレートで算出される。もちろん単位は「FPS」(フレーム毎秒)だ。
布の物理シミュレーションを適用した旗を12本,風に揺らめかすテスト。
Futuremarkのロゴが入っている旗の四角形は,あらかじめ細かいポリゴンに分割されており,各ポリゴンの頂点は隣接する8個の頂点と,仮想的な「バネ」で接続されている。旗にあるすべての仮想的なバネに対し,重力と風のパラメータを与え,バネ物理を解くことで旗の形状を再現しているわけだ。
シミュレーションの単位は頂点で,複数のシミュレーション計算を行うことになるが,あるシミュレーションの計算ステップが終了すると,これをピクセルパイプラインには回さず,DirectX 10の独自機能である頂点シェーダからのバッファ出力機能である「Stream out」(ストリームアウト)機能を利用して出力。再び頂点シェーダに戻して,次のシミュレーション計算をする。
3DMark Vantageのホワイトペーパーには,ジオメトリシェーダも活用していると記載されている。いずれにせよ,頂点パフォーマンスを測定するテストとなるが,ストリームアウト機能を積極的に活用している関係上,当然のことながらストリームアウト機能の動作効率も結果に影響する。
テスト結果は,FPS(フレーム毎秒)で表されるフレームレートだ。
数十万ものパーティクル(粒子)を,高低情報が記録されたハイトマップ上で風に乗せて流し,その凹凸状態を見せるテストである。
パーティクルの管理単位は単一の頂点。ジオメトリシェーダで四角形ポリゴンのスプライトに変換し,「ドットのようなテクスチャを適用したスプライト」化したうえでレンダリングしている。
各パーティクルについては,可視化対象であるハイトマップとの衝突判定が行われており,衝突したパーティクルは軌道を曲げられる。そうして,各地点で軌道を曲げられたパーティクルの全体像が,ハイトマップ上の,横たわる女神のような造形を浮かび上がらせるのだ。
頂点演算負荷をかけることが主なテスト内容となるが,単一頂点からジオメトリシェーダを利用してスプライトに変換していることから,ジオメトリシェーダのパフォーマンスもスコアに反映される。
Feature Test 3/4と同様,本テストの結果もスコアはフレームレート表示である。
算術合成ノイズの定番であるPerlin Noise(パーリン・ノイズ)をピクセルシェーダプログラムで生成し,これを表示する。Perlin Noiseは三つの異なる周波数から生成されており,それぞれをR/G/Bの各カラーチャンネルに割り当てて,スクロールさせながら表示するので,見た目はカラフルな煙がもやもやと動くような感じだ。
これも,テスト結果はFPS(=フレームレート)表示。描画負荷よりも,演算負荷に重きを置いており,ピクセルシェーダの演算性能が優れているほど,スコアは高くなる。
3DMarkシリーズはこれまで,「近未来の3Dゲームグラフィックスで用いられるテクニックを先取りして実装し,やや高負荷気味にGPUを回して,そのパフォーマンスを見る」というコンセプトを掲げてきた。
全体を通して見るに,3DMark Vantageも,この公約をまずまずのレベルで果たしているとは思う。
とくにGPGPU的なアプローチで水面の波動シミュレーションや布の物理シミュレーションを実装したあたりは,まさに理にかなった技術選択といえる。布の物理シミュレーションはともかく,GPUによる水面の波動シミュレーションなどは「Crysis」をはじめとして,すでに商用タイトルで採用されつつある技術。こうしたGPGPU的活用は,今後いっそう浸透していくことだろう。その意味で,3DMark Vantageはこのトレンドをきちんと先取りできていたことになる。
CPU Testが3DMarkスコアに反映されることについては賛否両論あるが,マルチコアCPU時代になってから,新しいゲームエンジンが急速にマルチスレッド設計になってきていることを考えると,あながち誤った判断ともいえないだろう。
NVIDIAがPhysX物理エンジンをGeForceでアクセラレーションできる仕組みを提供したことで,CPU Testに含まれる物理シミュレーション部はGPUでアクセラレーションできることになったが,これは「NVIDIAびいきの不公平」というよりは,次世代3Dゲームエンジンにおいて,いよいよ物理シミュレーション部がGPUでアクセラレーションされることが現実味を増した……と捉えるべきだろう。まあ,「CPU Test」というネーミングは,「Simultaion Test」あたりに改名すべだったとは思うが。
一方,足りないと思ったのはプロシージャル技術関連のテストだ。3DMark03のときには大理石と木目のテクスチャをプロシージャル・テクスチャとして生成するテストが実装されていたが,3DMark06以降はカットされている。
プロシージャル技術とは,法則や知識をアルゴリズムとして実装し,コンテンツを算術的に生成する技術のことだ。
近年ではテクスチャから植物モデル,都市モデルに至るまで,プロシージャル技術で生成可能となっており,この分野の進化は著しい。2008年9月に発売された,Electronic Arts/Maxisの生物進化シミュレーションゲーム「SPORE」は,このプロシージャル技術を本格的に実装した商用アプリケーションとして注目されている。SPOREではテクスチャ,3Dモデル,BGMに至るまで,プロシージャル技術によって生成されているのだ。
左は,プロシージャル技術で都市モデルを生成できるミドルウェア「CITY ENGINE」,右は植物記述言語「L-SYSTEM」による作例だ。「Sが種にまつわる記述。Rがキク科植物特有の舌状花にまつわる記述。M/N/O/Pは,花びらにまつわる記述」で,この記述法によって描画されたのがここで示すヒマワリである(カルガリー大学,Przemyslaw Prusinkiewicz氏の研究より)
次世代3DMarkの登場は,やはりDirectX 11時代になってからか?
また,3DMarkスコアに影響するGraphics Testへの実装うんぬんはさておくとして,今回紹介したFeature Testに,DirectX 10.1に関連したテストモードが1個くらいは欲しかったところだ。
MicrosoftがDirectX 11のAPIを公開し,対応GPUが発表されるのが2009年あたりに予定されていることを考えると,3DMark VantageがDirectX 10.1に対応してくる可能性は低い。それよりもDirectX 11対応のほうが業界やユーザーの期待が大きいため,おそらくFuturemarkも,「次なる3DMarkのビッグステップはDirectX 11のタイミング」と考えて,モデルチェンジのプランを練っているのではなかろうか。
- 関連タイトル:
3DMark Vantage
- この記事のURL:
COPYRIGHT(C)2008 FUTUREMARK CORPORATION