合并Drawcall的规则 是怎么样的?

现在是排在下面的就会遮挡上面的,这样是否不利于 手动的优化drawcall

1赞

不理解你的意思,合并 drawcall 的规则是这样的:

  1. render command 相邻,大致可以理解为节点树中顺序相邻
  2. texture 一致
  3. blend function 一致
  4. shader program 一致
3赞

比如说一个界面

这里应该有 5个drawcall其中 四个闪应该要合并drawcall的 但是对节点的顺序必须要有要求的排
这样排 就是8个drawcall

只有这样排才能合并drawcall 既不合理 也完全没有任何可以让开发者优化的空间

BMFont 类型的 label 在未来版本是可以和其他贴图进行合并的,TTF 类型无法合并

你这里遇到的恰恰是文字打断了批处理,这是游戏开发中最常见的情况,优化就如你所做的那样,将 Sprite 放在一起,文字放在一起,至于具体怎么排,可以和策划商量优化到比较好管理的状态。

自动批处理不会去打乱项目中设计的场景树,否则 bug 的风险太高。至于你说的不合理和没有优化的空间,目前的方案可能对你来说不够智能,如果有什么建议可以跟我们说,我们目前没有任何其他的批处理设计计划

我似乎明白一点了

如果说用改场景节点结构的话 ,我想做不到太合理,原先的关系被打乱 有些如果要控制你节点的隐藏和绽放的 可能因为节点的改变面变得麻烦,能不能在节点上再加一个属性 NGUI中的Depth来控制节点的渲染顺序,在不改变结构的前提下,手动优化drawcall的合并

1赞

这的确是一个可行的方案,相当于之前的 global z order,目前为了引擎核心层的简单干净,我们去除了这个概念,在渲染层重构的过程中,是有可能加入这个功能的。

嗯 因为我发现 按照现在架构, 在实际 应用上,在ui这一块 基本没有几个能合并 的drawcall

还是有很多的,可以邀请子龙大大来分享一下 1.4 的新成果 BMFont 和 UI 合并 @zilong

还是跟场景结构有关 很典型的 排版 一张图片 一个label 这两个节点挂 在一个你物件上,成为一个item 如果有隐藏显示的逻辑 肯定是直接隐藏父节点,如果为了合并drawcall而不得不把所有的item拆开来 图片放一起 label放一起,那么逻辑会非常混乱

你的文字只要是 bmfont 是可以合并的

我现在在尝试自己添加个Depth到CCNode的属性中 如何让这个属性在Cretor编辑器中显示出来?

目前自己改造了一版,大致思路就是 node可以设置为合并drawcall的父节点,其下的子节点RenderCommand 按照 depth 排序,同一个depth的 按照贴图调整顺序,这里同一贴图的保证还是按之前的场景树中的顺序。

@panda 借楼提两个问题
1、cocos2dx中对于drawcall的控制是否要达到unity中那么严格
其他的程序说在做UNITY项目的时候,drawcall是能省则省。但是我做cocos的项目时觉得文字稍微多占一些drawcall对于帧率并没有影响。
2、使用ugui的drawcall合并规则(如果两节点之间的其他节点与这两节点不重叠,则可尝试合并drawcall),这样的规则是否会提高性能,还是在判断矩形是否重叠时反而会让性能降低?

  1. drawcall 一定会对性能有影响,文字你觉得影响不大可能是因为填充率不高,所以占用的损耗不高,但损耗一定存在。
  2. ugui 那种合并 draw call 的策略在 creator 中目前还不支持

ugui 什么时候优化到这地步了?

谢谢回答。
关于第二个问题,ugui的drawcall合并思路,是否一定会提高性能?因为我想着 如果要判断的矩形过多,对于cpu来讲消耗也是比较大的。是否还需要配合例如“是否是静态ui”之类的判断,才能发挥出效果?

:smiley: 反正我试了最新版是这样的。

我在想的是不是可以吧labelttf,或者系统label预生成贴图,然后就可以跟bmFont一样合并了。。

有喔, Unity 5.2.4 UI 會看有沒有重疊來做batch
https://media.giphy.com/media/l0IygAIF5zgvQ67hm/giphy.gif