这个问题出在制作spine动画的本身,这个spine里面的图片因为制作了各种效果最终使得opengl切换了材质而产生drawcall.你让制作spine动画的同事,就用那些图片不要加任何效果,就做个平移试试,所有图片如果只导出成一张大图就会只有一个drawcall.当然前提是你要设置spine能合批。
不加任何效果意味材质都是相同的,所以是能够合批的。要想降低drawcall就得让做spine的同事明白怎么做动画不会打断合批。
现在3.7.2能合批spine吗?印象中说这个spine还没合批
刚跟美术确认了,因为美术在spine上用了叠加(例如让闪电更亮),导致dc很高,现在取消叠加后,dc降到2-3了
应该是可以的,但我理解的是多个spine一起合批,而且应该多个spine是连续的节点,因为合批也是基于节点树的
我看到你这里面的节点很多啊,有好几十个,产生这么多的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的事同,做一个空白动画给你,里面就放一张图片,什么都不要做,你拿来生成100个节点试试
额,就算是可以,但问题还是看spine怎么弄才会只占用一个dc,因为我没弄过spine,没相关的经验
就是使用相同的材质啊,通常就是不要使用那些特殊效果,特殊效果是另外的材质了
谢谢大佬回答,现在基本搞清spine的问题了
这个显示dc的工具好像挺牛逼的?什么插件?
就是引擎自带的
原来你说这个,这是商城的付费插件
因为合批的前提是同一纹理(这里你说的是用一个,同一着色器(这个肯定用的一个),以及同一混合参数(所以只能是这个不一样)。
动画为了出特效,通常来说都会加一些混合,所以才会有不只一次的drawcall
确实是这个问题;有以下两种解决办法
一
Spine的计算部分搬到gpu中计算,
二
运行一边Spine动画,缓存每帧动画的spine计算的数据,后面不计算直接使用已计算过的数据
请问怎样才能把spine的计算搬到GPU里?这个我第一听……希望大神再指点下,不胜感激!
后来怎么解决的