NGUI panel裁剪shader解读(一般人估计看不懂,慎点)

  1. 单层panel边缘渐隐
    ClipRange: 1/cy.z,1/cr.w,cr.x/cr.z,cr.y/cr.w
    解读:cr.x cr.y panel的中心坐标, cr.z半宽,cr.w 半高
    ClipArgs: cr.z/softness.x, cr.w/softness.y
    解读:渐隐量
    Vert shader:
    Out.worldPos=v.vertex*ClipRange.xy-ClipRang.zw
    结果是:(x-cr.x)/cy.z, (y-cr.y)/cr.w
    Frag shader:
    float f=(float2(1,1)-abs(IN.worldPos))*ClipArgs
    结果是:1. (cr.z-|x-cr.x|)/cr.z, (cr.w-|y-cr.y|)/cr.w
    最终:(cr.z-|x-cr.x|)/softness.x, (cr.w-|y-cr.y|)/softness.y

示意图:
这里写图片描述

  1. 双层panel边缘渐隐
    将第二层像素的坐标映射到第一层panel,计算如上。
    求出两层panel的最小factor

  2. panel单边渐隐
    这里写图片描述
    ClipProduct操作:
    这里写图片描述
    WorldPos是进行了标准化操作的顶点,offset4是矩形。
    clipProduct只可能返回0或1,返回1表示此像素不渐隐,返回0表示此像素渐隐。但是此像素如果应该被裁掉的话,那就应该被裁掉。
    Factor<=0表示此像素应该被裁剪。
    这里写图片描述
    Ceil(f1)就表示如果应该被裁掉,就把它裁掉。

总结:shader里基本上不会出现判断语句,而且基本上所有的运算都在[0,1]区间,所有判断语句会被0或1数值代替(比如上边的*ceil(f1))。这就是shader的精妙之处,也是shader的难点,不好懂。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值