UP-Viagg-io/Viagg-io/Assets/Packages/AVProVideo/Runtime/Shaders/Resources/AVProVideo-Internal-Transit...

180 lines
4.0 KiB
Plaintext
Raw Normal View History

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
}
}
}