小玩意系列之可合批的圆形裁切

链接:
https://gitee.com/ruanwujing/green-pack-cocos
image
开箱即用的使用方式:
1创建一个sprite
2删掉sprite组件,替换成ColorSDFSprite
image
3将材质替换成
image
4spriteFrame拖上你自己要用的图

附赠:
sdf2d.chunk
我将各种sdf2d的方法封装了一下。各种其他类型的裁切都可以参考使用。

这个裁切方式的特点:
1使用shader进行裁切,边缘处可以通过shader来做平滑过渡。
2但凡涉及到uv的shader,都有合图后,uv变化,导致显示错误的问题,所以一般shader相关的图片会把packable勾选去掉,不允许合批。但是很多类似于头像之类的东西,是需要合批的。
这个组件会自动将颜色的值设置成uv的变化数据
然后在shader中通过uv转换,实现能合批的sdf
3缺点:
不能赋值颜色。

9赞

大佬niubility

感谢鸦哥捧场啊,鸦哥带带弟弟

强啊强啊强啊

大佬
圆的半径在哪调啊???

写得仓促,没加属性。在shader里写死了,你可以在shader里面改。今天有空再整个plus版的出来。

我看了一下 图片必须 package 才能合批 如果的图片微信头像那种远程加载的 改如何合批的

package后的图片,是依赖于动态合图打成图集。uv已经修改好了。如果是远程加载的图片,可以自己打成图集,计算uv。

shader+smoothStep

补充了一下裁切的参数设置
image
刻意调大一点过渡范围,这样可以明显看出过渡。
image

另外新写了两个形状裁切的示例:五角星和爱心形状
image
image
更多的形状就不再封装了,有需要可以参考我的shader,把sdf函数改成sdf2d.chunk里的其他形状即可

ps:
突然发现ccc里面的uv坐标系原点不一样,所以一些有上下区分的形状是倒过来的。
这里的五角星就是顶角朝下了。
爱心形状我加了个宏,控制它上下颠倒一下。

mark~合批圆形裁切3.x

战略性mark!

两种合批
1,圆形头像类型的合批
2,圆形头像与其他普通sprite合批

有没有第二种的~

合批需要统一材质。
圆形头像和普通sprite如果想要合批,不能用shader的方式,可以用顶点构造成一个多变形模拟成圆。
在我的小玩意合集里有使用自定义assembler来做的圆角矩形案例,那个圆角矩形把四个角都选用,并且调大圆角半径,就可以做成圆形。
这种方式只是把原本两个三角面的矩形,变成了n个三角面的圆,材质不变,所以合批和普通sprite一模一样。
https://forum.cocos.org/t/topic/154029

我这边也尝试了用颜色值来传递合图后的uv,但是发现个问题,就是传递进去的值好像会有偏差,弄个圆形,背景弄个一样尺寸的背景图就看出来有误差,猜测是浮点数通过颜色值传递进去可能有裁剪,但是用setProtype传递进去就没问题。
image

颜色值的精度应该是1个字节的,也就是0~255,的确会有精度问题。