十年网站开发经验+多家企业客户+靠谱的建站团队
量身定制+运营维护+专业推广+无忧售后,网站问题一站解决
Shader"Custom/Colors"{Properties{_AngleRange("AngleRange",Range(60,120))=60}SubShader{Pass{CGPROGRAM#pragmavertexvert#pragmafragmentfrag#include"UnityCG.cginc"#definePI3.142structappdata{float4vertex:POSITION;};structv2f{float4vertex:SV_POSITION;float4scrPos:TEXCOORD0;};half_AngleRange;v2fvert(appdatav){v2fo;o.vertex=mul(UNITY_MATRIX_MVP,v.vertex);o.scrPos=ComputeScreenPos(o.vertex);returno;}fixed4frag(v2fi):SV_Target{//范围在(0,1)float2wcoord=i.scrPos.xy/i.scrPos.w;//映射到(-1,1),即屏幕中心为(0,0)wcoord=wcoord*2-1;//atan2(y,x):反正切,y/x的反正切范围在[-π,π]内floatradian=atan2(wcoord.y,wcoord.x);//1度(°)=0.017弧度(rad)//1弧度(rad)=57.29578度(°)floatangle=radian*57.3;//映射到(0,360)if(angle<0)angle=360+angle;fixedb=1-saturate(abs(angle-90)/_AngleRange);fixedg;if(angle>180)g=1-saturate(abs(angle-330)/_AngleRange);elseg=1-saturate((angle+30)/_AngleRange);fixedr=1-saturate(abs(angle-210)/_AngleRange);returnfixed4(r,g,b,1);}ENDCG}}}
2.先说一下1/(xxx)这个式子的强大,它实现的效果,往往会带有光晕效果。其中第六个就是我们想要实现的光圈效果。
Shader"Custom/Test"{Properties{_Value("Value",Range(1,50))=1}SubShader{Pass{CGPROGRAM#pragmavertexvert#pragmafragmentfrag#include"UnityCG.cginc"structappdata{float4vertex:POSITION;float2uv:TEXCOORD0;};structv2f{float4vertex:SV_POSITION;float2uv:TEXCOORD0;};half_Value;v2fvert(appdatav){v2fo;o.vertex=mul(UNITY_MATRIX_MVP,v.vertex);o.uv=v.uv;returno;}fixed4frag(v2fi):SV_Target{//映射到(-1,1),使其中心点为原点float2uv=i.uv*2-float2(1,1);floatv;//v=1/abs(_Value*uv.y);//1//v=1/abs(_Value*(uv.y+uv.x));//2//v=1/abs(_Value*(uv.y+2*uv.x));//3//v=1/abs(_Value*(abs(uv.y)+abs(uv.x)));//4//v=1/abs(_Value*length(uv));//5//v=1/abs(_Value*abs(length(uv)-0.5));//6v=1/abs(_Value*abs(uv.x/uv.y));//7x越小y越大,则越亮returnfixed4(v,v,v,1);}ENDCG}}}
3.动画。这里我做的效果是基于角度的光线间隔效果,首先当然就是计算角度了,间隔的实现就是fmod和step的使用。
Shader"Custom/Test"{Properties{_Width("Width",Range(30,90))=45}SubShader{Pass{CGPROGRAM#pragmavertexvert#pragmafragmentfrag#include"UnityCG.cginc"structappdata{float4vertex:POSITION;float2uv:TEXCOORD0;};structv2f{float4vertex:SV_POSITION;float2uv:TEXCOORD0;};half_Width;v2fvert(appdatav){v2fo;o.vertex=mul(UNITY_MATRIX_MVP,v.vertex);o.uv=v.uv;returno;}fixed4frag(v2fi):SV_Target{//映射到(-1,1),使其中心点为原点float2uv=i.uv*2-float2(1,1);floata=atan2(uv.y,uv.x);a*=57.3;if(a<0)a+=360;floatb=fmod(a+_Time.y*20,_Width);b=step(0.5*_Width,b);returnfixed4(b,b,b,1);}ENDCG}}}