源自UIshader
这里就不分文章一一记录了,写一起了
stencil不管是google和baidu都有一堆,着重注意一下readmask和writemask就好
1.说一下这个_TextureSampleAdd
这个float4是由引擎去传值的。如果UI的tex是Alpha8 ,那么这个值就是(1,1,1,0),否则就是(0,0,0,0)
测试如下图
为啥要这么做,据说是为了font ,可能unity里的提供的font是黑色的,需要变成白色,以方便着色。
2.说一下这个_ClipRect
说这个就要说到UnityGet2DClipping()这个方法了
inline float UnityGet2DClipping (in float2 position, in float4 clipRect)
{
float2 inside = step(clipRect.xy, position.xy) * step(position.xy, clipRect.zw);
return inside.x * inside.y;
}
这里不去解释inside的数学。不懂的话,去shadertoy上练习练习吧
color.a *= UnityGet2DClipping(IN.worldPosition.xy, clipRect);
shader里用这个函数的时候,传入的是world space下的postion。
所以这样的话,原理也很简单。不懂的话,看一下这篇文章
所以就这么的水了所有的UI的shader。在ui的shader中stencil和cliprect算是最重要的了