パーティクルシステムをジオメトリシェイダーで完全に更新するか、ジオメトリシェーダーに位置と寿命の更新データを渡す必要がありますか?現時点では、私はジオメトリのすべてを更新しますが、これが最良のアイデアであるかどうかはわかりませんが、データの一部はC++で必要です。パーティクルシステムをジオメトリシェイダーで完全に更新する必要があります
答えて
シェーダのほとんどすべてに可能です(特にSM4 +の場合)。市場浸透が必要な場合は、SM3以上のものはお勧めしません。かなり残念なSM2カードを使用している人がかなりいるため、最新のゲームではSM2のフォールバックは提供していませんでした。
その他の質問RTTを使用して、メインメモリへの往復をやり直すことはできません(グラフィックスメモリからメインメモリへの転送を最小限に抑えます)が、AABBを計算するには幾分精巧なトリックを使用する必要がありますあなたが純粋なGPUに行くなら、それはあなたが物事のCPU側で望むでしょう)。
代わりに、CPU側でパーティクルの状態を変更する必要があるすべてを行います。その後、そのデータの厳密なメモリ表現がGPUに更新されます。頂点シェーダはかなり複雑です(ただし、頂点シェーダで可能な限り上手くいくのですが)、この圧縮されたパーティクルの表現を抽出し、それを変換し、非圧縮データをピクセルシェーダに渡します。ここで重要なのは、パーティクルごとに頂点ごとに分割することができることです。&これはインスタンス化を使用することを意味します(これはちょうど言い方です:周波数分周器を使用する)。我々は、粒子の回転を、その法線についての通常の+回転で表します。
パーティクルCPUサイドの状態変更を行うもう一つの理由は、CPUサイドのビヘイビアを合成する方がずっと簡単です。興味深いパーティクルエフェクトを作成できるようにするには、少なくとも半分以上のパーティクルシステムにはかなりのノブが必要です。
EDIT:インライン化できないParticle :: Updateに似たものがあれば、パーティクル関数呼び出し、特に仮想関数呼び出しを最小限に抑え、パーティクルのメモリ表現をしっかりとパックしてください!
あなたが持っているパーティクルシステムの種類によって異なります。ほとんどの場合、C++でのソフトウェア表現と、シェーダのハードウェア表現があります。シェーダのジオメトリデータはソフトウェア表現から計算され、可能な限り小さくする必要があります。ほとんどの場合、計算能力は限られたリソースではなく、グラフィックスカードへの転送速度です。
メソッドを使用して転送をさらに減らすことができれば、ソフトウェア表現をメモリに保存してさらに使用することができます。これは、データを2回計算することを意味しても、転送プロセスよりも高速になる可能性があります。
私の粒子システムは、煙、火災、埃、雨などの形で来ます。現時点では、位置と速度のためにシェーダにランダムなxyとzの値を送ります。また、パーティクルのフレーム時間とライフタイムを渡します。 My Shaderは、粒子が入ってくる値に基づいて粒子の位置を決定します。ソフトウェアでこれらの計算を行いますか? – RobBain85
多分私はあなたを誤解します...しかし、あなたがランダムな位置と速度を送ると、パーティクルはちらつきますか?または、これらの値は1回だけ計算され、フレーム時間のみが更新されますか?その場合、確定的な動きだけが可能である。 –
申し訳ありませんええ、彼らは粒子が何度も繰り返してemmitedされているときに適用されます – RobBain85
- 1. Unity Shuriken:パーティクルシステムを完全にスケールする
- 2. 更新があれば完全なAndroid Studioをダウンロードする必要があります
- 3. sqlite join selectはテーブルを完全にスキャンする必要がありますか?
- 4. 手動でページを更新する必要があります
- 5. HTML divに完全に別のdivを含める必要があります
- 6. オブジェクトを格納する場所セッション全体が必要で、データベースを更新しながら更新する必要がありますか?
- 7. Css Hover Selectorは完全な行を選択する必要があります
- 8. NSUserDefaults - アプリのキー名を完全修飾する必要がありますか?
- 9. どのピクセルが(完全に)透明であるかを把握する必要があります
- 10. Firemonkeyアプリ。データを更新する必要があります
- 11. angularjs $ uimodalを更新する必要があります
- 12. TinyMCE - ページを更新する必要があります
- 13. スレッドJFrameはJTextPaneを更新する必要があります
- 14. モデル内のパラメータを更新する必要があります
- 15. ALTER TYPEオブジェクトを更新する必要があります
- 16. ドロップダウンリストからクエリを更新する必要があります
- 17. バディプレスのトップバーを更新する必要があります
- 18. 変更する前にモデルを更新する必要があります
- 19. アレイ内の値を更新する必要がありますが、元の値をそのまま更新する必要があります
- 20. 完全なコンテンツプロバイダが必要ですか?
- 21. ビューはいつ更新する必要があります
- 22. firebase観測が完全に完了したときを知る必要があります
- 23. ファイルパスは完全修飾されている必要があります - パペット
- 24. マスターリストのアイテムの更新があるたびに、同じアイテムを更新する必要があります
- 25. ログインビューで意味のある完全なメッセージで404エラーを表示する必要があります
- 26. パーティクルシステムの再生を停止するとすぐに無効にする必要があります。
- 27. 更新後にノーマルモードで行を作成する必要があります
- 28. 2017年にHTTPSでiOSアプリを更新する必要がありますか?
- 29. コンポーネントでscrollIntoViewを強制的に更新する必要がありますか?
- 30. 要素タイプ "person"の内容が不完全で、一致する必要があります(familyname、firstname、city?、telephone +) "
ああブリリアントな返信、それは私に多くの意味があります。私の次の仕事はソフトパーティクルを実装することです。このため、純粋なGPUを使用している場合、深度の並べ替えを非常に簡単に行うことができないため、この質問をする必要がありました。私は非常にあなたが言ったことを反映するために今私のコードを変更することができます – RobBain85