我正在开发我的第一个游戏引擎,并试图实现一个GPU粒子系统。我以前在CPU上实现了一个,但现在我正在努力使它更有效率。具体地说,我的问题是在生命周期中产生粒子。
因为我正在为粒子引擎处理帧缓冲区纹理,所以它是非常并行的,但代价是无法返回到CPU,对吧?我首先绘制了一个处理特定粒子系统计算的四边形(为了排序,可能还需要有第二个四边形),然后运行glDrawArraysInstanced
我的一个想法是在需要创建粒子时使用boolean或int,表示创建粒子的需要或要产生的粒子量,两者都由CPU初始化。因此,如果我发现一个粒子(像素)的寿命(假设第一个fbo纹理的alpha值)小于零,并且我知道我应该创建它,我如何禁用其余粒子的创建,或减少要爆炸的粒子数量?我听说过像转换反馈这样的东西,但我不知道这是不是最好的方法。和无状态粒子声音限制-并不是所有粒子都有1:1的产卵率。
简单地重复一下这个问题:产生GPU粒子的最佳方法是什么?
如果我能得到CPU上的粒子数量,顺便说一下,我可以设置绘制glDrawArraysInstanced的数量,所以如果你能在你的答案中包括这个数字,我将不胜感激。
https://stackoverflow.com/questions/38285650
复制相似问题