別の XNA の質問の時間です。今回は純粋に技術的な設計の観点からです。
私の状況は次のとおりです。GPU 計算に基づいてパーティクル エンジンを作成しましたが、完全にはほど遠いですが、動作します。私の GPU は 10,000 個のパーティクルを苦労せずに簡単に処理できるので、さらに多くのパーティクルを追加できても驚かないでしょう。
私の問題:同時に多数のパーティクルを作成すると、フレーム レートが低下します。なんで?ほとんどメモリ操作のみを含むように最小限に抑えましたが、大量の CPU 使用率。
パーティクルの作成は、次のような CPU 呼び出しによって引き続き行われます。
- メソッドはパーティクルを作成し、呼び出しを行います。
- クワッドは頂点の形で作成され、バッファに格納されます
- バッファが GPU に挿入され、CPU は他のことに集中できる
フレームごとに 1 つのパーティクルを作成する約 4 つのエミッターがある場合、FPS が低下します (確かに、1 秒あたり 4 フレームしかありませんが、15 個のエミッターでは FPS が 25 に低下します)。
パーティクルの作成:
//### As you can see, not a lot of action here. ###
ParticleVertex []tmpVertices = ParticleQuad.Vertices(Position,Velocity,this.TimeAlive);
particleVertices[i] = tmpVertices[0];
particleVertices[i + 1] = tmpVertices[1];
particleVertices[i + 2] = tmpVertices[2];
particleVertices[i + 3] = tmpVertices[3];
particleVertices[i + 4] = tmpVertices[4];
particleVertices[i + 5] = tmpVertices[5];
particleVertexBuffer.SetData(particleVertices);
私の考えでは、パーティクルをそれほど頻繁に作成するべきではないかもしれません。GPU にすべてを作成させる方法があるかもしれません。または、これらの作業をどのように行うかを知らないだけかもしれません。;)
編集: パーティクルをそれほど頻繁に作成しない場合、見栄えを良くするための回避策は何ですか?
したがって、良いパーティクル エンジンをどのように設計する必要があるか、また、どこかで間違ったルートをたどった可能性があるかどうかを知っていただくために、ここに投稿しています。