gl-transitions 1.71.0 → 1.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -6
- package/gl-transitions.js +1 -1
- package/gl-transitions.json +1 -1
- package/index.d.ts +45 -0
- package/index.js +1 -1
- package/package.json +6 -3
- package/sksl/AdvancedMosaic.sksl +34 -0
- package/sksl/BlockDissolve.sksl +29 -0
- package/sksl/BookFlip.sksl +50 -0
- package/sksl/Bounce.sksl +48 -0
- package/sksl/BowTieHorizontal.sksl +136 -0
- package/sksl/BowTieVertical.sksl +130 -0
- package/sksl/BowTieWithParameter.sksl +88 -0
- package/sksl/Box.sksl +47 -0
- package/sksl/ButterflyWaveScrawler.sksl +48 -0
- package/sksl/CircleCrop.sksl +32 -0
- package/sksl/ColourDistance.sksl +32 -0
- package/sksl/CrazyParametricFun.sksl +34 -0
- package/sksl/CrossZoom.sksl +76 -0
- package/sksl/DefocusBlur.sksl +56 -0
- package/sksl/Directional.sksl +31 -0
- package/sksl/DirectionalScaled.sksl +44 -0
- package/sksl/DoomScreenTransition.sksl +65 -0
- package/sksl/Dreamy.sksl +28 -0
- package/sksl/DreamyZoom.sksl +46 -0
- package/sksl/Drop_Zone_Flicker.sksl +170 -0
- package/sksl/EdgeTransition.sksl +64 -0
- package/sksl/FilmBurn.sksl +75 -0
- package/sksl/Fold.sksl +25 -0
- package/sksl/GlitchDisplace.sksl +90 -0
- package/sksl/GlitchMemories.sksl +31 -0
- package/sksl/GridFlip.sksl +89 -0
- package/sksl/HSVfade.sksl +40 -0
- package/sksl/HorizontalClose.sksl +30 -0
- package/sksl/HorizontalOpen.sksl +32 -0
- package/sksl/InvertedPageCurl.sksl +207 -0
- package/sksl/LeftRight.sksl +42 -0
- package/sksl/LinearBlur.sksl +44 -0
- package/sksl/Mosaic.sksl +55 -0
- package/sksl/Overexposure.sksl +38 -0
- package/sksl/PolkaDotsCurtain.sksl +29 -0
- package/sksl/PuzzleRight.sksl +70 -0
- package/sksl/Radial.sksl +32 -0
- package/sksl/Rectangle.sksl +42 -0
- package/sksl/RectangleCrop.sksl +43 -0
- package/sksl/Revolve_Left.sksl +110 -0
- package/sksl/Rolls.sksl +48 -0
- package/sksl/RotateScaleVanish.sksl +49 -0
- package/sksl/SimpleFlip.sksl +27 -0
- package/sksl/SimpleZoom.sksl +33 -0
- package/sksl/SimpleZoomOut.sksl +35 -0
- package/sksl/Slides.sksl +48 -0
- package/sksl/StarWipe.sksl +62 -0
- package/sksl/StaticFade.sksl +61 -0
- package/sksl/StereoViewer.sksl +190 -0
- package/sksl/StripDatamoshGlitch.sksl +201 -0
- package/sksl/Swirl.sksl +46 -0
- package/sksl/TVStatic.sksl +41 -0
- package/sksl/TilesWave.sksl +75 -0
- package/sksl/TopBottom.sksl +41 -0
- package/sksl/VerticalClose.sksl +30 -0
- package/sksl/VerticalOpen.sksl +31 -0
- package/sksl/WaterDrop.sksl +35 -0
- package/sksl/ZoomInCircles.sksl +53 -0
- package/sksl/ZoomLeftWipe.sksl +49 -0
- package/sksl/ZoomRigthWipe.sksl +49 -0
- package/sksl/angular.sksl +36 -0
- package/sksl/burn.sksl +28 -0
- package/sksl/burn0.sksl +65 -0
- package/sksl/cannabisleaf.sksl +30 -0
- package/sksl/chessboard.sksl +41 -0
- package/sksl/circle.sksl +37 -0
- package/sksl/circleopen.sksl +32 -0
- package/sksl/colorphase.sksl +29 -0
- package/sksl/coord-from-in.sksl +32 -0
- package/sksl/crosshatch.sksl +32 -0
- package/sksl/crosswarp.sksl +25 -0
- package/sksl/cube.sksl +82 -0
- package/sksl/directional-easing.sksl +32 -0
- package/sksl/directionalwarp.sksl +33 -0
- package/sksl/directionalwipe.sksl +35 -0
- package/sksl/displacement.sksl +37 -0
- package/sksl/dissolve.sksl +68 -0
- package/sksl/doorway.sksl +68 -0
- package/sksl/fade.sksl +27 -0
- package/sksl/fadecolor.sksl +29 -0
- package/sksl/fadegrayscale.sksl +34 -0
- package/sksl/flyeye.sksl +35 -0
- package/sksl/fragment.sksl +66 -0
- package/sksl/heart.sksl +33 -0
- package/sksl/hexagonalize.sksl +91 -0
- package/sksl/kaleidoscope.sksl +39 -0
- package/sksl/luma.sksl +30 -0
- package/sksl/luminance_melt.sksl +109 -0
- package/sksl/morph.sksl +34 -0
- package/sksl/mosaic_transition.sksl +33 -0
- package/sksl/multiply_blend.sksl +33 -0
- package/sksl/old_tv_lost_signal.sksl +65 -0
- package/sksl/parametric_glitch.sksl +40 -0
- package/sksl/perlin.sksl +75 -0
- package/sksl/pinwheel.sksl +33 -0
- package/sksl/pixelize.sksl +31 -0
- package/sksl/polar_function.sksl +35 -0
- package/sksl/powerKaleido.sksl +70 -0
- package/sksl/randomNoisex.sksl +29 -0
- package/sksl/randomsquares.sksl +33 -0
- package/sksl/ripple.sksl +34 -0
- package/sksl/rotateTransition.sksl +34 -0
- package/sksl/rotate_scale_fade.sksl +50 -0
- package/sksl/scale-in.sksl +32 -0
- package/sksl/splitSlideInHorizontal.sksl +39 -0
- package/sksl/splitSlideInOutHorizontal.sksl +36 -0
- package/sksl/splitSlideInOutVertical.sksl +36 -0
- package/sksl/splitSlideInVertical.sksl +37 -0
- package/sksl/splitSlideOutHorizontal.sksl +35 -0
- package/sksl/splitSlideOutVertical.sksl +35 -0
- package/sksl/squareswire.sksl +39 -0
- package/sksl/squeeze.sksl +36 -0
- package/sksl/static_wipe.sksl +50 -0
- package/sksl/swap.sksl +77 -0
- package/sksl/tangentMotionBlur.sksl +145 -0
- package/sksl/undulatingBurnOut.sksl +65 -0
- package/sksl/wind.sksl +38 -0
- package/sksl/windowblinds.sksl +32 -0
- package/sksl/windowslice.sksl +29 -0
- package/sksl/wipeDown.sksl +26 -0
- package/sksl/wipeLeft.sksl +26 -0
- package/sksl/wipeRight.sksl +26 -0
- package/sksl/wipeUp.sksl +26 -0
- package/sksl/x_axis_translation.sksl +35 -0
- package/sksl/zoomInOut.sksl +34 -0
- package/transitions/AdvancedMosaic.glsl +2 -0
- package/transitions/BlockDissolve.glsl +2 -0
- package/transitions/BookFlip.glsl +9 -2
- package/transitions/Bounce.glsl +5 -0
- package/transitions/BowTieHorizontal.glsl +2 -0
- package/transitions/BowTieVertical.glsl +115 -113
- package/transitions/BowTieWithParameter.glsl +3 -0
- package/transitions/Box.glsl +3 -0
- package/transitions/ButterflyWaveScrawler.glsl +2 -0
- package/transitions/CircleCrop.glsl +5 -3
- package/transitions/ColourDistance.glsl +2 -0
- package/transitions/CrazyParametricFun.glsl +2 -0
- package/transitions/CrossZoom.glsl +3 -0
- package/transitions/DefocusBlur.glsl +3 -0
- package/transitions/Directional.glsl +3 -0
- package/transitions/DirectionalScaled.glsl +3 -0
- package/transitions/DoomScreenTransition.glsl +2 -0
- package/transitions/Dreamy.glsl +2 -0
- package/transitions/DreamyZoom.glsl +2 -0
- package/transitions/Drop_Zone_Flicker.glsl +2 -0
- package/transitions/EdgeTransition.glsl +2 -0
- package/transitions/FilmBurn.glsl +5 -2
- package/transitions/Fold.glsl +2 -0
- package/transitions/GlitchDisplace.glsl +2 -4
- package/transitions/GlitchMemories.glsl +2 -0
- package/transitions/GridFlip.glsl +4 -0
- package/transitions/HSVfade.glsl +2 -0
- package/transitions/HorizontalClose.glsl +2 -0
- package/transitions/HorizontalOpen.glsl +2 -0
- package/transitions/InvertedPageCurl.glsl +2 -0
- package/transitions/LeftRight.glsl +2 -0
- package/transitions/LinearBlur.glsl +3 -0
- package/transitions/Mosaic.glsl +2 -0
- package/transitions/Overexposure.glsl +3 -0
- package/transitions/PolkaDotsCurtain.glsl +3 -0
- package/transitions/PuzzleRight.glsl +2 -0
- package/transitions/Radial.glsl +2 -0
- package/transitions/Rectangle.glsl +4 -2
- package/transitions/RectangleCrop.glsl +3 -0
- package/transitions/Revolve_Left.glsl +3 -0
- package/transitions/Rolls.glsl +4 -0
- package/transitions/RotateScaleVanish.glsl +5 -0
- package/transitions/SimpleFlip.glsl +2 -0
- package/transitions/SimpleZoom.glsl +4 -2
- package/transitions/SimpleZoomOut.glsl +5 -2
- package/transitions/Slides.glsl +3 -0
- package/transitions/StarWipe.glsl +5 -0
- package/transitions/StaticFade.glsl +2 -0
- package/transitions/StereoViewer.glsl +3 -0
- package/transitions/StripDatamoshGlitch.glsl +2 -0
- package/transitions/Swirl.glsl +2 -0
- package/transitions/TVStatic.glsl +3 -0
- package/transitions/TilesWave.glsl +3 -0
- package/transitions/TopBottom.glsl +2 -0
- package/transitions/VerticalClose.glsl +2 -0
- package/transitions/VerticalOpen.glsl +2 -0
- package/transitions/WaterDrop.glsl +4 -0
- package/transitions/ZoomInCircles.glsl +3 -2
- package/transitions/ZoomLeftWipe.glsl +4 -2
- package/transitions/ZoomRigthWipe.glsl +4 -2
- package/transitions/angular.glsl +3 -0
- package/transitions/burn.glsl +3 -0
- package/transitions/burn0.glsl +3 -0
- package/transitions/cannabisleaf.glsl +2 -0
- package/transitions/chessboard.glsl +3 -0
- package/transitions/circle.glsl +4 -0
- package/transitions/circleopen.glsl +4 -0
- package/transitions/colorphase.glsl +4 -0
- package/transitions/coord-from-in.glsl +2 -0
- package/transitions/crosshatch.glsl +3 -0
- package/transitions/crosswarp.glsl +2 -0
- package/transitions/cube.glsl +4 -0
- package/transitions/directional-easing.glsl +3 -0
- package/transitions/directionalwarp.glsl +4 -0
- package/transitions/directionalwipe.glsl +4 -0
- package/transitions/displacement.glsl +3 -0
- package/transitions/dissolve.glsl +4 -4
- package/transitions/doorway.glsl +4 -0
- package/transitions/fade.glsl +2 -0
- package/transitions/fadecolor.glsl +4 -0
- package/transitions/fadegrayscale.glsl +3 -0
- package/transitions/flyeye.glsl +2 -0
- package/transitions/fragment.glsl +2 -0
- package/transitions/heart.glsl +2 -0
- package/transitions/hexagonalize.glsl +3 -0
- package/transitions/kaleidoscope.glsl +2 -0
- package/transitions/luma.glsl +2 -0
- package/transitions/luminance_melt.glsl +6 -2
- package/transitions/morph.glsl +3 -0
- package/transitions/mosaic_transition.glsl +3 -0
- package/transitions/multiply_blend.glsl +2 -0
- package/transitions/old_tv_lost_signal.glsl +2 -0
- package/transitions/parametric_glitch.glsl +4 -0
- package/transitions/perlin.glsl +5 -4
- package/transitions/pinwheel.glsl +3 -0
- package/transitions/pixelize.glsl +7 -4
- package/transitions/polar_function.glsl +3 -0
- package/transitions/powerKaleido.glsl +3 -1
- package/transitions/randomNoisex.glsl +2 -0
- package/transitions/randomsquares.glsl +4 -0
- package/transitions/ripple.glsl +4 -0
- package/transitions/rotateTransition.glsl +2 -0
- package/transitions/rotate_scale_fade.glsl +6 -0
- package/transitions/scale-in.glsl +2 -0
- package/transitions/splitSlideInHorizontal.glsl +3 -0
- package/transitions/splitSlideInOutHorizontal.glsl +3 -0
- package/transitions/splitSlideInOutVertical.glsl +3 -0
- package/transitions/splitSlideInVertical.glsl +3 -0
- package/transitions/splitSlideOutHorizontal.glsl +3 -0
- package/transitions/splitSlideOutVertical.glsl +3 -0
- package/transitions/squareswire.glsl +5 -0
- package/transitions/squeeze.glsl +3 -0
- package/transitions/static_wipe.glsl +4 -0
- package/transitions/swap.glsl +4 -0
- package/transitions/tangentMotionBlur.glsl +2 -0
- package/transitions/undulatingBurnOut.glsl +5 -0
- package/transitions/wind.glsl +4 -1
- package/transitions/windowblinds.glsl +2 -0
- package/transitions/windowslice.glsl +4 -0
- package/transitions/wipeDown.glsl +2 -0
- package/transitions/wipeLeft.glsl +2 -0
- package/transitions/wipeRight.glsl +2 -0
- package/transitions/wipeUp.glsl +2 -0
- package/transitions/x_axis_translation.glsl +2 -0
- package/transitions/zoomInOut.glsl +2 -0
package/sksl/Fold.sksl
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Fold — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/Fold.glsl
|
|
2
|
+
// Author: nwoeanhinnogaehr
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: The incoming image unfolds from the left while the outgoing one folds away to the right
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
vec4 transition(vec2 uv) {
|
|
16
|
+
vec4 a = getFromColor((uv - vec2(progress, 0.0)) / vec2(1.0 - progress, 1.0));
|
|
17
|
+
vec4 b = getToColor(uv / vec2(progress, 1.0));
|
|
18
|
+
return mix(a, b, step(uv.x, progress));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
half4 main(float2 _coord) {
|
|
22
|
+
vec2 _uv = _coord / _resolution;
|
|
23
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
24
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
25
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// GlitchDisplace — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/GlitchDisplace.glsl
|
|
2
|
+
// Author: Matt DesLauriers
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: Blocks of the image are displaced in a glitch that flashes into the incoming image
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
float random(vec2 co)
|
|
16
|
+
{
|
|
17
|
+
float a = 12.9898;
|
|
18
|
+
float b = 78.233;
|
|
19
|
+
float c = 43758.5453;
|
|
20
|
+
float dt= dot(co.xy ,vec2(a,b));
|
|
21
|
+
float sn= mod(dt,3.14);
|
|
22
|
+
return fract(sin(sn) * c);
|
|
23
|
+
}
|
|
24
|
+
float voronoi( in vec2 x ) {
|
|
25
|
+
vec2 p = floor( x );
|
|
26
|
+
vec2 f = fract( x );
|
|
27
|
+
float res = 8.0;
|
|
28
|
+
for( float j=-1.; j<=1.; j++ )
|
|
29
|
+
for( float i=-1.; i<=1.; i++ ) {
|
|
30
|
+
vec2 b = vec2( i, j );
|
|
31
|
+
vec2 r = b - f + random( p + b );
|
|
32
|
+
float d = dot( r, r );
|
|
33
|
+
res = min( res, d );
|
|
34
|
+
}
|
|
35
|
+
return sqrt( res );
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
vec2 displace(vec4 tex, vec2 texCoord, float dotDepth, float textureDepth, float strength) {
|
|
39
|
+
float b = voronoi(.003 * texCoord + 2.0);
|
|
40
|
+
float g = voronoi(0.2 * texCoord);
|
|
41
|
+
float r = voronoi(texCoord - 1.0);
|
|
42
|
+
vec4 dt = tex * 1.0;
|
|
43
|
+
vec4 dis = dt * dotDepth + 1.0 - tex * textureDepth;
|
|
44
|
+
|
|
45
|
+
dis.x = dis.x - 1.0 + textureDepth*dotDepth;
|
|
46
|
+
dis.y = dis.y - 1.0 + textureDepth*dotDepth;
|
|
47
|
+
dis.x *= strength;
|
|
48
|
+
dis.y *= strength;
|
|
49
|
+
vec2 res_uv = texCoord ;
|
|
50
|
+
res_uv.x = res_uv.x + dis.x - 0.0;
|
|
51
|
+
res_uv.y = res_uv.y + dis.y;
|
|
52
|
+
return res_uv;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
float ease1(float t) {
|
|
56
|
+
return t == 0.0 || t == 1.0
|
|
57
|
+
? t
|
|
58
|
+
: t < 0.5
|
|
59
|
+
? +0.5 * pow(2.0, (20.0 * t) - 10.0)
|
|
60
|
+
: -0.5 * pow(2.0, 10.0 - (t * 20.0)) + 1.0;
|
|
61
|
+
}
|
|
62
|
+
float ease2(float t) {
|
|
63
|
+
return t == 1.0 ? t : 1.0 - pow(2.0, -10.0 * t);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
vec4 transition(vec2 uv) {
|
|
67
|
+
vec2 p = uv.xy / vec2(1.0).xy;
|
|
68
|
+
vec4 color1 = getFromColor(p);
|
|
69
|
+
vec4 color2 = getToColor(p);
|
|
70
|
+
vec2 disp = displace(color1, p, 0.33, 0.7, 1.0-ease1(progress));
|
|
71
|
+
vec2 disp2 = displace(color2, p, 0.33, 0.5, ease2(progress));
|
|
72
|
+
vec4 dColor1 = getToColor(disp);
|
|
73
|
+
vec4 dColor2 = getFromColor(disp2);
|
|
74
|
+
float val = ease1(progress);
|
|
75
|
+
vec3 gray = vec3(dot(min(dColor2, dColor1).rgb, vec3(0.299, 0.587, 0.114)));
|
|
76
|
+
dColor2 = vec4(gray, 1.0);
|
|
77
|
+
dColor2 *= 2.0;
|
|
78
|
+
color1 = mix(color1, dColor2, smoothstep(0.0, 0.5, progress));
|
|
79
|
+
color2 = mix(color2, dColor1, smoothstep(1.0, 0.5, progress));
|
|
80
|
+
return mix(color1, color2, val);
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
half4 main(float2 _coord) {
|
|
87
|
+
vec2 _uv = _coord / _resolution;
|
|
88
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
89
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
90
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// GlitchMemories — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/GlitchMemories.glsl
|
|
2
|
+
// Author: Gunnar Roth
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: A crossfade with glitchy, color-shifted blocks
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
vec4 transition(vec2 p) {
|
|
16
|
+
vec2 block = floor(p.xy / vec2(16));
|
|
17
|
+
vec2 uv_noise = block / vec2(64);
|
|
18
|
+
uv_noise += floor(vec2(progress) * vec2(1200.0, 3500.0)) / vec2(64);
|
|
19
|
+
vec2 dist = progress > 0.0 ? (fract(uv_noise) - 0.5) * 0.3 *(1.0 -progress) : vec2(0.0);
|
|
20
|
+
vec2 red = p + dist * 0.2;
|
|
21
|
+
vec2 green = p + dist * .3;
|
|
22
|
+
vec2 blue = p + dist * .5;
|
|
23
|
+
|
|
24
|
+
return vec4(mix(getFromColor(red), getToColor(red), progress).r,mix(getFromColor(green), getToColor(green), progress).g,mix(getFromColor(blue), getToColor(blue), progress).b,1.0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
half4 main(float2 _coord) {
|
|
28
|
+
vec2 _uv = _coord / _resolution;
|
|
29
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
30
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
31
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// GridFlip — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/GridFlip.glsl
|
|
2
|
+
// Author: TimDonselaar
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: The image splits into a grid of tiles that flip one by one to the incoming image
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
uniform ivec2 size;
|
|
16
|
+
uniform float pause;
|
|
17
|
+
uniform float dividerWidth;
|
|
18
|
+
|
|
19
|
+
uniform vec4 bgcolor;
|
|
20
|
+
uniform float randomness;
|
|
21
|
+
|
|
22
|
+
float rand (vec2 co) {
|
|
23
|
+
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
float getDelta(vec2 p) {
|
|
27
|
+
vec2 rectanglePos = floor(vec2(size) * p);
|
|
28
|
+
vec2 rectangleSize = vec2(1.0 / vec2(size).x, 1.0 / vec2(size).y);
|
|
29
|
+
float top = rectangleSize.y * (rectanglePos.y + 1.0);
|
|
30
|
+
float bottom = rectangleSize.y * rectanglePos.y;
|
|
31
|
+
float left = rectangleSize.x * rectanglePos.x;
|
|
32
|
+
float right = rectangleSize.x * (rectanglePos.x + 1.0);
|
|
33
|
+
float minX = min(abs(p.x - left), abs(p.x - right));
|
|
34
|
+
float minY = min(abs(p.y - top), abs(p.y - bottom));
|
|
35
|
+
return min(minX, minY);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
float getDividerSize() {
|
|
39
|
+
vec2 rectangleSize = vec2(1.0 / vec2(size).x, 1.0 / vec2(size).y);
|
|
40
|
+
return min(rectangleSize.x, rectangleSize.y) * dividerWidth;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
vec4 transition(vec2 p) {
|
|
44
|
+
if(progress < pause) {
|
|
45
|
+
float currentProg = progress / pause;
|
|
46
|
+
float a = 1.0;
|
|
47
|
+
if(getDelta(p) < getDividerSize()) {
|
|
48
|
+
a = 1.0 - currentProg;
|
|
49
|
+
}
|
|
50
|
+
return mix(bgcolor, getFromColor(p), a);
|
|
51
|
+
}
|
|
52
|
+
else if(progress < 1.0 - pause){
|
|
53
|
+
if(getDelta(p) < getDividerSize()) {
|
|
54
|
+
return bgcolor;
|
|
55
|
+
} else {
|
|
56
|
+
float currentProg = (progress - pause) / (1.0 - pause * 2.0);
|
|
57
|
+
vec2 q = p;
|
|
58
|
+
vec2 rectanglePos = floor(vec2(size) * q);
|
|
59
|
+
|
|
60
|
+
float r = rand(rectanglePos) - randomness;
|
|
61
|
+
float cp = smoothstep(0.0, 1.0 - r, currentProg);
|
|
62
|
+
|
|
63
|
+
float rectangleSize = 1.0 / vec2(size).x;
|
|
64
|
+
float delta = rectanglePos.x * rectangleSize;
|
|
65
|
+
float offset = rectangleSize / 2.0 + delta;
|
|
66
|
+
|
|
67
|
+
p.x = (p.x - offset)/abs(cp - 0.5)*0.5 + offset;
|
|
68
|
+
vec4 a = getFromColor(p);
|
|
69
|
+
vec4 b = getToColor(p);
|
|
70
|
+
|
|
71
|
+
float s = step(abs(vec2(size).x * (q.x - delta) - 0.5), abs(cp - 0.5));
|
|
72
|
+
return mix(bgcolor, mix(b, a, step(cp, 0.5)), s);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
float currentProg = (progress - 1.0 + pause) / pause;
|
|
77
|
+
float a = 1.0;
|
|
78
|
+
if(getDelta(p) < getDividerSize()) {
|
|
79
|
+
a = currentProg;
|
|
80
|
+
}
|
|
81
|
+
return mix(bgcolor, getToColor(p), a);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
half4 main(float2 _coord) {
|
|
86
|
+
vec2 _uv = _coord / _resolution;
|
|
87
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
88
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
89
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// HSVfade — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/HSVfade.glsl
|
|
2
|
+
// Author: nwoeanhinnogaehr
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: A crossfade through the HSV color space that cycles through hues
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
vec3 hsv2rgb(vec3 c) {
|
|
16
|
+
const vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
|
17
|
+
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
|
18
|
+
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
vec3 rgb2hsv(vec3 c) {
|
|
22
|
+
const vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
|
23
|
+
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
|
24
|
+
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
|
25
|
+
float d = q.x - min(q.w, q.y);
|
|
26
|
+
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + 0.001)), d / (q.x + 0.001), q.x);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
vec4 transition(vec2 uv) {
|
|
30
|
+
vec3 a = rgb2hsv(getFromColor(uv).rgb);
|
|
31
|
+
vec3 b = rgb2hsv(getToColor(uv).rgb);
|
|
32
|
+
vec3 m = mix(a, b, progress);
|
|
33
|
+
return vec4(hsv2rgb(m), 1.0);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
half4 main(float2 _coord) {
|
|
37
|
+
vec2 _uv = _coord / _resolution;
|
|
38
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
39
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
40
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// HorizontalClose — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/HorizontalClose.glsl
|
|
2
|
+
// Author: martiniti
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: The incoming image closes in from the top and bottom edges toward the middle
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
vec4 transition (vec2 uv) {
|
|
16
|
+
|
|
17
|
+
float s = 2.0 - abs((uv.y - 0.5) / (progress - 1.0)) - 2.0 * progress;
|
|
18
|
+
|
|
19
|
+
return mix(
|
|
20
|
+
getFromColor(uv),
|
|
21
|
+
getToColor(uv),
|
|
22
|
+
smoothstep(0.5, 0.0, s)
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
half4 main(float2 _coord) {
|
|
27
|
+
vec2 _uv = _coord / _resolution;
|
|
28
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
29
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
30
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// HorizontalOpen — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/HorizontalOpen.glsl
|
|
2
|
+
// Author: martiniti
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: The incoming image opens from a line in the middle toward the top and bottom edges
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
vec4 transition (vec2 uv) {
|
|
16
|
+
|
|
17
|
+
float regress = 1.0 - progress;
|
|
18
|
+
|
|
19
|
+
float s = 2.0 - abs((uv.y - 0.5) / (regress - 1.0)) - 2.0 * regress;
|
|
20
|
+
|
|
21
|
+
return mix(
|
|
22
|
+
getFromColor(uv),
|
|
23
|
+
getToColor(uv),
|
|
24
|
+
smoothstep(0.0, 0.5, s)
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
half4 main(float2 _coord) {
|
|
29
|
+
vec2 _uv = _coord / _resolution;
|
|
30
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
31
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
32
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// InvertedPageCurl — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/InvertedPageCurl.glsl
|
|
2
|
+
// Author: Hewlett-Packard
|
|
3
|
+
// License: BSD 3 Clause
|
|
4
|
+
// Description: The outgoing image curls away like a page, revealing the incoming one
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
const float MIN_AMOUNT = -0.16;
|
|
16
|
+
const float MAX_AMOUNT = 1.5;
|
|
17
|
+
|
|
18
|
+
const float PI = 3.141592653589793;
|
|
19
|
+
|
|
20
|
+
const float scale = 512.0;
|
|
21
|
+
const float sharpness = 3.0;
|
|
22
|
+
|
|
23
|
+
const float cylinderRadius = 1.0 / PI / 2.0;
|
|
24
|
+
|
|
25
|
+
float amount;
|
|
26
|
+
float cylinderCenter;
|
|
27
|
+
float cylinderAngle;
|
|
28
|
+
|
|
29
|
+
vec3 hitPoint(float hitAngle, float yc, vec3 point, mat3 rrotation)
|
|
30
|
+
{
|
|
31
|
+
float hitPoint = hitAngle / (2.0 * PI);
|
|
32
|
+
point.y = hitPoint;
|
|
33
|
+
return rrotation * point;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
vec4 antiAlias(vec4 color1, vec4 color2, float distanc)
|
|
37
|
+
{
|
|
38
|
+
distanc *= scale;
|
|
39
|
+
if (distanc < 0.0) return color2;
|
|
40
|
+
if (distanc > 2.0) return color1;
|
|
41
|
+
float dd = pow(1.0 - distanc / 2.0, sharpness);
|
|
42
|
+
return ((color2 - color1) * dd) + color1;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
float distanceToEdge(vec3 point)
|
|
46
|
+
{
|
|
47
|
+
float dx = abs(point.x > 0.5 ? 1.0 - point.x : point.x);
|
|
48
|
+
float dy = abs(point.y > 0.5 ? 1.0 - point.y : point.y);
|
|
49
|
+
if (point.x < 0.0) dx = -point.x;
|
|
50
|
+
if (point.x > 1.0) dx = point.x - 1.0;
|
|
51
|
+
if (point.y < 0.0) dy = -point.y;
|
|
52
|
+
if (point.y > 1.0) dy = point.y - 1.0;
|
|
53
|
+
if ((point.x < 0.0 || point.x > 1.0) && (point.y < 0.0 || point.y > 1.0)) return sqrt(dx * dx + dy * dy);
|
|
54
|
+
return min(dx, dy);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
vec4 seeThrough(float yc, vec2 p, mat3 rotation, mat3 rrotation)
|
|
58
|
+
{
|
|
59
|
+
float hitAngle = PI - (acos(clamp(yc / cylinderRadius, -1.0, 1.0)) - cylinderAngle);
|
|
60
|
+
vec3 point = hitPoint(hitAngle, yc, rotation * vec3(p, 1.0), rrotation);
|
|
61
|
+
if (yc <= 0.0 && (point.x < 0.0 || point.y < 0.0 || point.x > 1.0 || point.y > 1.0))
|
|
62
|
+
{
|
|
63
|
+
return getToColor(p);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (yc > 0.0) return getFromColor(p);
|
|
67
|
+
|
|
68
|
+
vec4 color = getFromColor(point.xy);
|
|
69
|
+
vec4 tcolor = vec4(0.0);
|
|
70
|
+
|
|
71
|
+
return antiAlias(color, tcolor, distanceToEdge(point));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
vec4 seeThroughWithShadow(float yc, vec2 p, vec3 point, mat3 rotation, mat3 rrotation)
|
|
75
|
+
{
|
|
76
|
+
float shadow = distanceToEdge(point) * 30.0;
|
|
77
|
+
shadow = (1.0 - shadow) / 3.0;
|
|
78
|
+
|
|
79
|
+
if (shadow < 0.0) shadow = 0.0; else shadow *= amount;
|
|
80
|
+
|
|
81
|
+
vec4 shadowColor = seeThrough(yc, p, rotation, rrotation);
|
|
82
|
+
shadowColor.r -= shadow;
|
|
83
|
+
shadowColor.g -= shadow;
|
|
84
|
+
shadowColor.b -= shadow;
|
|
85
|
+
|
|
86
|
+
return shadowColor;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
vec4 backside(float yc, vec3 point)
|
|
90
|
+
{
|
|
91
|
+
vec4 color = getFromColor(point.xy);
|
|
92
|
+
float gray = (color.r + color.b + color.g) / 15.0;
|
|
93
|
+
gray += (8.0 / 10.0) * (pow(max(0.0, 1.0 - abs(yc / cylinderRadius)), 2.0 / 10.0) / 2.0 + (5.0 / 10.0));
|
|
94
|
+
color.rgb = vec3(gray);
|
|
95
|
+
return color;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
vec4 behindSurface(vec2 p, float yc, vec3 point, mat3 rrotation)
|
|
99
|
+
{
|
|
100
|
+
float safeAmount = amount >= 0.0 ? max(amount, 1e-4) : min(amount, -1e-4);
|
|
101
|
+
float shado = (1.0 - ((-cylinderRadius - yc) / safeAmount * 7.0)) / 6.0;
|
|
102
|
+
shado *= 1.0 - abs(point.x - 0.5);
|
|
103
|
+
|
|
104
|
+
yc = (-cylinderRadius - cylinderRadius - yc);
|
|
105
|
+
|
|
106
|
+
float hitAngle = (acos(clamp(yc / cylinderRadius, -1.0, 1.0)) + cylinderAngle) - PI;
|
|
107
|
+
point = hitPoint(hitAngle, yc, point, rrotation);
|
|
108
|
+
|
|
109
|
+
if (yc < 0.0 && point.x >= 0.0 && point.y >= 0.0 && point.x <= 1.0 && point.y <= 1.0 && (hitAngle < PI || amount > 0.5))
|
|
110
|
+
{
|
|
111
|
+
float dx = point.x - 0.5;
|
|
112
|
+
float dy = point.y - 0.5;
|
|
113
|
+
shado = 1.0 - (sqrt(dx * dx + dy * dy) / (71.0 / 100.0));
|
|
114
|
+
float nyc = -yc / cylinderRadius;
|
|
115
|
+
shado *= nyc * nyc * nyc;
|
|
116
|
+
shado *= 0.5;
|
|
117
|
+
}
|
|
118
|
+
else
|
|
119
|
+
{
|
|
120
|
+
shado = 0.0;
|
|
121
|
+
}
|
|
122
|
+
return vec4(getToColor(p).rgb - shado, 1.0);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
vec4 transition(vec2 p) {
|
|
126
|
+
amount = progress * (MAX_AMOUNT - MIN_AMOUNT) + MIN_AMOUNT;
|
|
127
|
+
cylinderCenter = amount;
|
|
128
|
+
cylinderAngle = 2.0 * PI * amount;
|
|
129
|
+
|
|
130
|
+
const float angle = 100.0 * PI / 180.0;
|
|
131
|
+
float c = cos(-angle);
|
|
132
|
+
float s = sin(-angle);
|
|
133
|
+
|
|
134
|
+
mat3 rotation = mat3( c, s, 0,
|
|
135
|
+
-s, c, 0,
|
|
136
|
+
-0.801, 0.8900, 1
|
|
137
|
+
);
|
|
138
|
+
c = cos(angle);
|
|
139
|
+
s = sin(angle);
|
|
140
|
+
|
|
141
|
+
mat3 rrotation = mat3( c, s, 0,
|
|
142
|
+
-s, c, 0,
|
|
143
|
+
0.98500, 0.985, 1
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
vec3 point = rotation * vec3(p, 1.0);
|
|
147
|
+
|
|
148
|
+
float yc = point.y - cylinderCenter;
|
|
149
|
+
|
|
150
|
+
if (yc < -cylinderRadius)
|
|
151
|
+
{
|
|
152
|
+
|
|
153
|
+
return behindSurface(p,yc, point, rrotation);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (yc > cylinderRadius)
|
|
157
|
+
{
|
|
158
|
+
|
|
159
|
+
return getFromColor(p);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
float hitAngle = (acos(clamp(yc / cylinderRadius, -1.0, 1.0)) + cylinderAngle) - PI;
|
|
163
|
+
|
|
164
|
+
float hitAngleMod = mod(hitAngle, 2.0 * PI);
|
|
165
|
+
if ((hitAngleMod > PI && amount < 0.5) || (hitAngleMod > PI/2.0 && amount < 0.0))
|
|
166
|
+
{
|
|
167
|
+
return seeThrough(yc, p, rotation, rrotation);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
point = hitPoint(hitAngle, yc, point, rrotation);
|
|
171
|
+
|
|
172
|
+
if (point.x < 0.0 || point.y < 0.0 || point.x > 1.0 || point.y > 1.0)
|
|
173
|
+
{
|
|
174
|
+
return seeThroughWithShadow(yc, p, point, rotation, rrotation);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
vec4 color = backside(yc, point);
|
|
178
|
+
|
|
179
|
+
vec4 otherColor;
|
|
180
|
+
if (yc < 0.0)
|
|
181
|
+
{
|
|
182
|
+
float dx2 = point.x - 0.5;
|
|
183
|
+
float dy2 = point.y - 0.5;
|
|
184
|
+
float shado = 1.0 - (sqrt(dx2 * dx2 + dy2 * dy2) / 0.71);
|
|
185
|
+
float nyc2 = -yc / cylinderRadius;
|
|
186
|
+
shado *= nyc2 * nyc2 * nyc2;
|
|
187
|
+
shado *= 0.5;
|
|
188
|
+
otherColor = vec4(0.0, 0.0, 0.0, shado);
|
|
189
|
+
}
|
|
190
|
+
else
|
|
191
|
+
{
|
|
192
|
+
otherColor = getFromColor(p);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
color = antiAlias(color, otherColor, cylinderRadius - abs(yc));
|
|
196
|
+
|
|
197
|
+
vec4 cl = seeThroughWithShadow(yc, p, point, rotation, rrotation);
|
|
198
|
+
float dist = distanceToEdge(point);
|
|
199
|
+
|
|
200
|
+
return antiAlias(color, cl, dist);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
half4 main(float2 _coord) {
|
|
204
|
+
vec2 _uv = _coord / _resolution;
|
|
205
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
206
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
207
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// LeftRight — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/LeftRight.glsl
|
|
2
|
+
// Author: zhmy
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: The outgoing image shrinks away to the left while the incoming one slides in from the right
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
const vec4 black = vec4(0.0, 0.0, 0.0, 1.0);
|
|
16
|
+
const vec2 boundMin = vec2(0.0, 0.0);
|
|
17
|
+
const vec2 boundMax = vec2(1.0, 1.0);
|
|
18
|
+
|
|
19
|
+
bool inBounds (vec2 p) {
|
|
20
|
+
return all(lessThan(boundMin, p)) && all(lessThan(p, boundMax));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
vec4 transition (vec2 uv) {
|
|
24
|
+
vec2 spfr,spto = vec2(-1.);
|
|
25
|
+
|
|
26
|
+
float size = mix(1.0, 3.0, progress*0.2);
|
|
27
|
+
spto = (uv + vec2(-0.5,-0.5))*vec2(size,size)+vec2(0.5,0.5);
|
|
28
|
+
spfr = (uv - vec2(1.-progress, 0.0));
|
|
29
|
+
if(inBounds(spfr)){
|
|
30
|
+
return getToColor(spfr);
|
|
31
|
+
}else if(inBounds(spto)){
|
|
32
|
+
return getFromColor(spto) * (1.0 - progress);
|
|
33
|
+
} else{
|
|
34
|
+
return black;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
half4 main(float2 _coord) {
|
|
39
|
+
vec2 _uv = _coord / _resolution;
|
|
40
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
41
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
42
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// LinearBlur — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/LinearBlur.glsl
|
|
2
|
+
// Author: gre
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: A crossfade through a blur
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
uniform float intensity;
|
|
16
|
+
const int passes = 6;
|
|
17
|
+
|
|
18
|
+
vec4 transition(vec2 uv) {
|
|
19
|
+
vec4 c1 = vec4(0.0);
|
|
20
|
+
vec4 c2 = vec4(0.0);
|
|
21
|
+
|
|
22
|
+
float disp = intensity*(0.5-distance(0.5, progress));
|
|
23
|
+
for (int xi=0; xi<passes; xi++)
|
|
24
|
+
{
|
|
25
|
+
float x = float(xi) / float(passes) - 0.5;
|
|
26
|
+
for (int yi=0; yi<passes; yi++)
|
|
27
|
+
{
|
|
28
|
+
float y = float(yi) / float(passes) - 0.5;
|
|
29
|
+
vec2 v = vec2(x,y);
|
|
30
|
+
float d = disp;
|
|
31
|
+
c1 += getFromColor( uv + d*v);
|
|
32
|
+
c2 += getToColor( uv + d*v);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
c1 /= float(passes*passes);
|
|
36
|
+
c2 /= float(passes*passes);
|
|
37
|
+
return mix(c1, c2, progress);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
half4 main(float2 _coord) {
|
|
41
|
+
vec2 _uv = _coord / _resolution;
|
|
42
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
43
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
44
|
+
}
|
package/sksl/Mosaic.sksl
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Mosaic — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/Mosaic.glsl
|
|
2
|
+
// Author: Xaychru
|
|
3
|
+
// License: MIT
|
|
4
|
+
// Description: The view pans across a mosaic of rotated tiles from both images and settles on the incoming one
|
|
5
|
+
|
|
6
|
+
uniform shader _from;
|
|
7
|
+
uniform shader _to;
|
|
8
|
+
uniform float2 _resolution;
|
|
9
|
+
uniform float progress;
|
|
10
|
+
uniform float ratio;
|
|
11
|
+
|
|
12
|
+
vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
13
|
+
vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); }
|
|
14
|
+
|
|
15
|
+
uniform int endx;
|
|
16
|
+
uniform int endy;
|
|
17
|
+
|
|
18
|
+
float Rand(vec2 v) {
|
|
19
|
+
return fract(sin(dot(v.xy ,vec2(12.9898,78.233))) * 43758.5453);
|
|
20
|
+
}
|
|
21
|
+
vec2 Rotate(vec2 v, float a) {
|
|
22
|
+
mat2 rm = mat2(cos(a), -sin(a),
|
|
23
|
+
sin(a), cos(a));
|
|
24
|
+
return rm*v;
|
|
25
|
+
}
|
|
26
|
+
float CosInterpolation(float x) {
|
|
27
|
+
return -cos(x*3.14159265358979323)/2.+.5;
|
|
28
|
+
}
|
|
29
|
+
vec4 transition(vec2 uv) {
|
|
30
|
+
vec2 p = uv.xy / vec2(1.0).xy - .5;
|
|
31
|
+
vec2 rp = p;
|
|
32
|
+
float rpr = (progress*2.-1.);
|
|
33
|
+
float z = -(rpr*rpr*2.) + 3.;
|
|
34
|
+
float az = abs(z);
|
|
35
|
+
rp *= az;
|
|
36
|
+
rp += mix(vec2(.5, .5), vec2(float(endx) + .5, float(endy) + .5), CosInterpolation(progress)*CosInterpolation(progress));
|
|
37
|
+
vec2 mrp = mod(rp, 1.);
|
|
38
|
+
vec2 crp = rp;
|
|
39
|
+
bool onEnd = int(floor(crp.x))==endx&&int(floor(crp.y))==endy;
|
|
40
|
+
if(!onEnd) {
|
|
41
|
+
float ang = float(int(Rand(floor(crp))*4.))*.5*3.14159265358979323;
|
|
42
|
+
mrp = vec2(.5) + Rotate(mrp-vec2(.5), ang);
|
|
43
|
+
}
|
|
44
|
+
if(onEnd || Rand(floor(crp))>.5) {
|
|
45
|
+
return getToColor(mrp);
|
|
46
|
+
} else {
|
|
47
|
+
return getFromColor(mrp);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
half4 main(float2 _coord) {
|
|
52
|
+
vec2 _uv = _coord / _resolution;
|
|
53
|
+
vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0);
|
|
54
|
+
return half4(_c.rgb * _c.a, _c.a);
|
|
55
|
+
}
|