Mask实现裁剪的原理浅析

简单来说,就是Mask会设置继承了MaskableGraphic的组件的Shader属性,进行特定的模板测试

一张普通的Image,当不挂Mask组件时,其默认Shader的模板缓存属性是这样的
在这里插入图片描述
当挂载上Mask时,会改变
在这里插入图片描述
Stencil ID变成了1,即当前值,Stencil Operation变成了2,即Replace,Stencil Comparison是8,即Always,整体意思就是模板测试总是通过,然后替换模板值为1,那么这里覆盖区域的模板值就变成了1

当在下面挂上一张子Image时,其Shader属性也会发生改变
在这里插入图片描述Stencil ID依旧为1,即当前值,Stencil Operation变成了0,即Keep,Stencil Comparison是Equal,整体意思就是模板测试在模板值和当前值相等时通过,通过后模板值依旧保持之前的样子,当前值是1,模板值是1,即通过测试,但是不改变模板缓存的值。
也就是说在Mask覆盖区域,这部分像素能够被渲染,但是不在这部分区域的不被渲染,从而实现裁剪效果
具体代码在MaskableGraphic.cs中
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值