2012-11-20 6 views
5

私はこれで終日終わり、それをあきらめ始めています。私は計算シェーダに関する多くの情報を見つけることができません。最高のソースは「Direct3D 11での実用的なレンダリングと計算」でしたが、残念ながらそれほど助けにはなりませんでした。それは私がいくつかの理論を理解するのを助けましたが、私はまだ何かを実装する方法を知らない。シェーダを計算します。パイプラインにはどこに収まるのでしょうか?

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

私が理解できないことは、計算シェーダがパイプラインにどのように収まるかです。私は何をする必要があるのか​​理解していると思うが、どうやってそれを働かせるのか分からない。

私はどういうわけか、すべてのパーティクルポジションで満たされたバッファで計算シェーダをシードする必要があります。 (1024x1024x1バッファと言う)。私はこの計算シェーダを頂点として頂点シェーダに出力する必要があります。残りのパイプラインは標準です(頂点シェーダはすべての変換を行い、ジオメトリシェーダは頂点をクワッドに展開します。シェーダがレンダリングします)。

これが正しいかどうかわかりませんが、それは正しいと思います。たとえそれがあったとしても、どうやってこれをやっていくのか分かりません。計算シェーダの出力を頂点シェーダにどのように送るのですか?どのようにして最初に計算シェーダをシードするのですか?計算シェーダがパーティクルのバッファを破棄しないようにするにはどうすればよいですか? (そうでなければ、毎回パーティクルを供給する必要があります。パーティクルシステムを(最終的にはパーティクルシステムをCPUのすべてでやらなければならないので)移動させるという目的を奪います。

未知のものがたくさんあります。これらのシェーダーを書き始めることさえ知っているような気がします。私は足踏み石を見つけることができません。

+0

それはパイプラインの残りの部分に直接適合しません。それは独立したものです。インターフェイスは明らかな理由から多くの同じものを使用します。結果と入力は、パイプラインが使用するのと同じ種類のグラフィックカードオブジェクトであり、ピンプラインと組み合わせて使用​​すると非常に良いものになります。 – jcoder

+0

私はコンピュータのシェーダを使い始めました。グラフィックスとは関係なく、2つのバッファに数値の配列を設定し、演算シェーダで合計を含む3つ目を生成し、CPUに読み込んで印刷します...あなたは、粒子の負荷の位置を更新するためにそれをどのように拡張することができるかを見ることができます。そして、それらの位置をCPUに読み戻す必要はなく、グラフィックピンプラインプログラムはデータを直接入力として使用できます。 – jcoder

+0

私はこの本のような何かをお勧めしますhttp://www.amazon.co.uk/Introduction-Game-Programming-DirectX-ebook/dp/B0085CDJY4あなたの必要とする正確な種類の例が含まれています。 (それはいくつかのステップを時々除外しているように見えますが、私はそれが良い本でした) – jcoder

答えて

3

計算シェーダはグラフィックスパイプラインの一部ではありません。これは簡単なGPGPUのためのツールなので、パーティクルムービングのような非レンダリング目的のグラフィックデバイスの計算能力を簡単な方法で使用することができます。パーティクルシステムに使用する場合は、最初に計算シェーダを使用してパーティクルの位置を計算する必要があります。次に、通常のコードの出力をレンダリングのために頂点バッファに塗りつぶします。 AFAIKでは、出力をレンダパイプにパイプする直接的な方法はありませんが、計算シェーダに慣れていません。 あなたの興味を引くリンクはdocumentationexampleです。グラフィックパイプラインはpageに示されています。

関連する問題