Hi,各位
最近继续测试了cocos2d-x有关3D部分的性能瓶颈,做出一下总结
模型样本还是在http://www.cocoachina.com/bbs/read.php?tid=296248#1286960中提到的模型
测试模型:2500面,58根骨骼的模型
3D性能比较差的原因主要在于骨骼的计算上占据了大量的时间
主要性能开销在两个地点,大约在每一帧中占了80%-90%的计算量,希望能够想办法优化一下
1.Animate3D的update中,对骨骼的球面插值算法(Quaternion::slerp),这里计算的是整个骨架的数据,实际测试时候发现,骨架的数量实际上比mesh中的骨骼要多,有72根,所以这每帧会有72次插值算法
2.Sprite3D中的draw函数,meshCommand.setMatrixPalette(skin->getMatrixPalette()); 这句话中计算了mesh里骨骼的数量,58次。
主要是这两个地方,而且仔细对比了一下,在draw里面用的时间要比update里面消耗的更多
最后还有一个问题,应该算是BUG吧,
如果一个正在播放动画的3D精灵不在照相机的视野范围内,虽然改精灵被裁剪后不会被绘制,但是animation的update依然在执行,如果场景里有部分精灵在场照相机外,也产生额外的性能开销