ニュース
[CEDEC 2006#02]Radeonを使ってDirectX 10を先取り? ATI,「Render to VB」の実機デモ
2006/08/30 21:57
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と直接的な関わりはないためか,簡単に触れられるにとどまった。(米田 聡)


ATI Radeon X1900
■開発元:AMD(旧ATI Technologies)
■発売元:AMD(旧ATI Technologies)
■発売日:2006/01/24
■価格:製品による
→公式サイトは「こちら」
ATI Radeon X1300/X1550
■開発元:AMD(旧ATI Technologies)
■発売元:AMD(旧ATI Technologies)
■発売日:2005/10/05
■価格:製品による
→公式サイトは「こちら」
ATI Radeon X1600
■開発元:AMD(旧ATI Technologies)
■発売元:AMD(旧ATI Technologies)
■発売日:2005/10/05
■価格:製品による
→公式サイトは「こちら」
ATI Radeon X1800
■開発元:AMD(旧ATI Technologies)
■発売元:AMD(旧ATI Technologies)
■発売日:2005/10/05
■価格:製品による
→公式サイトは「こちら」

【この記事へのリンクはこちら】

http://www.4gamer.net/news/history/2006.08/20060830215706detail.html