| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | Shader "AVProVideo/Internal/Transition"{	Properties	{		_MainTex ("Texture To", 2D) = "white" {}		_FromTex ("Texture From", 2D) = "white" {}	}	SubShader	{		Tags { "RenderType"="Opaque" }		LOD 100		Pass		{			CGPROGRAM			#pragma vertex vert			#pragma fragment frag			// TODO: replace use multi_compile_local instead (Unity 2019.1 feature)			#pragma multi_compile LERP_NONE LERP_FADE LERP_BLACK LERP_WHITE LERP_TRANSP LERP_HORIZ LERP_HORIZ_MIRROR LERP_VERT LERP_VERT_MIRROR LERP_DIAG LERP_DIAG_MIRROR LERP_CIRCLE LERP_SCROLL_VERT LERP_SCROLL_HORIZ LERP_DIAMOND LERP_BLINDS LERP_RECTS_VERT LERP_ARROW LERP_SLIDE_HORIZ LERP_SLIDE_VERT LERP_ZOOM_FADE			#include "UnityCG.cginc"			#include "../AVProVideo.cginc"			struct appdata			{				float4 vertex : POSITION;				float2 uv : TEXCOORD0;			};			struct v2f			{				float2 uv : TEXCOORD0;				float4 vertex : SV_POSITION;			};			sampler2D _MainTex;			sampler2D _FromTex;			float4 _MainTex_ST;			float4 _FromTex_ST;			float _Fade;						v2f vert (appdata v)			{				v2f o;				o.vertex = XFormObjectToClip(v.vertex);				o.uv = TRANSFORM_TEX(v.uv, _MainTex);				return o;			}						fixed4 frag (v2f i) : SV_Target			{				float2 uv1 = i.uv;				float2 uv2 = i.uv;#if LERP_FADE				float t = _Fade;#elif LERP_BLACK				float t = _Fade;				if (t < 0.5)				{					return lerp(tex2D(_FromTex, uv1), float4(0.0, 0.0, 0.0, 1.0), t * 2.0);				}				else				{					return lerp(float4(0.0, 0.0, 0.0, 1.0), tex2D(_MainTex, uv2), 2.0 * (t - 0.5));				}#elif LERP_WHITE				float t = _Fade;				if (t < 0.5)				{					return lerp(tex2D(_FromTex, uv1), float4(1.0, 1.0, 1.0, 1.0), t * 2.0);				}				else				{					return lerp(float4(1.0, 1.0, 1.0, 1.0), tex2D(_MainTex, uv2), 2.0 * (t - 0.5));				}#elif LERP_TRANSP				float t = _Fade;				if (t < 0.5)				{					return lerp(tex2D(_FromTex, uv1), float4(0.0, 0.0, 0.0, 0.0), t * 2.0);				}				else				{					return lerp(float4(0.0, 0.0, 0.0, 0.0), tex2D(_MainTex, uv2), 2.0 * (t - 0.5));				}#elif LERP_HORIZ				float t = step(i.uv.x, _Fade);#elif LERP_HORIZ_MIRROR				float t = step(abs(i.uv.x - 0.5), _Fade);#elif LERP_VERT				float t = step(i.uv.y, _Fade);#elif LERP_VERT_MIRROR				float t = step(abs(i.uv.y - 0.5), _Fade);#elif LERP_DIAG				float t = step((i.uv.y+i.uv.x)*0.5, _Fade);#elif LERP_DIAG_MIRROR				float t = step(abs(i.uv.y - i.uv.x), _Fade);#elif LERP_CIRCLE				float t = distance(float2(i.uv.x*1.777, i.uv.y), float2(0.5*1.7777, 0.5));				t = step(t, _Fade*2.1);#elif LERP_SCROLL_VERT				float t = _Fade;				uv1.y += _Fade;				t = step(1 - uv1.y, 0);#elif LERP_SCROLL_HORIZ				float t = _Fade;				uv1.x += _Fade;				t = step(1 - uv1.x, 0);#elif LERP_DIAMOND					float2 origin = float2(0.5 * 1.7777, 0.5);				float t = abs(uv1.x*1.7777 - origin.x);				t += abs(uv1.y - origin.y);								t = step(t, _Fade*1.4);#elif LERP_BLINDS				float x = frac(uv1.x*4.0);				float t = step(x, _Fade);			#elif LERP_ARROW				// Arrow				float y = abs(i.uv.y - 0.5) * 0.5;				float x = lerp(0.5, 1.0, i.uv.x);				float t = step(x, y + _Fade);#elif LERP_SLIDE_HORIZ				// Slide horiz				float t = _Fade;				uv1.x += _Fade;				uv2.x -= 1.0 - _Fade;				t = step(1 - uv1.x, 0);#elif LERP_SLIDE_VERT				// slide vert				float t = _Fade;				uv1.y += _Fade;				uv2.y -= 1.0 - _Fade;				t = step(1 - uv1.y, 0);#elif LERP_ZOOM_FADE				// zoom-fade				float scale = lerp(1.0, 0.15, _Fade);				float scale2 = lerp(1.0, 0.15, 1.0-_Fade);				uv1 -= 0.5;				uv2 -= 0.5;				uv1 *= scale;				uv2 *= scale2;				uv1 += 0.5;				uv2 += 0.5;				float t = smoothstep(0.5, 1.0, _Fade);#elif LERP_RECTS_VERT				float x = uv1.x;				float bf = _Fade / 1.5;				bf = frac(uv1.y * 8.0);				bf = (int)fmod(uv1.y * 8.0, 8.0);				bf += 1.0;				bf *= _Fade / 2.0;				float t = step(abs(x - 0.5), bf);#endif#if LERP_NONE				return tex2D(_MainTex, uv1);#else				float4 cola = tex2D(_FromTex, uv1);				float4 colb = tex2D(_MainTex, uv2);				float4 col = lerp(cola, colb, t);				return col;#endif			}			ENDCG		}	}}
 |