我将粒子系统添加了一个GPU加速的管道。
视频是一个测试,测试中约有1,275个CPU粒子和1,275个GPU粒子同时 spawn。
当粒子发射时,用于发射的粒子数据在CPU上生成并发送到GPU的粒子发射缓冲区。发射缓冲区然后将粒子添加到粒子更新缓冲区中。从那时起,粒子更新和销毁完全在GPU上通过计算着色器处理。当前,粒子缓冲区设置为30万颗粒子,发射缓冲区设置为50,000颗粒子。这一粒子缓冲区设置使用约37MB的视频内存。之后我会需要对缓冲区大小进行微调,但这个是目前的样子。由于是基于DirectX 11 напис的,所以就没有使用mesh shaders。
当然存在一些缺点。 Alpha排序就是一个问题。在CPU粒子上,支持类似动画轨迹这样的特性,例如UV、Alpha、颜色、折射轨迹等动态更新的特性,然而我在GPU粒子上排除了所有这些轨迹特性(可以实现,但内存开销太大)。因此,要么采用艺术性粒子处理为CPU粒子,要么采用大量数量粒子处理为GPU粒子。
这个文本使用ChatGPT进行翻译。
评论 (0)