原文连接:http://blog.csdn.net/mobanchengshuang/article/details/38731035
1.代码
1 Shader"Custom/圆角"{ 2 properties{ 3 _MainTex("Base(RGB)",2D)="white"{} 4 _Value("Cut Value",range(0,0.25))=0.1 5 } 6 CGINCLUDE 7 #include "UnityCG.cginc" 8 9 sampler2D _MainTex; 10 float _Value; 11 12 struct v2f { 13 float4 pos:SV_POSITION; 14 float2 uv:TEXCOORD; 15 }; 16 17 v2f vert(appdata_full v){ 18 v2f o; 19 o.pos=mul(UNITY_MATRIX_MVP,v.vertex); 20 o.uv=v.texcoord; 21 return o; 22 } 23 24 float4 frag(v2f i):COLOR{ 25 float4 c=tex2D(_MainTex,i.uv); 26 27 //计算圆角 28 float2 uv=i.uv-0.5; 29 float remain=0.5-_Value; 30 //计算当前uv是不是在四个边角 31 float mx=step(remain,abs(uv[0])); 32 float my=step(remain,abs(uv[1])); 33 //计算当前uv在四个边角的相对uv 34 float rx = fmod(uv.x, remain); 35 float ry = fmod(uv.y, remain); 36 //若在边角,且距离顶点的距离大于value值,则不显示 37 float fillAlpha=1-mx*my*step(_Value*_Value,rx*rx+ry*ry); 38 39 c.a=fillAlpha; 40 41 return c; 42 } 43 ENDCG 44 45 subshader{ 46 Tags{"Queue"="Transparent"} 47 Blend SrcAlpha OneMinusSrcAlpha 48 pass{ 49 CGPROGRAM 50 #pragma vertex vert 51 #pragma fragment frag 52 53 ENDCG 54 } 55 } 56 57 FallBack "Diffuse" 58 }
2.效果
3.原理
计算出下图所示中紫色区域内点距离两个绿色点的距离,大于目标值的不显示即可.在计算相对于交点的坐标时,通过求莫的方式即可获得(fmod不会改变符号).所以本方法所能画的最大半径是0.25.