Box2D + WinRTでゲームを作る (7) - FluidCS11サンプル

公開:2013-05-30 20:16
更新:2020-02-15 04:37
カテゴリ:シューティングゲーム,directx,box2d,windows,c++,ゲーム,box2d + winrtでゲームを作る,ゲーム製作

昨日今日と、今やろうとしていることになんとなくパーティクルあたりのサンプルも参考になるのではということで、「FluidCS11」サンプルのシェーダーコード辺りを読んでいた。

このサンプルは2次元流体シミュレーションをコンピュートシェーダーで行って表示するというサンプルで、構造化バッファーを使って演算、描画を行っている。構造化バッファーは読み書き可能なものと読み取りのみのものがあり、DirectX11では読み書き可能なバッファーはコンピュートシェーダーとピクセルシェーダーからのみアクセス可能である。このサンプルでは読み書き可能バッファーを使いコンピュートシェーダーで計算して、それを読み取りのみのバッファーに丸ごとコピーして描画している。

この方法を使えばBox2Dの物理演算もGPUにさせることができそうだけれども、今の私には無理なので、Box2Dフィクスチャーにくっつくシェイプの座標変換を行う部分をコンピュートシェーダーにやらそうかなとか考えているけど、ポリゴン・シェイプとかだと頂点の数が可変なので普通に定数バッファー+頂点シェーダーでやる方がよいかもしれない。サンプルを観ながらそのあたりを思案しているところだ。

DirectX11.1になると読み書き可能バッファーはすべてのシェーダーステージで使用することができる。これを使えば読み書きバッファーから読み取りバッファーへのコピー操作が不要となる。DirectX11.1は小幅なバージョンアップのように思っていたけど、結構いろいろな変更が行われている。大まかにはWindows8のUIのための拡張がほとんどように思えるけれど。