DirectComputeはDirecX11API に最近追加されたもので、DirectX11グラフィックスAPIの一部としてGPGPU処理を可能にするものです。本セッションでは、order independent transparency およびクロスシミュレーションの二つの例を用いてDirectComputeの主要な機能を説明します。この説明の目的は、DirectCompute および DirectX 11の詳細を語ることではなく、ゲーム開発者にどのように役立つのかを紹介し、実際のゲームアプリ開発へ適用して頂くことです。講演内容は、高位レベルのアルゴリズムや幾つかのサンプルコードを含みます。サンプルコードはゲーム開発者にとって新しく映るであろう主要なAPI機能に絞り、デモを交えて説明します。
1番目のorder-independent transparencyはレンダリングの例です。半透明ジオメトリのブレンディングはorder-dependent transparencyとなることが多く、ソート処理が必要です。しかしソート処理は複雑(ジオメトリの相互作用)であり、現行手法は時間がかかります(depth-peeling、深度剥離)。筆者らの提案する手法は高速かつ高精度であり、またDirectComputeの新たな機能を使うことのみによって可能となるものです。
この手法は2つのステージからなります。1つめのステージでは、あらゆる透明なオブジェクトは通常のピクセルシェーダーでレンダリングされます。ただしレンダーターゲットを出力するのではなく、ピクセル毎に深さとカラーからなる連結リストを生成します。連結リストはappend buffer(DirectX 11の新機能)とscattered writeを用いて生成されます。2つめのステージである解決ステップにおいては、シングルシェーダーパスが用いられ、各ピクセルの連結リストをソートし、ソートされたリストをブレンドしてピクセルの最終のカラーを求めます。この手法の長所は、シンプルな変換であり既存のレンダリングパイプラインに容易に実装できることです。DirectCompute機能の多くはこれまでにあるグラフィックスパイプラインへの実装しやすく設計されています。このテクニックはATI5000GPUシリーズのMechaデモにて取上げます。
http://developer.amd.com/samples/demos/pages/ATIRadeonHD5800SeriesRealTimeDemos.aspx
二つ目の例では、DirectComputeで高速化されたクロスシミュレーションをBullet Physics SDKへ統合します。リアルタイムのクロスシミュレーションは高度の並列性を持っており、現世代GPUの持つデータパラレル計算による高速化の成果が発揮されます。クロス実体は、数多くのパーティクルで構成され、パーティクル同士はバネ特性を持つリンクで結合しています。
構造とスプリングの伸縮特性を変えることで、クロスの振る舞いは様々に変化し、アーティストはリアルから仮想なものまで幅広い特性を表現することができます。講演ではDirectX 11の実用的な機能を紹介します。さらに計算フローを示し、フローがどのように効率的に実装されるか、またパラレルハードウェア上で高いパフォーマンスを発揮するために必要なアルゴリズムの修正点を説明します。続いて、compute shader (CS 5.0)によるシミュレーションの説明、shared bufferによるダイレクトレンダリング、不要なコピーを避けるためvertexとpixelシェーダーを用いる内容の説明です。この手法は他のパーティクルを用いたシミュレーションシステムへも適用可能であり、本セッションで提供する貴重な知見になるでしょう。
タグ:
日時:
2010年09月02日(木)11時20分〜12時20分
形式: セッション(60分)
受講スキル:
GPUプログラミング経験、およびグラフィックスパイプラインの理解
受講者が得られるであろう知見:
DirectCompute機能、およびそれらがゲームにどう展開できるかを含む上級DirectX 11技法を学ぶ
セッションの内容
所属 : AMD
役職 : O-CTO, Senior Engineer
所属 : AMD
役職 : Advanced Technology Initiatives Senior Member of Technical Staff