我在shader里需要设置一个float类型的值iPercent,以及一个时间变量iTime,这样的情况可以合批嘛?
补充:sprite的纹理和混合属性也是一样的哈。
我在shader里需要设置一个float类型的值iPercent,以及一个时间变量iTime,这样的情况可以合批嘛?
补充:sprite的纹理和混合属性也是一样的哈。
材质、纹理相同的可以合批。如果你的sprite都是用这个自定义的shader的话,且纹理需要相同。自定义的材质不能使用自动合批的功能,因为跟其他的正常的label以及sprite这些相比它们是不一样的
我有连续10个sprite都是用这个自定义材质,会设置

并且我会update里

我发现这10个sprite合批是被打断了的,当我注释掉设置iTime的代码时,我发现相同iPercent值的sprite又被合批了。
我就想知道有没有办法可以解决这个合批的问题,因为实际上我们可能有几十sprite,不能合批还是很难受的。
texturePacker或者自动图集将这几个sprite的texture打到一起去,应该就可以
纹理时是同一张呢
iTime应该可以避免每一帧都更新吧
是的,但是不解决问题呀
如果材质有用到uv的信息,合图之后shader就有问题了。
不能只在初始化的时候设置一次iTime么,然后shader里面计算这个时间差么
fs里可以获取到时间么? 我不知道耶,shader我也是半吊水,记得以前有个CC_TIME,现在给屏蔽了。
这个可以解决的。
我还没写过shader呢?就用过没自己写过,改了改参数
咋解决的
在代码里把合图后纹理在大图的信息(是否旋转,坐标之类的)算好,然后再传到片段着色器里嘛。
我是说合批咋解决的
还不知道呢…
看了一下源码,setProperty会更新material的hash CCMaterial.js#L158,计算hash的方法,相同值property计算出hash是一样的 CCMaterial.js#L214。
所以一个折中的办法就是:
1.把sprite根据iPercent排序,尽量让值相同的合在一起。
2.把所有sprite每帧更新iTime的值为同一个值,这样相同iPercent和iTime值计算出hash就一样了。
我在想有没有可能像设置a_color那样,在顶点着色器里设置值,这样是不是就不会打断合批了? 只是这接口没找着,没法试验。
你是不是想做血条的波动效果。 time应该是可以优化到shader里面的。percent也是没有必要的,因为你可以直接设置sprite的size,然后引擎自动帮你合批了!
嗯嗯,就是血条波动的效果。 直接设置size不会变形么?