【Unity Shader】Icon图片圆角处理

之前写过一篇,方形头像和圆形头像的过度效果,Unity随记(三) 方形头像与圆形头像的切换过度效果.当时采用的就是从中心点(0.5,0.5)为圆心,通过控制半径的长度和方形头像进行剪切的操作。
但是如果需要对icon进行圆角处理,则需要换个方式了,不然会显得比较生硬,对比图如下:
在这里插入图片描述
这里采用的是四个角都用一个小圆来进行对边角的裁剪处理(真正的圆角处理不知道是不是这样,不过现在这样的效果看起来已经满足需求了).如下图所示:
在这里插入图片描述
参考右上角的小圆,仅仅找到蓝色部分,将蓝色部分的Alpha设为0使其透明不显示即可,所以关键是通过比较优雅的方式找到蓝色部分.
为了使坐标原点在图片的中心点,需要对坐标进行平移(0.5,0.5)的操作,平移后使得上下左右四个圆角的处理差别仅仅在正负号上面,通过abs方法取绝对值则可方便的消除差异,避开了多个if分支语句的处理:

half2 uv = i.uv.xy - half2(0.5h, 0.5h);//将UV中心移动到图片中心

再来看看最后求alpha的部分,三个step只要有一个为0,则alpha就为1,所以需要裁减的部分(蓝色区域)三个step需要都为1,这三个step后面会有说明:

float alpha = 1 - stepX * stepY * stepL;

假如小圆的半径为R,图中黄色部分的可以表示为 |u| < 0.5 - R && |v| < 0.5 - R
本来uv的范围都是0->1,但是上面平移了坐标轴所以范围都变成了-0.5 -> 0.5.
half threshold = 0.5h - _R;//计算出阈值 uv的xy在 ±threshold范围内为显示,剩下四个角需要根据圆来判断

half stepX = step(threshold, abs(uv.x));// -threshold< x < threshold 范围内, stepX为0 否则为 1
half stepY = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值