180 lines
4.0 KiB
Plaintext
Executable File
180 lines
4.0 KiB
Plaintext
Executable File
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
|
|
}
|
|
}
|
|
} |