// AdvancedMosaic — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/AdvancedMosaic.glsl // Author: Sergey Kosarevsky // License: MIT // Description: Both images break into large blocks that blend, then sharpen into the incoming image uniform shader _from; uniform shader _to; uniform float2 _resolution; uniform float progress; uniform float ratio; vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); } vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); } uniform float pixelSize; vec4 transition(vec2 uv) { float T = progress; float half_ = 0.5; float size = (T < half_) ? mix(1.0, pixelSize, T / half_) : mix(pixelSize, 1.0, (T - half_) / half_); float D = size * 0.005; vec2 UV = (uv - 0.5) / D; vec2 coord = clamp(D * (ceil(UV - 0.5)) + 0.5, 0.0, 1.0); vec4 C0 = getFromColor(coord); vec4 C1 = getToColor(coord); return mix(C0, C1, T); } half4 main(float2 _coord) { vec2 _uv = _coord / _resolution; vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0); return half4(_c.rgb * _c.a, _c.a); }