动态生成图片的需求

有一个需求

即:需要同时得到很多很多的头像,还要吧这些头像都显示成圆形。

问题:用遮罩吧图片都变成圆形太费DC

问:有没有方法在加载图片的时候就都处理成圆形再存到内存map中等待使用?

2赞

有两种方法
简单方法:如果头像图片是放在阿里云oss上的, 可以利用url参数进行处理, 再配动态合图,dc很小
https://help.aliyun.com/document_detail/144582.html?spm=a2c4g.212049.0.0.d0e54ebbEDzDfz

复杂方法:把头像动态合图再配自定义顶点参数+shader实现


3.x 版自定参数我是利用createMesh方法去生成ui,因为createMesh就有自定义顶点参数的方法

2赞

我的建议是把需求删除省事 :rofl:

用shader

头像使用需求量太大了,使用shader跟遮罩没有太大区别,因为使用不了合图

还是有区别

至少在cocos 层面 mask是2个节点 shader只有一个节点,再说shader并不是没有办法合图的

主要是太多了,多的时候需要头像两三千,三四千

用了shader合不了图吧

??又不用全显示

shader 可以自己写规则读取合图文件的

可以合,要在片段着色器里面去取合图特地位置的texture,
只是这么处理drawcall问题依然存在

就是要全部显示,不然没必要这么麻烦了不

通过传入顶点来分割图片 是可以合批的

老哥哥,怎么说?


他说的是这个文章

我当初觉得改动有点深了
不知道实际应用是否适应的了复杂的业务场景,
你可以试试

(shader 圆形头像 合图) + 合批 可以完美解决

shader,跟合批冲突了

这个改动其实是可以弄一个新sprite 来继承老spirte, 然后把引擎里的simple.ts,splice.ts 等assembler 拷一份出来, 放到自己项目, 然后新sprite 复写一下assembler的初始化改为取你魔改的imple.ts,splice.ts就能弄一个新的sprite跟老的sprite一起用又不用改动引擎, 唯一缺点是新sprite和老sprite不能共同一个material

您好, 我也是想在3.x中使用自定义顶点合批。你是使用的 utils.createMesh 方法吗。