私は最初のゲームエンジンに取り組んでおり、GPUパーティクルシステムを実装しようとしています。私は前にCPUに実装しましたが、今はもっと効率的にしようとしています。私の問題は、具体的には、生涯にわたって粒子を産卵することです。Spawning GPU Particle
パーティクルエンジン用のフレームバッファテクスチャで作業しているので、非常に並列ですが、CPUに戻れないという代償を払っています。私はその特定のパーティクルシステムの計算を扱うクワッドを描画するための最初のパスを持っています(並べ替えのためにおそらく2番目のクワッドが必要です)。次にglDrawArraysInstancedを実行します。
パーティクルを作成する必要があるとき、またはCPUによって初期化されたパーティクルを作成する必要があるか、パーティクルが生成されるかを表すブール値またはintを使用する。だから、生存期間(最初のfboテクスチャのアルファ値)が0より小さい粒子(ピクセル)を見つけたら、それを作成するはずですが、残りの部分の作成を無効にするにはどうすればいいですか?パーティクル数を減らすか、バーストするパーティクル数を減らしますか?私はフィードバックを変換するようなことについて聞いたことがありますが、それが最善の方法かどうかはわかりません。また、ステートレスパーティクルはサウンドリミットを制限します。すべてのパーティクルが1:1の産卵率を持つわけではありません。
質問を簡単に繰り返すにはGPUパーティクルを生成する最も良い方法は何ですか?
CPUにパーティクル数がある場合は、glDrawArraysInstancedで描画する量を設定できます。回答に含めることができれば、感謝します。
"私は最初のゲームエンジンに取り組んでいます" - [ゲームではなく、エンジン](http://geometrian.com/programming/tutorials/write-games-not-engines/) –
前のゲーム。他の人のエンジンを使うのに疲れて、すべてのゲームに全く新しいコードベースを書こうとは思わない。私はレンダリング、物理学、照明、入力、および他のシステムのトンですでにたくさんの作業を行ってきました。停止はすぐに良いアイデアのようには聞こえません。 –
ああ、@ JesperJuhl - 私は記事を読んだだけです。私はすでにいくつかのゲームアイデアを計画しており、コード内のすべてのシステムはさまざまなタイプのゲームの中で動作するように計画されています。私が1つのゲームをコーディングした場合、それはあまり柔軟性がありません。例えば、私の入力システムは、LinuxやWindows、まもなくMacと互換性があり、使いやすくて柔軟性があるようにさまざまな入力と機能を持つように設計されています。厳しい愛に感謝しますが、本当に必要なことはありません - この問題を解決するための最良の(そして最も柔軟な)方法を理解する必要があります。 –