NVIDIA社のGeForce 6800技術解説編を掲載 | - 2004/04/17 04:54 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
■■CineFX3.0で,ゲーマー御用達のGPUに完全復帰■■
新しく発表されたGeForce 6シリーズは圧倒的な処理速度と多彩な表現力を併せもっている。NVIDIAはGeForce 6をゲーム以外の分野,つまりマルチメディア機能などの表示系機構全般において最強のものとなることを目指しているようだが,こと3Dゲームに対する優位性は突出したものとなった。ここではその根源となっている新機能について見ていきたい。 GeForce 6シリーズでは,新たなシェーディングアーキテクチャとしてCineFX3.0を搭載している。詳しくは後述するが,DirectX 9.0cで本格的なリリースとなるShader Model3.0(SM3.0)に対応し,プログラマブル頂点シェーダ 3.0(以下,VS3.0)およびプログラマブルピクセルシェーダ 3.0(以下,PS3.0)を完全サポート。VS3.0とPS3.0共に無限の長さ(厳密には65536命令)のプログラムでコードが書けるようになった。テクスチャエンジンは16ビット(FP16)と32ビット(FP32)の浮動少数点フォーマットに対応しており,16本の独立したピクセルパイプラインには32ビットのシェーディングデータを同時に二つずつ送信できる。 ■16x1/32x0パイプラインのレンダリングエンジン GeForce 6800は,今後発売される「DOOM 3」や,「Half-Life 2」など最新グラフィックスを実装したゲームをプレイするのに最適なのは間違いなく,CineFX3.0のさまざまな機能が新世代のゲームタイトルをサポートする。このCineFXに大きく貢献しているのが,16本のピクセルパイプラインをもつ新しいアーキテクチャのレンダリングエンジンである。 モニタ上に表示されるピクセルは,そもそも一つ一つがクロック毎に生成されてパイプラインを通過する(派手で複雑な効果を表現する描画では,複数のパスを利用することもある)。パイプライン数は,3Dアプリケーションのボトルネックと言っても過言ではないのだ。 GeForce 6800が16本のパイプラインを保持しているということは,単純に言えばRADEON9800の2倍,GeForce 5950 Ultraの4倍のピクセルを処理できるということであり,相当なパフォーマンスアップが望める。NV35は二つのテクスチャに分散した四つのピクセルが,1クロックにつき8枚ずつ表示される構造であったが,NV40は16ピクセルで構成される1枚のテクスチャが,1クロックにつき32枚ずつ出力されるのだ。 ■SIMD/MIMDスキーム NV40では,NV3x系よりも長いインストラクションセットをサポートし,MIMDというスキームをアーキテクチャに組み込んでいる。これまで利用されてきたSIMDは「Same Instruction,Multiple Data」の略で,一つのインストラクションセットをGPUに送って,これをさまざまなデータに対して実行していた。 例えば二つの簡単なテクスチャを表示する場合,「テクスチャ,ブレンディング,テクスチャ,ブレンディング」と,「テクスチャ,テクスチャ,ブレンディング,ブレンディング」で送り出す二通りのパターンがある。両者共に画面に表示される結果は同じだが,後者のほうが,四つのオペレーションを1スロット・1クロック周期で処理できるので効率がいい。前者は四つのクロック周期が必要なので,その分時間が掛かってしまうのである。これがNV3xとNV40の大きな差異の一つだ。 NV40は,スーパースカラプロセッサとなることで,SIMDからさらに一歩踏み込んだMIMD(Multiple Instruction,Multiple Data)を実装したハイブリッド型になり,一つのパイプラインでも二つのインストラクションを同時に実行できるようになった。ゲームタイトルのフレームレートが向上し,リアルタイムレンダリング技術がCG映画に近づく上では必要不可欠な仕様であると言えるだろう。 ホワン社長が最も念を押して説明する点は,NV30世代でも粘り強くサポートし続けてきた32ビットの浮動少数点精度(FP32)である。 DirectX 9.0はFP24をサポートし,ATI社のR300世代がFP12,FP16,FP24,FP32のピクセルインプットをすべてFP24に変換できるようなアプローチであるのに対して, NVIDIA社はFP12,FP16,そしてFP32を処理するために別々のパイプラインを用意している。この手法では,FP12ベースのピクセルを使用しているOpenGLやDirectX 7およびDirectX 8のアプリケーションを変換しない分だけ高速に処理できるものの,DirectX 9.0以降にサポートされたFP24の頂点シェーダ/ピクセルシェーダ2.0では,R300シリーズに軍配があがることになる。 ホワン社長は,「FP32はFP24と比較してパフォーマンスへの負担が25%ほど大きい。しかし,私はFP32が"未来"であることを信じていますし,64ビットプロセッシングの時代が到来することも信じています」と話す。映画並の精度をもったリアルタイムレンダリングの時代が数年後に到来するとなれば,やがてはDirectXとATI社のGPUもFP32をサポートするのは必定なのである。 またNV40では,これまでDirectX 9.0の機能として含まれていたにも関わらずNVIDIA社がサポートしていなかったHDR(High Dynamic Range)レンダリングも遂に実現される。 HDRレンダリングは,実写映画などで頻繁に見られる"露光の強弱による視覚効果"に使用でき,Half-Life 2でも波止場の霞がかった遠景など各所で使用されている。またHDRレンダリングへのプログラマ側の対応は難しいものではないので,今年の後半からはHDR対応ゲームタイトルも増えてくるだろうと見込まれている。 ■頂点ストリーム・フリークエンシー(画面左) 頂点情報を読み込む時に,複数のオフセットを指定して種類ごとに違う情報を読み込むことができる。 例えば,複数の頂点に対して複数の行列演算などを行う場合(形状の変移とアニメーション,地形の変型など),複数の処理を1回のドローコールで実行できることになる。複雑な形状でもドローコール1回で処理できれば,GPUへの負荷は小さい。これによって大幅な負荷削減も可能になってくるわけだ。 ■マルチレンダリングターゲット(MRT,画面中央) 1回のレンダリングで複数のターゲットに対してレンダリングが可能になる。 例えば,テクスチャエリアへの書き込みとフレームバッファへの書き込みが一度にできるほか,"写り込み"などのレンダリング結果をテクスチャとして使用する場合に処理が半減するなど,さまざまな応用が可能である。フォトリアリスティックな表現を追求していくと,写り込みのような処理は平常処理として行われていくことも考えられる。レンダリング処理の効率を上げる重要な機能の一つだ。 ■FP16正規化ユニット(画面右) ベクトルの長さを"1"にして単位ベクトルを作る処理を「正規化」という。正規化は3Dには必須の処理であり,その負荷の重さも問題になっていた。これまではアクロバティックな処理で正規化を行ったりしていたのだが,今後は必要ない。なぜならこの処理は,レンダリングパイプラインのシェーディングエンジンで行うことができるからだ。GeForce 6のレンダリングパイプラインには2個のシェーディングエンジンが搭載されているので,正規化から演算へ,という流れの処理が1パスでできるようになった。こういった技術は,線形補間後のライティング処理などに有効である。 ■「Nalu」(画面左二段) 強力なレンダリング能力をソフトに表現しようと製作されたのが,GeForce 6シリーズの新マスコット,「Nalu」(ナルー)だ。長くふんわりとした髪の毛のシェーディングと,体に移るソフトシャドウは必見。またナルーの皮膚は,上部から降り注ぐ海水や波で常時デフォルメされる光源の反射に照らされ,彼女が泳ぎ回るたびに,体や髪の影が顔や体に投影されるようになっている。 ナルーは総計30万ポリゴンほどで作られており,頭髪は1万本程度が10〜15の頂点で表現されている。髪の毛の部分には"ディープシャドウ"(Deep Shadow)というCineFXで開発されたUltra ShadowUの技術が適用されていて,16段階のシャドウマップが行われている。この毛髪のシミュレーションを対比するために,短髪だった前シリーズの看板娘ピクシーと比較すると,その技術の進歩がうかがえるだろう。 またよく見ると,海面から漏れた光と放射状に広がるGodRay効果が組み合わされているのが分かる。これは人魚のシルエットをマスクして,光源から水面の模様を放射状にブラー処理したものを合成して実現されている。 ■「Clear Sailing」(画面中央二段) 「Pirates of Caribbean」で波が見事に表現されていたのを記憶しているゲーマーも多いと思うが,これはやはり頂点シェーダをサポートしたハードウェアで処理するのが望ましい。 この「Clear Sailing」というデモでは,サイン波を50個合成して作られた海面がリアルタイムにテッセレートされ,Per-VertexおよびPer-Pixelが複雑に混合した波を作り出している。なお水面のメッシュの(見た目の)大きさは,ワイヤーフレーム表示にしてカメラをズームしても変化しない。常に最適な大きさでテッセレーションが行われているのだ。 また海面は,ガレオン船の影さえも海面の陰影に影響するなど,周囲の環境によってシェーディングされる。航行する船が作り出す白波も,波の法線によって頂点シェーダが作り出す。ちなみに,波しぶきはスプライトによるものである。 ■Timbury(画面右二段) まるで東欧アニメのような不思議なCGが「Timbury」(ティンバリー)だ。 このCGは,昆虫学者のティンバリーが"冒険の過程で新種の昆虫を見つけた"という設定の短いストーリーだが,このクオリティでグリグリとカメラの角度を変えながら見られるのが新鮮で,「CG映画並のリアルタイムレンダリング」を地で行くデモであるといえる。 照明光は,ILM社の「OpenEXR」という16ビット浮動小数点演算用のフォーマットが利用されており,前世代のGPUでは不可能だったHDRレンダリング技術を見せつけている。淡くボヤけた雰囲気がソフトで,ホノボノとした中にカリカチュアを含ませた映像だが,ティンバリーの顔の筋肉の動きや,分厚い眼鏡越しの歪んだ背景などの細かい描画部分も素晴らしいデキだ。 NV40世代のGPUは,DirectX 9.0cに対応することでプログラマブルシェーダ3.0がネイティブ対応になる。DirectX 9.0cは,以前は"DirectX 9.1"にすると計画されていたが,DierctX 8.0からDirectX 8.1に移行したときほど大きな変更はないという理由で,DirectX 9.0系列として認識されることになる。シェーダを1.3から1.4に移行したDirectX 8.1は,以前より飛躍的に少ないパスでシェーダをレンダリングできるようになった。そしてシェーダ1.1から1.3への進化を遂げたNV30シリーズと比べ,1.3から1.4へ迅速な対応を見せたATI社のR300シリーズがとくに大きな恩恵を受けていた。 Shader Model 3.0は,現在出回っているSDKのバグ修正を中心に「Centroid Modifier」などの機能が追加され,また"Direct3Dではやっとこさ"という感じに,HLSL (高位シェーダ言語)でのシェーダプログラムを可能にしている。これらの実装は2004年夏版のSDKで行われるので,本格的なShader Model 3.0対応ソフトが出回るのは,早くても2004年の年末以降になりそうだ。 GeForce FX 5950やRADEON 9800XTといった現行のハイエンドモデルでは,それぞれのパイプライン上に装着されたシェーダユニットがテクスチャを処理している。しかし,何千ものテクスチャを瞬時に処理できる能力は備えておらず, 来たるべきCG映画のクオリティのリアルタイムレンダリングは不可能だ(2年前には,GeForce 3で「Final Fantasy:The Spirit Within」のキャラクターをリアルタイムで動作させる試みも行われていたのが記憶に新しい)。NV40ではMIMDアーキテクチャによって一つのパイプラインに二つめのシェーダユニットを実装しており,これはより精密なCGグラフィックスをゲーム上で動かすための一つの方向性を示しているといえる。 ■Centroid Sampling Centroid(重心)サンプリングは,ピクセルシェーダ3.0の中でも特筆しておくべき新機能である。 このサンプリング技術は,昨年の夏頃から欧米の開発者達のホットトピックとなっており,あのValve Entertainment社も,ATI社が主催した「Shader Day」という会合の中で「ATI社との連携を強化することにしたのは,NVIDIA社にはないCentroid Samplingがハードウェアに実装されているからだ」と述べていた。しかし「Half-Life 2」のリリースがCentroid Samplingのサポートを予定していたDirectX 9.0cと重なり,NVIDIAもNV40に組み込めるようになった。 Centroid Samplingは,Multi-Sampleアンチエイリアシングを作動させたときに(とくにライトマップが使用されるときに)起こりやすい"異なるテクセルのサンプリング"を抑え,必ず指定されたトライアングルの中からサンプリングを行えるようにした技術である。 ■Dynamic Branching GeForce FXシリーズの大きなセールスポイントだったのが,不必要なインストラクションは飛ばして必要な部分のみを実行することでパフォーマンスを上げる「Dynamic Flow Control」だ。これを一歩進めた進化型の機能が「Dynamic Branching」で,これまでシェーダを通して表現するテクスチャ効果には一つずつシェーダプログラムを書かなければならなかったのを,コードに対して一定の状況で起こるオプションをブランチとして付けるだけで,一つのシェーダプログラムで一括指定できるようになった。グラフィックス性能よりも,むしろプログラマの労働効率に一役買っている。 ■Predication Predication(投棄実行)は,シェーディングのプロセスを迅速にする機能で,Dynamic Branchingに付随するものである。この機能は,次のシーンで使用されるデータを予想してGPUに送るのではなく,予想されるすべての状況で想定されるデータをまとめてGPUに送るので,必要なものだけがパイプラインを通ることになる。これは相当な"負担"になると考えられる一方で,データ送信を誤った場合に正しいデータを送り直すよりも効率的だという理論に基づいている。 ■Displacement Mapping 元々Matrox社が最初に採用した「Displacement Mapping」は,DirectX 9.0以降の頂点シェーダの機能として採り入れられている。ベクトルを利用して凹凸を擬似的に表現するBump Mappingと比べて,リアルタイムにマッピングされた頂点データがそれぞれ周囲の照明に反応するようになる。これによって陰影が固定されないというリアリティを生み出し,優れた地形やオブジェクトの表皮といった表現が可能になるのである。この技術は2006年に登場する見込みのUnreal 3エンジンにも多用されており,今後重要性が増すであろう頂点シェーダ技術の一つといえる。 |