2

我们想将我们的基础系统从 Cocos2d-x 1.0(Qt 端口 0.6)更改为 Cocos2d-x 2.0(Qt 端口 1.0),但是在更改系统之前需要测试几个任务。其中一项任务是粒子系统的性能。请记住,从 1.0 更改为 2.0 时性能会提高,我们发现相反的情况。1.0 版的性能似乎比 2.0 版好得多。现在我们想知道这是否正确,希望有人能给我们一些我们可能错过的提示(Cocos2d-x 的错误设置,错误的设置,...)。

为了测试性能,我们创建了一个简单的测试场景:使用一个粒子系统,可以在按下场景时多次添加。这个粒子系统使用不同大小的纹理(4x4px 和 32x32px)和四粒子系统。

测试的基础是 Cocos2d-x 的 HelloWorld 示例。此外,我们启用了触摸接收器,创建了批处理(如果需要),将标签转换为计数器并添加了粒子系统插入例程。源代码和资源作为 zip 存档的链接附在下面。

我们比较了 Linux 版本的 Cocos2d-x 和 Qt (MeeGo Harmattan) 版本的 Cocos2d-x。测试结果可以在 excel 表http://www.fantasyhaze.com/sof/Particle_Performance_Tests.ods中找到。在每个测试用例中,1.0 版本的性能都优于 2.0。在每个测试用例中,批处理粒子系统与 Cocos2d-x 2.0 中的未批处理粒子系统具有相同的性能。性能是在 FPS/粒子系统中测量的。

结果:

批处理和非批处理系统之间没有性能差异,因为每个效果都使用了小纹理。所以没有太多的OpenGL状态变化。当使用具有大量透明度或更多粒子的巨大纹理(由于性能下降而无法实现)或使用使用不同纹理的不同粒子来预测 OpenGL 状态变化时,可能会看到更强的效果。

因此,总体性能下降可能不仅仅是图形方面,而更多的是 CPU 的高利用率(为数千个粒子计算每帧中粒子的位置,即:47 个粒子系统和 350 个粒子产生有效载荷47*350 = 16450 个粒子,每帧都需要重新计算)。当使用批处理粒子时,这也是可以使用的最大粒子数量,因为 GL 绘制函数使用 16450 个粒子达到的无符号短值。16450 * 4(顶点)= 65800(ushort = 65535)。当在台式机上使用批处理粒子与未批处理粒子时,可以看到(在屏幕截图上)。在批处理中插入 47 个粒子后,它将停止显示新效果。当添加更多效果时,性能仍然会继续下降,这说明性能损失主要基于 CPU 端而不是 GPU。当使用 4x4px 纹理而不是 32x32px 时,也可以注意到这一点,只能放置大约 10 个效果(在桌面上)。

相关话题:

excelsheet、截图和源代码可以在存档中找到 - http://www.fantasyhaze.com/sof/Particle_Perfromance_Tests.zip http://www.fantasyhaze.com/sof/Particle_Perfromance_Tests.ods

4

0 回答 0