cocos2d-x-3.4版本3D渲染性能实测试【2】

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依然在执行,如果场景里有部分精灵在场照相机外,也产生额外的性能开销

1.可以把求面插值改为点采样,动画质量降低,速度会快一下,不过能不能接受就要看你了。
2.这个是硬件蒙皮的矩阵表,播放动画时,需要传入GPU端计算。

bug:
这个你可以在逻辑层做些操作,剔除一下。

感谢提出的意见和建议,我们会参考并修改。