{"layers":[{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"gradient","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"description":"","compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec2 vTextureCoord;uniform vec2 uMousePos;const float PI = 3.14159265359;vec2 rotate(vec2 coord, float angle) {\nfloat s = sin(angle);\nfloat c = cos(angle);\nreturn vec2(\ncoord.x * c - coord.y * s,\ncoord.x * s + coord.y * c\n);\n}out vec4 fragColor;vec3 getBgColor(vec2 uv) {return vec3(0, 0, 0);\n}void main() {vec2 uv = vTextureCoord;\nvec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nuv -= pos;\nuv /= max(0.5000*2., 1e-5);\nuv = rotate(uv, (0.0000 - 0.5) * 2. * PI);\nvec4 color = vec4(getBgColor(uv), 1.0) * 1.0000;\nfragColor = color;\n}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = aTextureCoord;\n}"],"speed":0.25,"trackMouse":0,"trackAxes":"xy","data":{"downSample":0.5,"depth":false,"uniforms":{},"isBackground":true},"id":"ec36f9f4-96f8-43bf-bce2-0c59542f5441","publicId":"gradient"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"noiseFill","usesPingPong":false,"texture":false,"animating":true,"mouseMomentum":1,"mouseSpring":0,"isMask":0,"description":"","compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nin vec2 vTextureCoord;\nin vec3 vVertexPosition;uniform sampler2D uTexture;\nuniform float uTime;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;vec3 hash33(vec3 p3) {\np3 = fract(p3 * vec3(0.1031, 0.11369, 0.13787));\np3 += dot(p3, p3.yxz + 19.19);\nreturn -1.0 + 2.0 * fract(vec3(\n(p3.x + p3.y) * p3.z,\n(p3.x + p3.z) * p3.y,\n(p3.y + p3.z) * p3.x\n));\n}float perlin_noise(vec3 p) {\nvec3 pi = floor(p);\nvec3 pf = p - pi;vec3 w = pf * pf * (3.0 - 2.0 * pf);float n000 = dot(pf - vec3(0.0, 0.0, 0.0), hash33(pi + vec3(0.0, 0.0, 0.0)));\nfloat n100 = dot(pf - vec3(1.0, 0.0, 0.0), hash33(pi + vec3(1.0, 0.0, 0.0)));\nfloat n010 = dot(pf - vec3(0.0, 1.0, 0.0), hash33(pi + vec3(0.0, 1.0, 0.0)));\nfloat n110 = dot(pf - vec3(1.0, 1.0, 0.0), hash33(pi + vec3(1.0, 1.0, 0.0)));\nfloat n001 = dot(pf - vec3(0.0, 0.0, 1.0), hash33(pi + vec3(0.0, 0.0, 1.0)));\nfloat n101 = dot(pf - vec3(1.0, 0.0, 1.0), hash33(pi + vec3(1.0, 0.0, 1.0)));\nfloat n011 = dot(pf - vec3(0.0, 1.0, 1.0), hash33(pi + vec3(0.0, 1.0, 1.0)));\nfloat n111 = dot(pf - vec3(1.0, 1.0, 1.0), hash33(pi + vec3(1.0, 1.0, 1.0)));float nx00 = mix(n000, n100, w.x);\nfloat nx01 = mix(n001, n101, w.x);\nfloat nx10 = mix(n010, n110, w.x);\nfloat nx11 = mix(n011, n111, w.x);float nxy0 = mix(nx00, nx10, w.y);\nfloat nxy1 = mix(nx01, nx11, w.y);float nxyz = mix(nxy0, nxy1, w.z);return nxyz;\n}\nvec4 applyLayerMix(vec4 color, vec4 bg, float amount) {\ncolor.rgb = mix(bg.rgb, color.rgb, amount);\ncolor.a = max(bg.a, amount);\nreturn color;\n}\nuvec2 pcg2d(uvec2 v) {\nv = v * 1664525u + 1013904223u;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nv ^= v >> 16;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nreturn v;\n}float randFibo(vec2 p) {\nuvec2 v = floatBitsToUint(p);\nv = pcg2d(v);\nuint r = v.x ^ v.y;\nreturn float(r) / float(0xffffffffu);\n}\nfloat deband() {\nreturn (randFibo(gl_FragCoord.xy) - 0.5) / 255.0;\n}out vec4 fragColor;const float PI = 3.14159265359;\nconst float TAU = 6.28318530718;vec3 getNoiseColor(float t, vec3 col1, vec3 col2, float chroma) {\nvec3 mid = 0.5 * (col1 + col2);\nvec3 axisAmp = 0.5 * (col2 - col1);vec3 base = mid + axisAmp * cos(TAU * t);vec3 axis = length(axisAmp) > 0.0001 ? normalize(axisAmp) : vec3(1.0, 0.0, 0.0);\nvec3 ref = abs(axis.x) > 0.9 ? vec3(0.0, 1.0, 0.0) : vec3(1.0, 0.0, 0.0);\nvec3 tangent1 = normalize(cross(axis, ref));\nvec3 tangent2 = normalize(cross(axis, tangent1));float richness = 0.24 * length(axisAmp) + 0.02;\nvec3 ripple =\ntangent1 * sin(TAU * (t * 2.0 + 0.123)) +\ntangent2 * sin(TAU * (t * 2.0 + 0.437));vec3 col = base + (richness * chroma) * ripple;\ncol = clamp(col, -10.0, 10.0);\ncol = 1./(1. + exp(-col * 4. + 0.25) * 7.5);\nreturn clamp(col, 0.0, 1.0);\n}mat2 rot(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}float getPerlinNoise(vec2 uv, float turbulence, float direction, float driftVal, float time, float scale, float phase) {\nfloat turb = turbulence * 3.2;\nvec2 skew = vec2(direction, 1. - direction);\nvec2 d = vec2(0, driftVal * time * 0.0125) * mix(1., 14., scale);\nfloat noise = perlin_noise(vec3(\nuv * skew - d,\nphase + time * 0.03\n));return mix(0.5, noise * 0.5 + 0.5, turb);\n}float getNoise(vec2 uv, float turbulence, float driftVal, float time, float scale, float direction, float phase) {\nreturn getPerlinNoise(uv, turbulence, direction, driftVal, time, scale, phase);\n}void main() {\nvec2 uv = vTextureCoord;\nfloat aspectRatio = uResolution.x/uResolution.y;\nvec2 aspect = vec2(aspectRatio, 1.0);vec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);vec2 pos = mix(vec2(0.5, 0.5), mPos, 0.0000);\nfloat scale = mix(1., 14., 0.2500);\nvec2 drift = vec2(0, 0.0000 * uTime * 0.0125);\nmat2 rotation = rot(0.0000 * 2. * PI);vec2 st = (uv - pos) * aspect * scale * rotation;\nfloat noise = getNoise(st, 0.4000, 0.0000, uTime, 0.2500, 0.5000, 0.8000);vec2 toMouse = (uv - uMousePos) * aspect;\nfloat r = length(toMouse);\nfloat radius = mix(0.1, 1., 0.5000);\nfloat falloff = 1.0 - smoothstep(0.0, radius, r);\nvec2 dir = toMouse / max(r, 1e-5);\nvec2 uvBulgeOffsetAspect = -dir * (0.4300 * radius) * falloff * falloff;\nvec2 offset = uvBulgeOffsetAspect / aspect * r * 5.;\nst = (uv - pos + offset * noise) * aspect * scale * rotation;\nnoise = getNoise(st, 0.4000, 0.0000, uTime, 0.2500, 0.5000, 0.8000);\nnoise = smoothstep(noise - 0.5, noise + 0.5, 0.7900);\nvec4 color = texture(uTexture, uv);\nvec4 bg = color;\nfloat shift = 0.0000 + (0.0000 * uTime * 0.01);\nvec3 noiseColor = getNoiseColor(noise + shift, vec3(0.8705882352941177, 0.9725490196078431, 0.4627450980392157), vec3(0, 0, 0), 0.1000);\ncolor.rgb = noiseColor.rgb;float dither = deband();\ncolor.rgb += dither * 0.5;color = applyLayerMix(clamp(color, 0.0, 1.0), bg, 1.0000);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"speed":0.16,"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"9e97f669-1227-47cd-bb59-9be3cc46405c","publicId":"noise_fill"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"flowField","usesPingPong":false,"texture":false,"animating":true,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"description":"","compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform float uTime;uniform vec2 uMousePos;\nuniform vec2 uResolution;float ease (int easingFunc, float t) {\nreturn t;\n}vec3 hash33(vec3 p3) {\np3 = fract(p3 * vec3(0.1031, 0.11369, 0.13787));\np3 += dot(p3, p3.yxz + 19.19);\nreturn -1.0 + 2.0 * fract(vec3(\n(p3.x + p3.y) * p3.z,\n(p3.x + p3.z) * p3.y,\n(p3.y + p3.z) * p3.x\n));\n}float perlin_noise(vec3 p) {\nvec3 pi = floor(p);\nvec3 pf = p - pi;vec3 w = pf * pf * (3.0 - 2.0 * pf);float n000 = dot(pf - vec3(0.0, 0.0, 0.0), hash33(pi + vec3(0.0, 0.0, 0.0)));\nfloat n100 = dot(pf - vec3(1.0, 0.0, 0.0), hash33(pi + vec3(1.0, 0.0, 0.0)));\nfloat n010 = dot(pf - vec3(0.0, 1.0, 0.0), hash33(pi + vec3(0.0, 1.0, 0.0)));\nfloat n110 = dot(pf - vec3(1.0, 1.0, 0.0), hash33(pi + vec3(1.0, 1.0, 0.0)));\nfloat n001 = dot(pf - vec3(0.0, 0.0, 1.0), hash33(pi + vec3(0.0, 0.0, 1.0)));\nfloat n101 = dot(pf - vec3(1.0, 0.0, 1.0), hash33(pi + vec3(1.0, 0.0, 1.0)));\nfloat n011 = dot(pf - vec3(0.0, 1.0, 1.0), hash33(pi + vec3(0.0, 1.0, 1.0)));\nfloat n111 = dot(pf - vec3(1.0, 1.0, 1.0), hash33(pi + vec3(1.0, 1.0, 1.0)));float nx00 = mix(n000, n100, w.x);\nfloat nx01 = mix(n001, n101, w.x);\nfloat nx10 = mix(n010, n110, w.x);\nfloat nx11 = mix(n011, n111, w.x);float nxy0 = mix(nx00, nx10, w.y);\nfloat nxy1 = mix(nx01, nx11, w.y);float nxyz = mix(nxy0, nxy1, w.z);return nxyz;\n}const int MAX_ITERATIONS = 8;\nconst float PI = 3.14159265359;vec2 distortUV(vec2 uv) {\nvec2 st = uv;\nfloat aspectRatio = uResolution.x / max(uResolution.y, 0.001);\nvec2 aspectVec = vec2(aspectRatio, 1.);vec2 mPos = vec2(0.5786025067144136, 0.28084153983885407) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nfloat mixRadiusStep = step(1.0, 0.7500);\nvec2 pos = mix(vec2(0.5786025067144136, 0.28084153983885407), mPos, mixRadiusStep);\nfloat dist = ease(0, max(0.,1. - length(st * aspectVec - mPos * aspectVec) * 4. * (1. - 0.7500)));float sprd = (0.2000 + 0.01) / ((aspectRatio + 1.) / 2.);\nfloat amt = (1.0000 * 2.0) * 0.01 * dist;\nif(amt <= 0.) {\nreturn st;\n}vec2 invPos = 1. - pos;\nfloat freq = 5. * sprd;\nfloat t = 0.9000 * 5. + uTime * 0.0166;\nfloat degrees = 360. * (0.6210 * 6.);\nfloat rad = degrees * PI / 180.;for (int i = 0; i < MAX_ITERATIONS; i++) {\nvec2 clampedSt = clamp(st, -1., 2.);\nvec2 scaled = (clampedSt - 0.5) * aspectVec + invPos;\nfloat perlin = perlin_noise(vec3((scaled - 0.5) * freq, t)) - 0.5;\nfloat ang = perlin * rad;\nst += vec2(cos(ang), sin(ang)) * amt;\n}return mix(uv, clamp(st, 0., 1.), 1.0000);\n}out vec4 fragColor;void main() {\nvec2 uv = vTextureCoord;\nuv = distortUV(uv);\nvec4 color = texture(uTexture, uv);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"speed":0.13,"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"1b91758d-12c2-44ff-ab18-bd0c53ab1bb9","publicId":"flow_field"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"liquify","usesPingPong":false,"texture":false,"animating":true,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"description":"","compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform float uTime;\nuniform sampler2D uTexture;uniform vec2 uMousePos;\nuniform vec2 uResolution;float ease (int easingFunc, float t) {\nreturn t;\n}const float PI = 3.14159265359;mat2 rot(float a) {\nreturn mat2(cos(a), -sin(a), sin(a), cos(a));\n}vec2 liquify(vec2 st, float dist) {\nfloat aspectRatio = uResolution.x / uResolution.y;\nvec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos - 0.5), 0.0000);\nvec2 drift = vec2(0, 0.5000 * uTime * 0.0125) * rot(0.7857 * -2. * PI);pos += drift;\nvec2 skew = mix(vec2(1), vec2(1, 0), 0.0000);\nst -= pos;\nst.x *= aspectRatio;\nst = st * rot(0.7857 * 2. * PI);\nst *= skew;\nfloat freq = (5.0 * (0.5000 + 0.1));\nfloat t = uTime * 0.025;float amplitude = 0.3000 * mix(0.2, 0.2/(0.5000 + 0.05), 0.25) * dist;for (float i = 1.0; i <= 5.0; i++) {\nst = st * rot(i / 5. * PI * 2.);\nfloat ff = i * freq;\nst.x += amplitude * cos(ff * st.y + t);\nst.y += amplitude * sin(ff * st.x + t);\n}st /= skew;st = st * rot(0.7857 * -2. * PI);\nst.x /= aspectRatio;\nst += pos;return st;\n}vec2 caLiquifiedUV;\nvec2 caOriginalUV;out vec4 fragColor;vec2 distortUV(vec2 uv) {\nfloat aspectRatio = uResolution.x / uResolution.y;\nvec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos - 0.5), 0.0000);\nfloat dist = ease(0, max(0., 1. - distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.0000)));if (dist <= 0.001) return uv;\nif (0.3000 <= 0.001) return uv;\nif (0.3000 <= 0.001) return uv;vec2 liquifiedUV = liquify(uv, dist);\ncaLiquifiedUV = liquifiedUV;\ncaOriginalUV = uv;\nreturn mix(uv, liquifiedUV, 0.3000);\n}void main() {\nvec2 uv = vTextureCoord;\nvec2 distortedUV = distortUV(uv);\nvec4 color = texture(uTexture, distortedUV);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"speed":0.15,"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"3d21b201-d7b2-4a8b-a360-db294cbb4938","publicId":"liquify"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"coloration","usesPingPong":false,"texture":false,"parentLayer":"2f944c15-9936-4bcd-9b58-13bde2e95bc9","animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":1,"description":"","compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;uniform sampler2D uMaskTexture;\nuniform vec2 uMousePos;vec3 getFilteredColor(vec3 color) {\nreturn color;\n}float hueToRgb(float p, float q, float t) {\nif (t < 0.0) t += 1.0;\nif (t > 1.0) t -= 1.0;\nif (t < 1.0 / 6.0) return p + (q - p) * 6.0 * t;\nif (t < 1.0 / 2.0) return q;\nif (t < 2.0 / 3.0) return p + (q - p) * (2.0 / 3.0 - t) * 6.0;\nreturn p;\n}vec3 hslToRgb(vec3 hsl) {\nfloat h = hsl.x;\nfloat s = hsl.y;\nfloat l = hsl.z;\nvec3 rgb = vec3(l);\nif (s != 0.0) {\nfloat q = l < 0.5 ? l * (1.0 + s) : l + s - l * s;\nfloat p = 2.0 * l - q;\nrgb.r = hueToRgb(p, q, h + 1.0 / 3.0);\nrgb.g = hueToRgb(p, q, h);\nrgb.b = hueToRgb(p, q, h - 1.0 / 3.0);\n}\nreturn rgb;\n}vec3 rgbToHsl(vec3 rgb) {\nfloat max = max(max(rgb.r, rgb.g), rgb.b);\nfloat min = min(min(rgb.r, rgb.g), rgb.b);\nfloat h, s, l = (max + min) / 2.0;if (max == min) {\nh = s = 0.0;\n} else {\nfloat d = max - min;\ns = l > 0.5 ? d / (2.0 - max - min) : d / (max + min);\nif (max == rgb.r) {\nh = (rgb.g - rgb.b) / d + (rgb.g < rgb.b ? 6.0 : 0.0);\n} else if (max == rgb.g) {\nh = (rgb.b - rgb.r) / d + 2.0;\n} else if (max == rgb.b) {\nh = (rgb.r - rgb.g) / d + 4.0;\n}\nh /= 6.0;\n}return vec3(h, s, l);\n}out vec4 fragColor;void main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);if(color.a <= 0.001) {\nfragColor = vec4(0);\nreturn;\n}color.rgb = rgbToHsl(color.rgb);\ncolor.x = fract(color.x + 1.0000);\ncolor.y = clamp(color.y * 0.9500, 0.0, 1.0);\ncolor.z = clamp(color.z + -0.3000, 0.0, 1.0);\ncolor.rgb = hslToRgb(color.rgb);\ncolor.rgb = getFilteredColor(color.rgb);color.rgb = 1.0000 * (color.rgb - 0.5) + 0.5;color.r = clamp(color.r + 0.0000, 0.0, 1.0);\ncolor.b = clamp(color.b - 0.0000, 0.0, 1.0);color.g = clamp(color.g - 0.0000, 0.0, 1.0);\ncolor.r = clamp(color.r + 0.0000 * 0.5, 0.0, 1.0);\ncolor.b = clamp(color.b + 0.0000 * 0.5, 0.0, 1.0);color = vec4(clamp(color.rgb, 0.0, 1.0), color.a);\nvec2 maskPos = mix(vec2(0), (uMousePos - 0.5), 0.0000);\nvec4 maskColor = texture(uMaskTexture, vTextureCoord - maskPos);\ncolor = color * (maskColor.a * maskColor.a);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"data":{"depth":false,"uniforms":{},"isBackground":false},"id":"c0d6d014-1e1c-493b-8758-0220036d799a","publicId":"adjust"},{"breakpoints":[],"aspectRatio":1.6,"userDownsample":1,"states":{"appear":[],"scroll":[],"hover":[],"mousemove":[]},"effects":["2f944c15-9936-4bcd-9b58-13bde2e95bc9","826960ff-2dc3-439e-b79f-63b9c5e9b165"],"anchorPoint":0,"blendMode":"ADD","mask":0,"maskInvert":0,"maskDepth":0,"maskDepthLayer":0,"layerType":"shape","width":200,"widthMode":1,"height":200,"heightMode":1,"left":0.2538125,"top":0.40405555555555556,"compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec2 vTextureCoord;\nin vec3 vVertexPosition;uniform vec2 uArtboardResolution;uniform vec2 uMousePos;const float TAU = 6.28318530718;\nconst float PI = 3.14159265359;out vec4 fragColor;vec2 rotate2D(vec2 p, float angle) {\nfloat s = sin(angle);\nfloat c = cos(angle);\nreturn vec2(p.x * c - p.y * s, p.x * s + p.y * c);\n}vec2 getAnchorOffsets() {\nreturn vec2(0.0, 0.0);\n}vec3 getFillColor(vec2 localPos, vec2 elementSize, float signedDist, float maxInset) {\nvec2 halfSize = elementSize * 0.5;\nvec2 p = localPos - halfSize;return vec3(0.4666666666666667, 0.4666666666666667, 0.4666666666666667);\n}float sdBox(vec2 p, vec2 b) {\nvec2 d = abs(p) - b;\nreturn length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);\n}float sdShape(vec2 canvasPosPx, vec2 elementPosPx, vec2 elementSizePx, float rotationTurns) {\nvec2 p = vec2(0.0);\nvec2 halfSize = vec2(0.0);halfSize = uArtboardResolution * 0.5;\np = canvasPosPx - halfSize;\nreturn sdBox(p, halfSize);elementSizePx = abs(elementSizePx);vec2 centerPx = elementPosPx + elementSizePx * 0.5;\nvec2 rel = canvasPosPx - centerPx;\nvec2 local = rotate2D(rel, -rotationTurns * TAU) + elementSizePx * 0.5;\np = local - elementSizePx * 0.5;\nhalfSize = elementSizePx * 0.5;\nreturn sdBox(p, halfSize);\n}vec4 sampleShape(vec2 canvasUV) {\nvec2 canvasPosPx = vec2(canvasUV.x * uArtboardResolution.x, (1.0 - canvasUV.y) * uArtboardResolution.y);float absWidth = 200.0000;\nfloat absHeight = 200.0000;\nvec2 elementSizePx = vec2(absWidth, absHeight);\nvec2 elementPosPx = vec2(0.2538, 0.4041) * uArtboardResolution - getAnchorOffsets() * elementSizePx;float dist = sdShape(canvasPosPx, elementPosPx, elementSizePx, 0.0000);\nfloat aa = max(length(vec2(dFdx(dist), dFdy(dist))), 0.75);\nfloat uvGrad = max(length(dFdx(canvasUV)), length(dFdy(canvasUV)));\nfloat seamFactor = smoothstep(0.01, 0.03, uvGrad);\naa = mix(aa, 0.75, seamFactor);float fillAlpha = 1.0 - smoothstep(mix(0.0, -150., 0.0000), mix(aa, 150., 0.0000), dist);\nfillAlpha = mix(fillAlpha, step(dist, 0.0), seamFactor);\nvec2 localPos;\nlocalPos = canvasPosPx;\nvec2 localSize;\nlocalSize = uArtboardResolution;vec2 centerPx;\ncenterPx = uArtboardResolution * 0.5;\nfloat centerDist = sdShape(centerPx, elementPosPx, elementSizePx, 0.0000);\nfloat maxInset = max(-centerDist, 0.00001);vec3 fillRgb = getFillColor(localPos, localSize, dist, maxInset);float finalFillAlpha = fillAlpha * 1.0000;\nvec4 fill = vec4(fillRgb * finalFillAlpha, finalFillAlpha);float strokeAlpha = 0.0;\nvec4 stroke = vec4(vec3(0, 0, 0) * strokeAlpha, strokeAlpha);\nvec4 col = stroke + fill * (1.0 - stroke.a);\nreturn col;\n}vec4 getSourceOutput(vec2 uv) {\nreturn sampleShape(uv);\n}void main() {\nvec2 uv = vTextureCoord;\nvec2 pos = (uMousePos - 0.5) * 0.0000;uv -= pos;fragColor = getSourceOutput(uv);\n}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform vec2 uMousePos;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\nfloat angleX = uMousePos.y * 0.5 - 0.25;\nfloat angleY = (1.-uMousePos.x) * 0.5 - 0.25;mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0,\n0.0, cos(angleX), -sin(angleX), 0.0,\n0.0, sin(angleX), cos(angleX), 0.0,\n0.0, 0.0, 0.0, 1.0);\nmat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0,\n0.0, 1.0, 0.0, 0.0,\n-sin(angleY), 0.0, cos(angleY), 0.0,\n0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY;\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz;\nvTextureCoord = (vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"data":{"uniforms":{"artboardResolution":{"name":"uArtboardResolution","type":"2f","value":{"type":"Vec2","_x":1680,"_y":928}},"aspectRatio":{"name":"uAspectRatio","type":"1f","value":1.6}},"elementOpacity":1,"compositeShader":{"fragmentShader":"#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nin vec2 vTextureCoord;\nin vec3 vVertexPosition;uniform sampler2D uBgTexture;\nuniform sampler2D uTexture;vec3 blend (int blendMode, vec3 src, vec3 dst) {\nreturn src + dst;\n}const float PI = 3.14159265359;out vec4 fragColor;vec4 getNormalOutput(vec4 color, vec4 background) {\nvec3 unpremultColor = color.rgb / max(color.a, 0.0001);\nvec3 blendedColor = blend(1, unpremultColor, background.rgb);\ncolor = vec4(blendedColor, 1.0) * (color.a * 1.0000);\ncolor = color + background * (1.0 - color.a);\nreturn color;\nreturn mix(background, color + background * (1.0 - color.a), 1.0000);\n}vec4 getOutputByMode(vec4 color, vec4 background) {\nreturn getNormalOutput(color, background);\n}void main() {\nvec2 uv = vTextureCoord;\nvec2 pos = vec2(0);uv -= pos;vec4 background = vec4(0);background = texture(uBgTexture, vTextureCoord);\nvec4 color = texture(uTexture, uv);vec4 col = getOutputByMode(color, background);fragColor = col;\n}","vertexShader":"#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;\nuniform vec2 uMousePos;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\nfloat angleX = uMousePos.y * 0.5 - 0.25;\nfloat angleY = (1.-uMousePos.x) * 0.5 - 0.25;mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0,\n0.0, cos(angleX), -sin(angleX), 0.0,\n0.0, sin(angleX), cos(angleX), 0.0,\n0.0, 0.0, 0.0, 1.0);\nmat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0,\n0.0, 1.0, 0.0, 0.0,\n-sin(angleY), 0.0, cos(angleY), 0.0,\n0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY;\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz;\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"},"compositeUniforms":{"resolution":{"name":"uResolution","type":"2f","value":{"type":"Vec2","_x":1080,"_y":1080}},"opacity":{"name":"uOpacity","type":"1f","value":1},"mousePos":{"name":"uMousePos","type":"2f","value":{"type":"Vec2","_x":0.5,"_y":0.5}}}},"id":"2e9e7492-be68-4655-a7e8-0f97ca278351","publicId":"shape"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"glyphDither","usesPingPong":false,"texture":{"src":"assets/glyph-lines.png","sampler":"uSprite"},"parentLayer":"826960ff-2dc3-439e-b79f-63b9c5e9b165","animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"description":"","compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec3 vVertexPosition;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform sampler2D uSprite;uniform vec2 uMousePos;\nuniform vec2 uResolution;vec4 applyLayerMixAlpha(vec4 color, vec4 bg, float amount) {\nreturn mix(bg, color, amount);\n}out vec4 fragColor;const vec3 LUMA = vec3(0.2126, 0.7152, 0.0722);float getLuminance(vec3 color) {\nreturn dot(color, LUMA);\n}float getGridSize() {\nreturn mix(0.05, 0.005, 0.6800);\n}vec2 getCellSize(float gridSize, float aspectRatio, float aspectCorrection) {\nfloat baseGrid = 1.0 / gridSize;\nreturn vec2(1.0 / (baseGrid * aspectRatio), 1.0 / baseGrid) * aspectCorrection;\n}vec2 getPixelatedCoord(vec2 uv, vec2 pos, vec2 cellSize) {\nvec2 offsetUv = uv - pos;\nvec2 cell = floor(offsetUv / cellSize);\nvec2 cellCenter = (cell + 0.5) * cellSize;\nreturn cellCenter + pos;\n}ivec2 getGlyphTextureSize() {\nivec2 glyphTextureSize = textureSize(uSprite, 0);return glyphTextureSize;\n}float getGlyphHeight(ivec2 glyphTextureSize) {\nreturn float(glyphTextureSize.y);\n}float getGlyphCount(ivec2 glyphTextureSize) {\nfloat glyphHeight = getGlyphHeight(glyphTextureSize);\nreturn max(1.0, float(glyphTextureSize.x) / glyphHeight);\n}float getGlyphSelection(float luminance, float glyphCount) {\nreturn clamp(floor(luminance * glyphCount), 0.0, glyphCount - 1.0);\n}float getPhasedGlyphSelection(float luminance, float glyphCount, float gamma) {\nfloat glyphSelection = clamp(floor(luminance * glyphCount * gamma), 0.0, glyphCount - 1.0);\nfloat phaseOffset = floor(0.0000 * glyphCount + 0.5);\nreturn mod(glyphSelection + phaseOffset, glyphCount);\n}vec2 getGlyphSheetUv(vec2 uv, vec2 pos, float aspectRatio, float aspectCorrection, float gridSize, float glyphHeight, float glyphSelection, float glyphCount) {\nfloat normalizedSpriteSizeX = 1.0 / glyphCount;\nfloat normalizedSpriteSizeY = 1.0;\nvec2 spriteSize = vec2(glyphHeight / aspectRatio, glyphHeight) * (gridSize / glyphHeight) * aspectCorrection;\nvec2 localOffset = mod(uv - pos, spriteSize) / spriteSize;\nfloat inset = 0.5 / glyphHeight;\nlocalOffset = clamp(localOffset, inset, 1.0 - inset);return vec2(\nglyphSelection * normalizedSpriteSizeX + localOffset.x * normalizedSpriteSizeX,\nlocalOffset.y * normalizedSpriteSizeY\n);\n}vec4 sampleGlyphColor(vec2 glyphUv) {\nvec4 glyphColor = vec4(0.0);glyphColor = texture(uSprite, glyphUv);return glyphColor;\n}vec4 sampleFilteredGlyphColor(vec2 glyphUv, vec2 cellSize, float glyphSelection, float glyphCount, float glyphHeight) {\nvec2 cellPixels = max(cellSize * uResolution, vec2(1.0));\nfloat minCellPixels = min(cellPixels.x, cellPixels.y);vec2 tileScale = vec2(1.0 / glyphCount, 1.0);\nvec2 sampleOffset = 0.25 * tileScale / cellPixels;\nfloat inset = 0.5 / glyphHeight;\nvec2 tileMin = vec2((glyphSelection + inset) / glyphCount, inset);\nvec2 tileMax = vec2((glyphSelection + 1.0 - inset) / glyphCount, 1.0 - inset);\nvec4 filteredColor = (\nsampleGlyphColor(clamp(glyphUv + vec2(-sampleOffset.x, -sampleOffset.y), tileMin, tileMax)) +\nsampleGlyphColor(clamp(glyphUv + vec2( sampleOffset.x, -sampleOffset.y), tileMin, tileMax)) +\nsampleGlyphColor(clamp(glyphUv + vec2(-sampleOffset.x, sampleOffset.y), tileMin, tileMax)) +\nsampleGlyphColor(clamp(glyphUv + vec2( sampleOffset.x, sampleOffset.y), tileMin, tileMax))\n) * 0.25;if(minCellPixels <= 6.0) {\nreturn filteredColor;\n}\nreturn mix(filteredColor, sampleGlyphColor(glyphUv), smoothstep(6.0, 10.0, minCellPixels));\n}void main() {\nvec2 uv = vTextureCoord;\nvec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nfloat aspectRatio = uResolution.x / uResolution.y;\nfloat aspectCorrection = mix(aspectRatio, 1./aspectRatio, 0.5);\nfloat gridSize = getGridSize();\nvec2 cellSize = getCellSize(gridSize, aspectRatio, aspectCorrection);\nvec2 pixelatedCoord = getPixelatedCoord(uv, pos, cellSize);\nvec4 bg = texture(uTexture, vTextureCoord);\nvec4 color = texture(uTexture, pixelatedCoord);float luminance = getLuminance(color.rgb);\nluminance = mix(luminance, 1.0 - luminance, float(0));\nfloat gamma = pow(mix(0.2, 2.2, 0.6500), 2.2);\nivec2 glyphTextureSize = getGlyphTextureSize();\nfloat glyphHeight = getGlyphHeight(glyphTextureSize);\nfloat glyphCount = getGlyphCount(glyphTextureSize);\nfloat glyphSelection = getGlyphSelection(luminance, glyphCount);\nfloat phasedGlyphSelection = getPhasedGlyphSelection(luminance, glyphCount, gamma);\nvec2 spriteSheetUV = getGlyphSheetUv(uv, pos, aspectRatio, aspectCorrection, gridSize, glyphHeight, phasedGlyphSelection, glyphCount);\nvec4 spriteColor = sampleFilteredGlyphColor(spriteSheetUV, cellSize, phasedGlyphSelection, glyphCount, glyphHeight);\nfloat minCellPixels = min(cellSize.x * uResolution.x, cellSize.y * uResolution.y);\nfloat alpha = mix(spriteColor.r, smoothstep(0.0, 1.0, spriteColor.r), smoothstep(6.0, 10.0, minCellPixels));vec3 cc = (color.rgb - glyphSelection * 0.04) * 1.4;\nvec3 col = cc;\ncol = vec3(0.396078431372549, 0.4392156862745098, 0.9882352941176471);vec3 result = mix(mix(vec3(0.0), vec3(1.0), float(0)), col, alpha);\ncolor.rgb = result;\ncolor = applyLayerMixAlpha(color, bg, 0.3800);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false,"texture":{"sampler":"uSprite","name":"Preset glyphs","src":"assets/glyph-lines.png"}},"id":"89e1cc6f-00cf-4650-bbf2-095ad2dcb2b4","publicId":"glyph_dither"}],"options":{"name":"Frosty Gradient (Remix)","fps":60,"dpi":1.5,"scale":1,"includeLogo":false,"isProduction":false,"flatten":false,"freePlan":false,"width":1680,"height":928},"version":"2.2.8","id":"QQrxGCQl2ZdVF0IVRdry","designName":"Frosty Gradient (Remix)","designId":"WE7DwFsGgU3hWBee2jUl","canvasId":"3984cebf-e3d6-4ded-98c8-ef578ffdcf1e","projectName":"Frosty Gradient (Remix)","sceneName":"Frosty Gradient"}