creator 2.4.7的shader自定义裁剪

creator的shader能通过传入自定义纹理贴图来控制裁剪区域吗,纹理贴图的uv要怎么处理不变形,遵从原本纹理,有大佬解答下吗

是shader层面的圆形遮罩造成的拉伸?

这样?


自定义顶点就可以了

https://github.com/kirikayakazuto/CocosCreator_UIFrameWork/blob/master/assets/Script/Common/Components/MaskPlus.ts

1赞

这个不是shader吧

在片元着色器里判断 uv,把区域外的像素 discard 掉就好了呀。

需要注意,你要自己传入节点的尺寸(resolution)才能计算实际的宽高区域。

这个具体要怎么计算的,大佬求教

描述下具体的需求?

我是想拿一张图做完遮罩图,然后直接把纹理传入对应的材质,材质作用的节点纹理,根据这个遮罩图的a值来做显隐,但现在这个遮罩图不一定跟材质作用的节点纹理一个尺寸,所以在shader里遮罩图用的uv跟节点纹理是一样的,会造成一定的偏差,拉伸之类的

我说个情况,假如遮罩图尺寸小于目标图,那多余的部分是不是默认排除掉?

如果是的话,很好解决。

把【节点尺寸、遮罩纹理、遮罩纹理尺寸、遮罩纹理位置】都传进去,在片元着色器代码里判断。

假设节点尺寸为 100 x 100,遮罩尺寸 50 x 50,遮罩位置居中,当前像素的 uv 为 (0.1, 0.1),那当前像素对应的就是节点左上角 10 x 10 的位置,这个位置显然在遮罩之外,如果 uv 为 (0.5, 0.5),那对应的就是节点中间,那肯定在纹理遮罩的覆盖范围之内。

那如果要改变遮罩的位置是不是也是调占比的百分去对应

好像知道了,用四维数组去算uv的偏移和缩放就可以自定义遮罩层位置了

很好算的,公式写好,直接调参就行了