Shader "Custom/LightRays"{ Properties{ _MainTex("Texture",2D)="white"{} _Color1("Color1",Color)=(0.1,1,1,1) _Color2("Color2",Color)=(0,0.46,1,0) _Speed("Speed",Range(0,5.0))=0.5 _Size("Size",Range(1.0,30.0))=15.0 _Skew("Skew",Range(-1.0,1.0))=0.5 _Shear("Shear",Range(0.0,5.0))=1.0 _Fade("Fade",Range(0.0,1.0))=1.0 _Contrast("Contrast",Range(0.0,50.0))=1.0 } SubShader{ Tags{ "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" } Cull Off Lighting Off ZWrite Off Fog {Mode Off} Blend SrcAlpha OneMinusSrcAlpha Pass{ CGPROGRAM #pragma vertex vert_img #pragma fragment frag #include "UnityCG.cginc" float4 permute(float4 x){ return fmod(34.0*pow(x,2)+x,289.0); } float2 fade(float2 t){ return 6.0*pow(t,5.0)-15.0*pow(t,4.0)+10.0*pow(t,3.0); } float4 taylorInvSqrt(float4 r){ return 1.79284291400159-0.85373472095314*r; } #define DIV_289 0.00346020761245674740484429065744f float mod289(float x){ return x-floor(x*DIV_289)*289.0; } #define REPEAT_Y 1000.0 float PerlinNoise2D(float2 P){ //Mirror the pattern on large Y number if(floor(P.y/REPEAT_Y)%2==0){ P.y-=floor(P.y/REPEAT_Y)*REPEAT_Y; }else{ P.y-=floor(P.y/REPEAT_Y)*REPEAT_Y; P.y=REPEAT_Y-P.y; } float4 Pi=floor(P.xyxy)+float4(0.0,0.0,1.0,1.0); float4 Pf=frac(P.xyxy)-float4(0.0,0.0,1.0,1.0); float4 ix=Pi.xzxz; float4 iy=Pi.yyww; float4 fx=Pf.xzxz; float4 fy=Pf.yyww; float4 i=permute(permute(ix)+iy); float4 gx=frac(i/41.0)*2.0-1.0; float4 gy=abs(gx)-0.5; float4 tx=floor(gx+0.5); gx=gx-tx; float2 g00=float2(gx.x,gy.x); float2 g10=float2(gx.y,gy.y); float2 g01=float2(gx.z,gy.z); float2 g11=float2(gx.w,gy.w); float4 norm=taylorInvSqrt(float4(dot(g00,g00),dot(g01,g01),dot(g10,g10),dot(g11,g11))); g00*=norm.x; g01*=norm.y; g10*=norm.z; g11*=norm.w; float n00=dot(g00,float2(fx.x,fy.x)); float n10=dot(g10,float2(fx.y,fy.y)); float n01=dot(g01,float2(fx.z,fy.z)); float n11=dot(g11,float2(fx.w,fy.w)); float2 fade_xy=fade(Pf.xy); float2 n_x=lerp(float2(n00, n01),float2(n10, n11),fade_xy.x); float n_xy=lerp(n_x.x,n_x.y,fade_xy.y); return 2.3*n_xy; } fixed4 _Color1; fixed4 _Color2; float _Speed; float _Size; float _Skew; float _Shear; float _Fade; float _Contrast; fixed4 frag(v2f_img i):SV_Target{ fixed4 color=lerp(_Color1,_Color2,1-i.uv.y); fixed noisePos=i.uv.x; noisePos+=-0.5; noisePos*=_Size; noisePos+=(1-i.uv.y)*(_Size*_Skew); noisePos*=1/lerp(1,_Shear,1-i.uv.y); fixed val=PerlinNoise2D(float2(noisePos,_Time.y*_Speed))/2 + 0.5f; val=_Contrast*(val-0.5)+0.5; color.a*=lerp(val,val*i.uv.y,_Fade); color.a=clamp(color.a,0.0,1.0); return color; } ENDCG } } }