Hi 各位
昨天对cocos2d-x的3D性能提出了疑问,今天就干脆在真机上做了一下性能的测试,给大家分享一下测试结果
先来一个总结:cocos2d-x的性能瓶颈还是在自己的架构上。
测试设备:
小米4手机一部:作为中端设备参考
三年前的sony手机一部:作为低端设备参考
测试模型:2500面,58根骨骼的模型,26个,参考示意图3
测试场景1:不播放动画,只测试渲染性能
小米4::35-40帧左右
sony:20-25帧左右
测试方法:在scene的render方法中测算每一帧中visit函数与 renderer->render();的耗时情况
void Scene::render(Renderer* renderer)
{
前略****
for (const auto& camera : _cameras)
{
***********************
visit(renderer, transform, 0);
renderer->render();
****************************
}
****************************************
}
测试结果:
WIN平台:visit的耗时与render的耗时基本是对半开,各占50%
Andrid:visit的耗时通常是render耗时的10倍,渲染实际上是不怎么花时间的(0.001-0.003),这可能是CPU性能差的原因,但是无疑也指出了每一帧花费在框架上的计算量过大的问题(0.01-0.04),下面有2张性能截图可以查看一下实际数据
PS:图1为小米4性能截图,图2为sony性能截图
测试场景2:在测试1的基础上,播放动画(开启骨骼的计算)
小米4::15-20帧左右
sony:5-10帧左右
可以看到骨骼计算的性能是灾难性的,直接能让性能掉一半,翻看了一下骨骼动画的计算代码,除了大量的数学计算外,在查找帧序列时使用的是查找算法,虽然是使用的二分查找,但是如果帧序列过多的话,依然会有很多的性能开销。
看来cocos团队还有很长的路要走,性能问题不能及早解决的话,谈何商业化呢。希望cocos团队继续加油,早日完善引擎
最后吐槽一下3.0的新架构,刚从2.0转到3.0的就非常不适应,虽然3.0的架构看起来更加优美一点,但是感觉实用性大打折扣。
尤其是新的command机制给追踪调试增加了难度,额外命令和排序管理增加了性能的开销。
这个跟我个人的编程风格有关系吧,我一向看重实用大于优雅。所以想吐槽一下
新放出来的3.5也做了一些小改动,个人也是感觉可有可无的修改,比如3.5在win平台编译时,现在会将资源拷贝debug目录下,其实这样的改动对开发者来说是没什么意义的。反而会造成一些小问题。比如开发者从3.4升级到3.5的时候就不能只替换cocos目录就OK了,必须重新用3.5创建一个项目,使用新的sln,
因为不知道cocos的整体计划是怎么样的,单从这个小问题来看吧,个人觉得就是为了优雅而优雅的工作。其实cocos频繁的变化也是众多开发者诟病的地方。
cocos团队就这么几个人,希望把有限的精力放到完善核心模块上吧,这个才是大家关心的根本

