在使用碰撞对的时候,一般都会使用 group 来区分不同的碰撞对,来优化碰撞的处理。但是这样就带来了一个问题,由于同一个 group 下的同贴图节点才能合批,就使得会不停的产生不同的 group 的对象的场景 drawcall 特别高,而且也不太好优化(或者每个碰撞对放到各自的节点下渲染?)
我看到官方博客中的 《我飞刀玩得贼6》性能优化案例分享 中也说到这个问题,其中有一个解决方案 “修改 batching 的代码,在 material 为飞刀的材质时,忽略 cullingmask 的判断”,想知道直接忽略掉 cullingmask 会不会有其他的隐患?
感觉根本的解决方案还是的把 碰撞对 和 合批 标志区分出来,引擎组有这方面的打算么?
直接忽略掉 culliingmask 对于多摄像机还真不行 -。-
楼主您好: 有个疑问
官方2.0加入动态合图会批次渲染。 而按照您的意思:同一group下的不同贴图不能批次渲染? 这怎么讲?
我今天刚遇到这个问题,假如两个图片不是同一group,那么生成这2个图片的时候,dc就会+1,因为图1的渲染合批被图2打断了。如果这时候又生成图1,那么dc又会+1,因为图二的合批被图一打断了。
在这里问下怎么把spine动画的渲染也加到动态合图里面,目前动态合图只是支持Sprite类型的
动态合图是针对细碎的小图的,我所说的同一group下不同贴图是指不同图集中的贴图。
是的,我的场景中这种情况很容易出现,而且经常是不同的group相互交叉出现的,dc就一直不停的变。
现在我在尝试给一个专门的非渲染节点来设置group,而具体的图片作为它的子节点。我简单的测试了一下,这样应该是能合批的。
spine加到动态合图? 没什么意义吧,spine本身自己就会打断合批。比如两个相同的spine,他的 dc 也是 2,不会变成 1。
…从本质上来说 父物体是什么group 子节点也是什么group吧?这样能行?…
不知道…先给你点个赞 万一成了 那就是血赚。
再次跟了一下代码,具体更新 cullingMask 的代码如下
可以看到是直接去取节点的 group, 如果取到是 0 (default),才会递归去取父节点的 group,所以之前说的方式可行,但是显示的直接点的 group 不能设置 defaul,重新定义一个设置就好了。
可以 再赞一次。
有意义的,如果在游戏场景中存在大量相同的spine动画的话,比如一堆金币,一群小兵等
你的意思是把 spine 的贴图加入到合图中么? 我说的没有意义是指 spine 的渲染本身就会打断合批,猜测是使用的材质不一样(具体的代码没有去看)。所以说就算合并了贴图,spine 本身也是另一次 dc,除非引擎组对这个进行优化
所以我才说是把spine的渲染加入合批呀,单单把spine的贴图加入图集是没有任何用处的。
楼主 请问一下能具体说下优化方案吗 我现在也是group太多 导致会突然出现drawcall突然增加的情况
得看你的 group 是用来做什么的。如果是用来做碰撞的话,目前我采用的优化方案是碰撞和显示分离,也就是碰撞节点单独用来挂 group,然后创建一个子节点来设置显示,并且把所有相关的显示子节点重新定义一个 group。
当然这种优化会加大渲染时候节点的遍历,所以如果同时存在的节点数很多的话这种优化方案是不可取的。
升级到了2.0.10,想使用 Spine 的 Enable Batch 功能,但是进行测试了之后,发现在 web 平台下该功能是有效的,但是在 原生 平台下,仍然还是一个 Spine 一个 drawcall 。请问大佬这个功能只对 非原生平台 有效么?@sunnylanwanjun




