ニュース
[CEDEC 2006#08]NVIDIA,DirectX 10を利用したエフェクトの実例とパフォーマンスの秘密を解説
■DirectX 10のキモはジオメトリシェーダとStream Output
DirectX 10に関しては4Gamerでも何度となく取り上げているが,DirectX 10ではドライバレベルでの大改変がなされ,(難しい話をすれば)システムコールからして大きく変わってくるなど,3Dプログラミングに与える影響も大きい。
そして,2006年8月30日に行われたATI Technologiesによるセッションでも解説されたとおり,グラフィックスパイプラインにジオメトリシェーダ(Geometry Shader)ユニットが新設され,各シェーダユニットがグラフィックスメモリにアクセスできる点がDirectX 10の大きな特徴だ。
というわけで,このNVIDIAのセッションでも自ずとジオメトリシェーダとSteam Outputの応用が中心テーマになった。ジオメトリシェーダやStream Outputを用いた具体的な事例を,一部のサンプルコードとともに紹介するという内容である。どのような例が取り上げられたのか,簡単に紹介していこう。
●ジオメトリシェーダを用いた
●リアルタイムのファーシェーディング
毛が生えた動物のようなゲームキャラクターを使いたい場面があったとする。このとき,ふわふわとしたファー(毛)をリアルタイムでレンダリングするのは,それなりに難しい。
現在,ファーシェーディングでは,主に「シェル法」が用いられている。キャラクターの表面に,半透明テクスチャを何層か(ここでは8層)重ねてシェルを描き,表面にボケ味を出す。そのうえで,キャラクターの表面から垂直に立ち上がる毛のようなヒレ(フィン)を重ねる。これによって,毛のふわふわとした感じを表現するというのがシェル法の概要だ。このとき,「毛のないキャラクターモデルから,フィンを生成する」のに計算が必要になるため,それなりに重い処理となる。
●Stream Outputを用いた布の処理
ジオメトリシェーダには,フレームバッファ(≒グラフィックスメモリ)にデータを書き出す機能「Stream Output」が用意されているといる。この機能については,先述のATI Technologiesによるセッションでも紹介されたが,Deudarshu氏は,その応用例として,布の処理を挙げてみせた。
そして,このようにお互いに拘束されたパーティクルの動きの計算に,ジオメトリシェーダとStream Outputを用いるという。あるパーティクルの計算を行うと,その結果が次のパーティクルの動きに影響を与える。ジオメトリシェーダは計算結果をグラフィックスメモリに書き出して,そのデータをもとに再び計算を行えるので,パーティクルの動き(≒布の動き)のような計算は得意,というわけだ。
実際には,以上のような方法だけでは計算量が大きくなり過ぎる。そのため,Deudarshu氏は計算量を減らすテクニックなども解説したが,これはさすがにプログラム手法の話になるので,本稿では省略させていただきたい。
●GPUを使ったメタボール(マーチングキューブ)
メタボールを理解するに当たって,少し予備知識を。
地上では,地面から離れるに従って,「位置エネルギー」と呼ばれるエネルギーが大きくなる。そして,位置エネルギーが同じ地点を結んだ面を「等重力ポテンシャル面」という。一番分かりやすいのは海面で,海面は,地球上のどこにあっても,位置エネルギーが同じところにできているのだ。
■DirectX 10のパフォーマンスは?
講義では,これらの課題について,それぞれコード例を挙げつつ詳しい説明がなされた。開発者には参考になった部分もあったのではないだろうか。
だが,演題として掲げられたパフォーマンスは? と戸惑う読者は多いだろう。実は,ここまで述べてきたことに,すでにパフォーマンスが含まれているのである。
今回はファー,布,メタボールと三つ例が挙げられたが,いずれも「CPUをほとんど使用せずに実現できる」ことが大きなポイントだ。CPUは,こうした処理から解放されるわけだから,その分,ゲームのパフォーマンスは上がることになる。
また,セッションの最後に設けられたQ&Aのなかでは,メモリアクセスにかかる時間の低減についても触れられていた。
CPUからフレームバッファにアクセスするには,PCI ExpressやPCIなどを介する必要があり,かかる時間が大きい。この点,DirectX 10ではシェーダユニットがグラフィックスメモリにアクセスでき,CPUに近い汎用性の高い処理が行えるよう改良されているので,CPUがフレームバッファ(=グラフィックスメモリ)にアクセスするという,時間的ロスの多い動作が不要に――とまではいかないかもしれないが,少なくは――なる利点もある。
ちなみに,DirectX 10対応のGPUの登場時期やパフォーマンスについては「発表されていない製品については触れられない」という予想どおりの答えが返ってきた。
NVIDIAによる講義ではあるものの,NVIDIA製GPUに特化した部分はなく,総じてDirectX 10の使い方に絞った内容だった今回の講演。ハードウェアの新情報を期待していた向きには期待ハズレだったかもしれないが,参加したゲーム開発者には,それなりに参考になったのではないだろうか。(米田 聡)
- 関連タイトル:
DirectX
- 関連タイトル:
Windows Vista
- この記事のURL:
(C)2007 Microsoft Corporation.