关于3D模型的draw call次数的疑问

Hi, 各位

我们目前遇到一个关于draw call次数的疑问!

我们自己创建的模型,由一个主体人物,一个武器部件,一套骨骼构成。
我们在创建这样一个模型的时候引擎一共创建了3个node,绘制时一共调用了4次draw call

而我们在测试官方的例子“girl.c3b”时,这个文件同样是包含行走动画的,但是只调用了1此draw call

这让我们觉得我们的模型会消耗更多的性能,但是我们也搞不清楚其中的原因,请问有什么方法可以帮我们优化这个问题吗?

备注:

  1. 我们的导出参数完全是参考的http://cn.cocos2d-x.org/tutorial/show?id=1188
  2. 稍微跟踪了一下创建流程,两者的创建的流程是不一样的,“girl.c3b”走的是version-0.1的路径,我们的模型走的是version-0.6的路径,这方面的区别会有影响吗?

新上传了图片和模型的FBX文件
我其实想知道的是,两个模型都是带有动作的,为什么第一个只会draw一次,我的却要draw两次,请帮忙研究一下

是不是包含了多张纹理,一个纹理一个drawcall跑不掉的。。

对了,关于绘制,如果没有texture,可以在Sprite3D::draw函数中
加上

    if (!textureID)
    {
        continue;
    }

当然这个只是一个没经过验证的优化。。不知道你那边的具体能不能用这个。。

只有一个纹理,武器和人物主体都是使用的同一张纹理

而且如果武器和人物主体的纹理是分开算的话,那也是draw call两次,但是现在显示的是4次,还有两次不明白

不知道你咋测得

。。。。。。。。

发模型上来,大家帮你分析一下啊。
你导成c3t格式,用-t,然后看里面多少个meshpart :“parts” 这个代表几个mesh,然后画几次。

模型多少根骨骼?

这个测试模型上有83根

那难怪了,超过40个蒙皮骨骼,就会被拆分,你那个83正好被才分成3个。

参数-? 可以打印帮助。
-n 可以修改一个draw call 最大骨骼数,默认是40,可以适当修改,但不要超过60,因为gles2官方的uniform最大是64,还要留给其他uniform参数的。

http://www.cocoachina.com/bbs/read.php?tid-236693.html 看看这里面的介绍

谢谢解答,没注意看到增加骨骼会增加drawcall的次数,是我自己看的不仔细。

那这个可能就没办法解决了,我们也测试过模型动作,40个骨骼只能保证基本动作,如果要让头发和衣服等细节能够飘动起来,有个比较好的动作效果,骨骼数量差不多要达到60-80左右了。

在设备上测过,在模型数量不是特别多的情况下,几百元的设备也能达到40帧左右,还是能够接受的,不过性能方面还是可以持续优化的

:14: :14: :14: :14:

骨骼数量对性能影响很大,基本上是越少越好。