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