1.效果
2.原理
uv所对应的atan2(x,y)表示反正切(x/y)的值,在区间[-π,π]中.我们设定图片中心为原点,则所有的点所对应的角度都是可以通过反正切计算出来的.通过与设定的_Angle值比较,大于部分不变化,乘以的是1,另外一部分乘以0.3*0.5+0.5,达到变暗的目的.
3.代码
1 Shader "Custom/Mask" { 2 Properties { 3 _MainTex ("Base (RGB)", 2D) = "white" {} 4 _Angle("Angle",range(-1,1))=0.5 5 } 6 SubShader { 7 Tags { "RenderType"="Opaque" } 8 LOD 200 9 10 CGPROGRAM 11 #pragma surface surf Lambert 12 13 sampler2D _MainTex; 14 float _Angle; 15 16 struct Input { 17 float2 uv_MainTex; 18 }; 19 20 void surf (Input IN, inout SurfaceOutput o) { 21 half4 c = tex2D (_MainTex, IN.uv_MainTex); 22 o.Albedo = c.rgb; 23 o.Alpha = c.a; 24 //更改中心 25 float2 uv=IN.uv_MainTex-0.5; 26 _Angle*=3.14; 27 //判断与设定值的大小变化 28 float b=_Angle-atan2(uv.x,uv.y); 29 float hui=(2-sign(b))/3; 30 //借鉴了half Lambert 31 o.Albedo*=hui*0.5+0.5; 32 } 33 ENDCG 34 } 35 FallBack "Diffuse" 36 }