. Bu kez sadece teknik bir tasarım bakış açısından.XNA - Başka bir XNA sorusu için aynı anda çok fazla partikül oluşturma
Durumum şudur: GPU hesaplamalarına dayanan bir parçacık motoru oluşturdum, tamam ama çok işe yarıyor. GPU'm 10k parçacıklarını terlemeden kolayca işleyebilir ve bir grup daha ekleyebilirsem şaşırmam.
Sorunum: Aynı anda çok fazla parçacık oluşturduğumda, kare hızım benden nefret ediyor. Niye ya? Neredeyse sadece bellek işlemlerini içerecek şekilde küçültmüş olmama rağmen bir çok CPU kullanımı.
- yöntem parçacık oluşturmak isteyen ve bir çağrı yapar: partiküllerin
Oluşturma hala gibi CPU aramalar ile yapılır.
- Dört köşe şeklinde oluşturulur ve bir tamponda saklanır
- Tampon GPU içine yerleştirilir ve zaman işlemci I yaklaşık 4 yayıcılar çerçeve başına bir parçacık oluşturmak başka şeyler
odaklanabilir alınmıştır ancak FPS düşürür (emin olun, sadece saniyede sadece 4 kare ancak 15 yayıcı FPS'imi 25'e düşürür). Bir parçacığın
Oluşturma:
//### 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);
Düşüncelerim belki çoğu zaman, belki GPU, her şeyi oluşturmak bildirmek için bir yol yoktur parçacıklar oluşturmak gerektiğini ya da belki de sadece don' Bu şeyleri nasıl yaptığını bil. ;)
Düzenleme: Sıklıkla parçacıkları oluşturmak istemediysem, bunun hala iyi görünmesi için geçici çözüm nedir?
Bu yüzden burada iyi bir parçacığın motorunun nasıl tasarlanacağını ve belki de bir yere yanlış yol aldığımı bilmene dair ümitle gönderiyorum.