5

私は一日中これにいて、それをあきらめ始めています。計算シェーダーに関する多くの情報が見つかりません。最良の情報源は「Direct3D 11 による実用的なレンダリングと計算」でしたが、残念ながらあまり役に立ちませんでした。いくつかの理論を理解するのに役立ちましたが、まだ何かを実装する方法がわかりません。

私は、その本で作成されたパーティクル システムに似たものに取り組んでいます。私のパーティクルシステムを除いて、基本的には3Dグリッドに表示されるパーティクルだけがあります(重力/力/などのようなものはありません)。これは教育目的のためのものです。これが機能するようになれば、残りの作業を行うことができると思います。

私が理解していないのは、計算シェーダーがパイプラインにどのように適合するかです。何をする必要があるかは理解していると思いますが、それを機能させる方法がわかりません。

すべてのパーティクル位置で満たされたバッファーを計算シェーダーにシードする必要があります。(たとえば、1024x1024x1 バッファー)。次に、このコンピューティング シェーダーがすべての位置を頂点として頂点シェーダーに出力する必要があり、その後の残りのパイプラインは標準です (頂点シェーダーがすべての変換を行い、ジオメトリ シェーダーが頂点をクワッドに拡張し、ピクセルをピクセルに拡張します)。シェーダーがレンダリングします)。

これが正しいかどうかはわかりませんが、正しいように聞こえます。たとえそうであったとしても、どうやってこれをやろうとしているのか、私にはわかりません。計算シェーダーの出力を頂点シェーダーに供給するにはどうすればよいですか? そもそも計算シェーダーを最初にシードするにはどうすればよいですか? 計算シェーダーがパーティクルのバッファーを破棄しないようにするにはどうすればよいですか? (そうしないと、毎回パーティクルを供給する必要があり、(最終的には) 動き回るパーティクルを使用してパーティクル システムを実行するという目的が無効になります。CPU ですべてを実行する必要があるため)

不明な点が非常に多く、これらのシェーダーを書き始めるには、すべてを知っている必要があるように感じます。飛び石が見つからない。

4

1 に答える 1

3

計算シェーダーは、グラフィックス パイプラインの一部ではありません。これは簡単な GPGPU 用のツールであるため、グラフィック デバイスの計算能力をレンダリング以外の目的 (パーティクルの移動など) に簡単に使用できます。これをパーティクル システムに使用する場合は、最初に計算シェーダーでパーティクルの位置を計算する必要があります。次に、通常のコードの出力をレンダリング用の頂点バッファーに入力します。私の知る限り、出力をレンダーパイプラインにパイプする直接的な方法はありませんが、計算シェーダーにはあまり慣れていません。あなたにとって興味深いリンクは、おそらくドキュメントとそこにあるです。グラフィックパイプラインはこのページに示されています。

于 2012-11-23T10:47:40.760 に答える