|
Game Developers Conference 2005現地レポートLonghornのグラフィックサブシステムはWGF1.0と2.0からなる |
例年のGDCと比較してかなり広くなった印象のある会場。今年はサンノゼからサンフランシスコに場所を変えた |
会場:Moscone West Convention Center
Game Developers Conference 2005が今年はサンフランシスコに場所を変えて、本日より開催された。そのTutorial Sessionの「Advanced Visual Effects with Direct3D」において、次世代DirectXについての説明が行なわれたので、内容を抜粋してお伝えしたい。
■ LonghornのDirect3DはWGF1.0に
マイクロソフト、DirectXのアーキテクトを務めるDavid Blythe氏 |
まず、このWGFが1.0と2.0の2バージョンで構成されることが今回明らかになった。結論から言ってしまえば、この1.0と2.0は、バージョン番号というよりは、むしろ、(1)、(2)というようなかんじのセクション番号の割付に近いイメージだ。
さて、WGF1.0は、基本的には、LonghornにおけるD3D9(DirectX 9のDirect3Dのこと)をサポートするサブブロックと考えていい。この他、文字のレンダリングやデスクトップ画面のガンマカーブ調整などの面倒もみる。これまで、D3D9L(“L”はLonghornのL)と呼ばれていたこのブロックが便宜上WGF1.0と改名された……という感じだろうか。
ただし、GPUのドライバモデルは一新され、OSのカーネルと直結するカーネルモードドライバと、ゲームなどのアプリケーションとのやりとりを行なうユーザーモードのドライバに分割される。これにより、システム全体のクラッシュの確率を減らし、OS全体としての安定性の向上を狙う。
■ WGF2.0がLonghornのグラフィックサブシステムの本命
Longhornのグラフィックサブシステムの概念図。ドライバがカーネルモードとユーザーモードに分離される |
キーポイントがいくつか挙げられたので順番に見ていくことにしたい。
● IEEE完全準拠な浮動小数点実数演算精度
IEEE754準拠の符号1ビット、指数部8ビット、仮数部23ビットの合計32ビットで表現される単精度の浮動小数点実数をあらゆる演算ブロックで正式にサポートする。INF(∞のこと)、NaN(Not a Number:数値になりえない)などの表現もサポートする。
整数演算についても四則演算はもちろん、AND/OR/XOR/各種ビットシフト&ローテートなどの論理演算、ブール代数などもサポートする。
● 必要機能は全て実装されていることが前提
機能を使う前にその機能が使えるかどうかをチェックしなければならないような現行の仕組みを排除改善する。これは開発者の立場からみればアプリケーションの開発のしやすさに繋がり、ユーザーの立場からみれば高い互換性を得られることに結びつく。
● シェーダコアの統合
現行GPUでは、プログラマブル頂点シェーダとプログラマブルピクセルシェーダの演算ユニットはそれぞれのパイプラインに、そのパイプライン専用という形で内包されて動作している。この仕組みを一新し、共有資産として管理される多数の演算ユニットを、その動作負荷に応じて、頂点パイプラインとピクセルレンダリングパイプラインの双方に適宜割り振るという仕組みにする。
これで、動的な負荷分散ができることになり、たとえばジオメトリ処理に高負荷が掛かったときには頂点パイプラインがその都度増加し頂点パイプラインがボトルネックとなる個を防止することができるようになる。
●パイプラインの一新
これまでのDirect3Dのグラフィックスパイプラインから一新させ、頂点シェーダ、ピクセルシェーダに加えて、新たなシェーダブロック「ジオメトリ・シェーダ」を新設する。
■ ジオメトリシェーダとは?
WGF2.0の最新グラフィックパイプライン。プログラマブルシェーダは、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダの三段構成になる点に注目 |
注目すべき点はいくつもあるが、なかでも目を引くのが、上でも少し触れた「ジオメトリシェーダ」というブロックだ。
これは近年のリアルタイムグラフィックスの暗黙の制限事項であった「1頂点入力→1頂点出力」の原則を打ち破る概念を実現するものだ。
ジオメトリシェーダは、簡単に言えばプリミティヴプログラムと呼ばれるシェーダプログラムで、ポリゴン単位の変移や生成を行なう仕組みだ。
たとえば、ファー(毛)シェーダにおいて、従来では毛ヒレや毛レイヤーはあらかじめモデル情報として持っていなければならなかったが、そうした毛ヒレや毛レイヤーをジオメトリシェーダにてリアルタイムに付加生成できる。毛の長さや濃さを変えたり……といったことも3Dモデル側には一切改変を加えずに、ジオメトリシェーダだけで自在に制御できるようになるわけだ。
キューブマップの例。全方位の環境マッピング処理の際にはこうしたキューブマップがよく使われる。DirectX 6世代以前は決めうちのキューブマップを用いていたが、近代3Dゲームグラフィックスでは、このキューブマップをシーンからリアルタイムレンダリングするのが一般的となったが、オーバーヘッドが大きいという難点があった |
また、ジオメトリシェーダは処理結果をビデオメモリへ出力する仕組みを持っているのでピクセルレンダリングパイプラインを回さずに、頂点バッファのレンダリングが行なえる。結果を再び頂点シェーダに再入力させることで、再帰的な処理系を実現でき、これは、GPUを汎用ストリーミングプロセッサとして活用するGPGPU(General Purpose GPU)用途に適した機能になる。
■ GPUはグラフィックスプロセッサの枠を超えた活用性を模索し始める
その他、細かい点においても、現行グラフィックサブシステムに対して「かゆいところに手が届く」的な拡張が行なわれている。
たとえば、WGF2.0世代のGPUのプログラマブルシェーダでは、シェーダのプログラム長に最大65,535とされていた制限が取り外される。つまり、CPUと同じように、そのシステムに搭載されているリソース(ビデオメモリやシステムメモリなど)の範囲内においてシェーダプログラムは必要な長さまで長くできるのだ。とはいえ、「リアルタイムで動作できるかどうかは別問題」という“但し書き”は添えられている。CPUでもあまりにも複雑な処理系は低性能CPUでは遅くなるのと同じで、あまりにも長いシェーダはGPU性能に依存したパフォーマンスになるということだ。
とはいえ、これは、業界に与える効果は大きい。映画用CGなどのオフラインレンダリンググラフィックスのレンダリング処理は、そのシェーダプログラムがあまりにも複雑で高度で長いために、これまでCPUソフトウェアとして構成し、CPUに実行させるのが常だった。WGF2.0ベースのGPUでは、シェーダ長に制限がなくなることから、GPUを使ってオフラインレンダリングが行なえるわけで、リアルタイムに結果が得られないまでも、CPUで行なうよりも格段に高速に結果が得られることになるはずだからだ。
また、WGF2.0ベースのGPUでは、キャッシュとは異なる大容量かつ高速なスクラッチパッドメモリが導入され、スタックポインタのエミュレーションなどに活用されるという。多階層なCALL~RETの仕組みはもちろん、現在は概念としてすら存在しない、再帰的な処理構造を持ったシェーダプログラムの実行なども可能になりそうだ。
また、GPUはグラフィックスプロセッサという立場ではあるが、より汎用性の高い並列ベクトルプロセッサとしての活用性を際立たせる意味合いから、明確なデータタイプ区分は取り払われる方向に向かう。現在でもだいぶそうなってきてはいるのだが、とにかく頂点バッファ、テクスチャ、レンダーターゲットといった各バッファはデータ列としては同一視できるものとされ、頂点シェーダ、ピクセルシェーダ、ジオメトリシェーダ間で相互に再利用(あるいは再入力)できる。たとえばピクセルパイプラインをまわしてプロシージャル生成したテクスチャを、ジオメトリシェーダ用のデータとして活用する……といった処理系も何の制約も障害もなく可能になる。
■ 法線マップの圧縮メソッドにATIの3Dcが実質的に正式採用
データフォーマットそのものについてもWGF2.0では大幅な拡張が行なわれる。
まず、近代ゲームグラフィックスにおいて特にその必要性が叫ばれてきた、法線マップの圧縮メソッドがWGF2.0の正式仕様に取り込まれることが決定した。
法線マップとは現在主流のバンプマッピングの際に活用されるテクスチャで、凹凸を構成する微細面の法線ベクトルをテクスチャ化したものだ。Direct3Dでは、RGBカラーテクスチャを圧縮する仕組みとしてDXTという技術が提供されてきたが、法線マップを圧縮するしくみは提供されてこなかった。ATIがRADEON X800シリーズにて、正規化された法線ベクトルを一律1/4の圧縮率で圧縮できる3Dcという新技術を発表したが、WGF2.0に組み込まれる法線マップ圧縮技術は、事実上、これがベースとなり正式採用された形になる。
また、ゲーム開発の現場からたびたびその必要性が訴えられていた“RGBE”フォーマットが、ついに正式フォーマットとして採用された。詳細は明らかにされなかったが、おそらくE8R8G8B8の他、E2R10G10B10などがサポートされる。RGBは、いうでもなくご存じフルカラー表現の形式だが、これに指数部Eという概念を設け、RGB共通に適用されるものとする。たとえばだが、Eが“3”ならば、RGBの全ての値が2の“3”乗倍された値となる。この仕組みが何に役立つかといえば、ハイダイナミックレンジレンダリングだ。整数表現域で、浮動小数点並の高い表現幅が得られるため、帯域をセーブしながらハイダイナミックレンジレンダリングが行なえる。これまでも自前シェーダで独自にこの形式を実装している例が少なくなかったが、正式仕様となれば、ハードウェアサポートされるわけで、高速化に結びつく。
この他、高速ハイダイナミックレンジレンダリング向けのパックド6e5形式、8ビットステンシル+32ビットデプス(Zバッファ)のフォーマットなども新規採用となった。また、興味深いのはほとんどのデータ形式においてその取り出しを正規化したり、有符号化したり、色データとみなしてガンマ補正後の値に変換したりできる。
オリジナル法線マップ | 法線マップを無理矢理DXT圧縮した場合。かなり情報が劣化する | ATIの3Dcで圧縮した場合。基本アルゴリズムはDXTと同じだが、2要素、1要素ベクトルの圧縮に特化しているため1/4に圧縮してもかなり劣化が少ない |
■ テッセレータはWGF2.0では導入しない
WinHEC04、CEDEC2004時点でのWGFのパイプライン図。テッセレータがオプション扱いながらも、パイプイランに組み込まれていた |
テッセレータと頂点テクスチャを組み合わせたディスプレースメント・マッピングの例 (資料提供元 MATROX) |
テッセレータは特定メソッドに従ってポリゴンを自動分割する仕組み。現在のプログラマブル頂点シェーダ3.0仕様でも頂点テクスチャリングを使ってのディスプレースメント・マッピングが可能だが、ジオメトリ解像度と頂点テクスチャの解像度が異なれば、ディスプレースメント・マッピングの精度は低くなり、ポッピングなどの現象に見舞われてしまう。テッセレータは高精度なディスプレースメント・マッピングには欠かせない処理系であり、また、高次曲面をポリゴンベースで実装するためにも必要な機能であった。
このテッセレータ導入の断念について、David Blythe氏によれば今は何も話せないとのことで、明日開催される「Microsoft Game Developer Day」では、もう少し詳細なことが語られると思われる。何かわかり次第追ってレポートしたい。
□Game Developers Conference(英語)のホームページ
http://www.gdconf.com/
□Game Developers Conference(日本語)のホームページ
http://japan.gdconf.com/
□関連情報
【2004年3月26日】「DirectX Day」最終セッション「DirectX Graphics Futures」
DirectX10ではGPUが仮想化されてマルチスレッドに対応する!
http://game.watch.impress.co.jp/docs/20040326/dx10.htm
(2005年3月8日)
[Reported by トライゼット西川善司]
GAME Watchホームページ |