Spine动画的Drawcall过高

这个问题出在制作spine动画的本身,这个spine里面的图片因为制作了各种效果最终使得opengl切换了材质而产生drawcall.你让制作spine动画的同事,就用那些图片不要加任何效果,就做个平移试试,所有图片如果只导出成一张大图就会只有一个drawcall.当然前提是你要设置spine能合批。
不加任何效果意味材质都是相同的,所以是能够合批的。要想降低drawcall就得让做spine的同事明白怎么做动画不会打断合批。

2赞

现在3.7.2能合批spine吗?印象中说这个spine还没合批

刚跟美术确认了,因为美术在spine上用了叠加(例如让闪电更亮),导致dc很高,现在取消叠加后,dc降到2-3了

2赞

应该是可以的,但我理解的是多个spine一起合批,而且应该多个spine是连续的节点,因为合批也是基于节点树的

你能合批成功吗?我这边测试过

image 已经开启合批,但好像没啥效果image

我看到你这里面的节点很多啊,有好几十个,产生这么多的drawcall是正常的。为什么呢,因为你的spine里面有断批啊。你上面有说改了之后还有2-3是吧。我给你举个例子,我用一个数字代表一张图片,数字不同时代表使用不同的材质。

如果你的spine是这样的结构:
00111100
请问绘制这个spine要几个drawcall呢,答案是3个,00提交一次,1111提交一次,00提交一次。

那如果是2个这样的连续节点呢,
就会变成这样:
0011110000111100,那么drawcall就是5个,

三个就是:
001111000011110000111100,drawcall是7个,
这样你明白了吗,你要真正想把多个节点合批把drawcall降下去,
如能做到 00 0000 00这样的结构,那么不管多少个spine合批都只有一个drawcall

明白你说的意思,但spine是怎么可以弄成只有一个dc呢?我看普遍都是2个 :pensive:大佬你的spine有弄成1个dc吗?

你让做spine的事同,做一个空白动画给你,里面就放一张图片,什么都不要做,你拿来生成100个节点试试

额,就算是可以,但问题还是看spine怎么弄才会只占用一个dc,因为我没弄过spine,没相关的经验

就是使用相同的材质啊,通常就是不要使用那些特殊效果,特殊效果是另外的材质了

谢谢大佬回答,现在基本搞清spine的问题了

这个显示dc的工具好像挺牛逼的?什么插件?

就是引擎自带的 :sweat_smile:

1赞


这个橙色的数字显示dc的是引擎自带的??你别骗我 :scream:??怎么设置的?用了3年ccs白用了

原来你说这个,这是商城的付费插件image

因为合批的前提是同一纹理(这里你说的是用一个,同一着色器(这个肯定用的一个),以及同一混合参数(所以只能是这个不一样)。
动画为了出特效,通常来说都会加一些混合,所以才会有不只一次的drawcall

确实是这个问题;有以下两种解决办法

Spine的计算部分搬到gpu中计算,

运行一边Spine动画,缓存每帧动画的spine计算的数据,后面不计算直接使用已计算过的数据

请问怎样才能把spine的计算搬到GPU里?这个我第一听……希望大神再指点下,不胜感激!

后来怎么解决的