| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | 
							- Shader "DistortionShaderPack/DistortShader"
 
- {
 
- 	Properties
 
- 	{
 
- 		_MainColor("Main color", Color) = (0,0,0,1)
 
- 		_StrengthColor("Color strength", Float) = 1
 
- 		_DistortionStrength ("Distortion strength", Range(-2,2)) = 0.3
 
- 		_DistortionCircle ("Distortion circle", Range(0,1)) = 1
 
- 		_NormalTexture("Normal", 2D) = "blue" { }
 
- 		_NormalTexStrength("Normal strength", Range(0,1)) = 0
 
- 		_NormalTexFrameless("Normal circle", Range(0,1)) = 1.0
 
- 		_UVOffset("UVOffset XY, ignore ZW", Vector) = (0,0.01,0,0)
 
- 	}
 
- 	Category
 
- 	{
 
- 		Tags { "Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True" }
 
- 		Blend SrcAlpha OneMinusSrcAlpha
 
- 		ZWrite Off
 
- 		SubShader
 
- 		{
 
- 			GrabPass
 
- 			{
 
- 				"_GrabTexture"
 
- 				Name "BASE"
 
- 				Tags { "LightMode" = "Always" }
 
- 			}
 
- 			Pass
 
- 			{
 
- 				Name "BASE"
 
- 				Tags { "LightMode" = "Always" }
 
- 				CGPROGRAM
 
- 				#pragma vertex vert
 
- 				#pragma fragment frag
 
- 				#include "UnityCG.cginc"
 
- 				
 
- 				sampler2D _GrabTexture;
 
- 				float _DistortionStrength;
 
- 				float _DistortionCircle;
 
- 				float4 _MainColor;
 
- 				float _StrengthColor;
 
- 				sampler2D _NormalTexture;
 
- 				float4 _NormalTexture_ST;
 
- 				float _NormalTexStrength;
 
- 				float _NormalTexFrameless;
 
- 				float4 _UVOffset;
 
- 				
 
- 				struct VertexInput
 
- 				{
 
- 					float4 vertex : POSITION;
 
- 					float2 texcoord0 : TEXCOORD0;
 
- 				};
 
- 				
 
- 				struct Vert2Frag
 
- 				{
 
- 					float4 position : SV_POSITION;
 
- 					float4 uv_grab : TEXCOORD0;
 
- 					float2 uv : TEXCOORD1;
 
- 					float2 uv_normal : TEXCOORD2;
 
- 					float2 movement: TEXCOORD3;
 
- 				};
 
- 				Vert2Frag vert (VertexInput vertIn)
 
- 				{
 
- 					Vert2Frag output;
 
- 					output.position = UnityObjectToClipPos(vertIn.vertex);
 
- 					output.uv_grab = ComputeGrabScreenPos(output.position);
 
- 					output.uv = vertIn.texcoord0;
 
- 					output.uv_normal = vertIn.texcoord0.xy * _NormalTexture_ST.xy + _NormalTexture_ST.zw;
 
- 					output.movement = _UVOffset.xy*_Time.y;
 
- 					return output;
 
- 				}
 
- 				float2 getVectorFromCenter(float2 uv)
 
- 				{
 
- 					float factor = _ScreenParams.y / _ScreenParams.x;
 
- 					float2 direction = float2((uv.x-0.5)*.5, (uv.y-0.5)) * factor;
 
- 					return (direction);
 
- 				}
 
- 				float getDistortionStrength(float2 uv)
 
- 				{
 
- 					float2 diff = float2(distance(0.5, uv.x), distance(0.5, uv.y)) * 2.0;
 
- 					float dist = saturate(length(diff));
 
- 					return 1.0-dist;
 
- 				}
 
- 				float2 getNormal(sampler2D _NormalTexture, float2 normalUv, float2 uv, float2 uvOffset, float frameless, float strength)
 
- 				{
 
- 					float2 normal = tex2D( _NormalTexture, normalUv+uvOffset ).zy;
 
- 					float length = getDistortionStrength(uv);
 
- 					float normalTexStrength = ((1-frameless) + frameless*length) * strength;
 
- 					normal.x = ((normal.x-.5)*2) * normalTexStrength;
 
- 					normal.y = ((normal.y-.5)*2) * normalTexStrength;
 
- 					return normal;
 
- 				}
 
- 				half4 frag (Vert2Frag fragIn) : SV_Target
 
- 				{
 
- 					float4 uvScreen = UNITY_PROJ_COORD(fragIn.uv_grab);
 
- 					float2 direction = getVectorFromCenter(fragIn.uv);
 
- 					float strength = getDistortionStrength(fragIn.uv);
 
- 					strength = (_DistortionCircle*strength + (1-_DistortionCircle)) * _DistortionStrength;
 
- 					float2 newDirection = direction * strength;
 
- 					uvScreen += float4(newDirection.x, newDirection.y, 0, 0);
 
- 					float2 influence = normalize(direction) * strength;
 
- 					float2 offset = fragIn.movement;
 
- 					float2 normal = getNormal(_NormalTexture, fragIn.uv_normal, fragIn.uv, offset, _NormalTexFrameless, _NormalTexStrength);
 
- 					uvScreen += float4(normal.x, normal.y, 0, 0);
 
- 					influence += normal.xy;
 
- 					float4 final = tex2Dproj(_GrabTexture, uvScreen);
 
- 					float alpha = 1;
 
- 					final = float4(final.xyz, alpha);
 
- 					strength = saturate(sqrt(pow(abs(influence.x), 2.0) + pow(abs(influence.y), 2.0)) * _StrengthColor);
 
- 					final = final + (_MainColor*strength);
 
- 					final.w = saturate(final.w*_MainColor.w);
 
- 					return final;
 
- 				}
 
- 				ENDCG
 
- 			}
 
- 		}
 
- 	}
 
- }
 
 
  |