[CEDEC 2006#02]Radeonを使ってDirectX 10を先取り? ATI,「Render to VB」の実機デモ
Guennadi Riguer氏
|
CEDEC 2006初日。ATI Technologies(以下ATI)は「DX10への序章:次世代のレンダリング・エフェクト」というセッションを開催し,同社シニアエンジニアのGuennadi Riguer氏が,Windows Vistaのレンダリングエフェクトについて概説を行った。
Direct X 10の新機能については,2006年5月26日の記事などでお伝えしているから,覚えている読者も多いだろう。
DirectX 10のグラフィックスパイプライン。頂点シェーダ(VS),ピクセルシェーダ(PS)の両ユニットに加えてジオメトリシェーダ(GS)ユニットが新たに実装される
|
右に挙げたスライドの写真は,DirectX 10のグラフィックスパイプラインを示したものだ。従来,プログラマブルシェーダユニットとしては頂点シェーダ(Vertex Shader),ピクセルシェーダ(Pixel Shader)があったが,DirectX 10ではジオメトリシェーダユニットが新設されている。
ジオメトリシェーダ(Geometry Shader)は,名前のとおり,頂点座標(ジオメトリ)を加工するシェーダだ。DirectX 9では,CPUからGPU(グラフィックスチップ)に与えられた頂点に対してレンダリングを行う,という形であるわけだが,DirectX 10では,与えられた頂点に手を加えてレンダリングできるようになるのだ。 例えば,クルマのタイヤなどを考えてみるといいだろう。現状では,頂点数が少ないため,どうしても多角形に見えてしまいがちだが,ジオメトリシェーダを利用すれば,より簡単な手続きで,よりタイヤらしく描画できるようになる。
ジオメトリシェーダユニットは,スライドで「Stream out」と表現されている,フレームバッファ(グラフィックスメモリ)に対する入出力機能「Stream Output」を持っている。ジオメトリシェーダで生成した頂点をバッファに書き出し,再解釈してレンダリングする,という柔軟な処理が行えるようになるわけだ。これにより,DirectX 9世代では,CPUが関与せざるを得なかったアニメーションの描画なども,DirectX 10ではGPUだけで行えるようになる。
■「Render To VB」を利用した ■DirectX 10のシミュレーションが可能に
DirectX 10にはそのほかにも,さまざまな強化点,変更点があるが,それらは前出の解説記事に詳しいので,そちらを参照してほしい。 今回のセッションで注目したいのは,Radeonシリーズの機能の一つ「Render to VB」を利用し,DirectX 9仕様のまま,DirectX 10仕様の一部をシミュレートしたデモがいくつか公開されたことだ。
Render To VB自体はR3xx,つまりRadeon 9500ですでに実装されていた。しかし,ATIがその存在を明らかにしたのは2006年になってからのことだ
|
Render To VBとは,「レンダリングを終えたデータを頂点バッファ(Vertex Buffer)に書き出す」というもの。先ほど紹介したStream Outputと同じように,頂点バッファに対して,GPU側でデータを書き込めるようになっている。
もちろん,DirectX 9ベースの現在のグラフィックスパイプラインにはジオメトリシェーダそのものがない。そのため,DirectX 10とまったく同じことを,同じパフォーマンスで実現できるわけではないが,Riguer氏いわく,「Render To VBを利用すればDirectX 10の一部の機能を先行して試せる」。氏は実際に,いくつかのデモを実機で行ってみせた。
Render to VBを用いて,1万体のモデルを同時に動かすデモ
|
最初のデモは,1万体ものモデルが一斉に動いているデモだ。通常は,すべてのモデルに対して,CPUがデータを送り続ける必要があるが,デモでは,ピクセルシェーダで(ジオメトリシェーダよろしく)動画モデルデータを生成して,Render to VBで頂点バッファに書き出す。そして,再度レンダリングパイプラインを通す……という作業を繰り返すようになっている。これにより,これにより1回の描画コールで最大4096の動画オブジェクトをレンダリングできるとのことで,デモは非常に滑らかに動いていた。さらにいえば,画面で最も手前,カメラの位置にまでやってきたモデルは,衝突判定が働いてはじき返される。 GPUを用いたアニメーションが可能というDirectX 10を一歩先取りしたデモなのである。
さらに,頂点追加の代表例ともいえる「N-Patches」を,DirectX 9+Render to VBで実現するデモも披露された。 N-Patchesというのは,ポリゴンの頂点間を曲線で結び,間を適当にプロットして新たな頂点を追加する,3Dオブジェクトを滑らかに見せるテクニックの一つ。先ほど例として挙げたタイヤの話も,実現するには基本的にN-Patchesが用いられることになるが,Render to VBを利用すれば,DirectX 9世代のGPUでも行えるというわけだ。
左はN-Patchesの概念を説明するスライド。右は実際のデモだ。オプションを変えることにより,頂点数をリアルタイムで増減させていた
|
|
|
そのほかにも,いくつかデモがあったので画面とともに内容を紹介しておこう。
Radeonを用いたダイナミックディスプレースメントマッピングのデモ。雪が降り,キャラクターモデルが走り回るのに応じて雪に溝ができていく。このような動的に変化する3Dアニメーションをダイナミックディスプレースメントマッピングを使って実現しているが,ここでもRender to VBが用いられている
|
|
|
ピクセルレベルのソートと合成を行うデモ。動く炎,草,煙が合成される……はずだったのだが,調子が悪かったらしく煙が表示されなかった
|
ちなみにこれらのデモは,「Radeon SDK March 2006」として公開されており,ATIのWebサイトからダウンロード可能だ。SDK(ソフトウェア開発キット)には,計12のサンプルデモが収録されているので,興味のあるRadeonユーザーは,動かしてみると面白いだろう。
講義に参加した開発者にとっては,Render to VBの使用を通じて,DirectX 10環境の開発に(ある程度)慣れることができ,DirectX 10のレンダリングエフェクトの一部を体験できることになる。ATIとしても,そのあたりをアピールしたかったのかもしれない。
なお,講義では,GPUをCPU的に用いるGPGPU的な話も取り上げられた。実際のところ,GPGPUについてはATIも力を入れている分野だと思われるが,デモを用意できなかったためか,はたまたDirectX 10と直接的な関わりはないためか,簡単に触れられるにとどまった。(米田 聡)
|
|
|