合批材质判断问题请教

为什么合批需要判断材质地址一致才进行合批,而不是对材质进行值相等判断。看到了一些优秀重写合批代码的案例,似乎对材质内部的值进行判断更加合理,例如https://forum.cocos.org/t/topic/138765/28

简单,因为这样判断的东西太多了。
比如遍历渲染对象时,上一个是a,下一个是b,原本只要判断一下两个材质是不是同一个实例即可,你如果要判断值的话,需要遍历材质中所有的uniform。判断的计算量暴增。

感谢解答,那是不是可以推导出

  1. 材质值一致,就可以进行合批
  2. 如果加上值判断逻辑,每一帧的计算量会有增加,所以应该对值判断尽可能的剪枝

材质值一致,可以合批,这个可以合批是指可以我们通过一定手段让它强行合批。
ccc自己的逻辑只会去判定材质是不是同一个实例,也就是所谓的共享材质。
如果要改值判定,在遍历渲染的时候,如果a 、b使用同种shader,判定一下a b材质的所有的值是否都相等,然后强行让他们合到一个渲染批次 ,材质数据随便选a或者b中任意一个。
最后表现出来的结果会是正常的。
只是这些操作需要你对底层代码有一定了解,不是很好改的。
对值判断剪枝这个可以看项目具体情况而定。引擎自身是通用的,所以会考虑性能的极限问题。
很多时候,你的项目加了材质的值判断,可能性能消耗也没有很大。
你可以到遇到性能卡点了再去考虑剪枝。

十分感谢解答