如何合并DrawCall, 同一个material不同的material属性

我不清楚这个想法能否做到.
现在代码是这样的,不过只要在本来能合并drawcall的一系列sprite中进行setMaterial,就会多出drawcall数.

refreshMaterial: function () {
    if (this._sprite == null) this._sprite = this.node.getComponent(cc.Sprite);
    let material = this._sprite.getMaterial(0);
    if (material && material.effectAsset.name == 'sprite-hsl') {
        material.setProperty('u_dH', this.h);
        material.setProperty('u_dS', this.s);
        material.setProperty('u_dL', this.l);
        this._sprite.setMaterial(0, material);
    }
}

你这参数不同,就无法共享渲染状态。 相当于是不同的material.
我们说的material相同,是指两个渲染物的材质参数完全一致,才能合并。

一旦setProperty基本就凉了

多谢。
如果是一个物体上不同部分不同颜色的话,就只能利用贴图了吧?

没做过3d游戏,不是很清楚材质这部分。

但是由cocos编辑器传入的color 变成了v_color. 不同的v_color貌似是可以合并的。这又是怎么做到的呢?


可以参考这篇文章。