{"history":[{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"gradient","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\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.08235294117647059, 0.08235294117647059, 0.08235294117647059);\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.0000);\nfragColor = color;\n}"],"compiledVertexShaders":["#version 300 es\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":1,"trackMouse":0,"trackAxes":"xy","data":{"downSample":0.5,"depth":false,"uniforms":{},"isBackground":true},"id":"gradient"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"video","usesPingPong":false,"texture":{"src":"https://firebasestorage.googleapis.com/v0/b/unicorn-studio.appspot.com/o/ldoKRzHepkRj9icRCErLhMwqpIi1%2Fmiaselida-cta-area_%40thumbnail.jpg?alt=media&token=26e718c0-ffa3-41d5-b3a6-362e238a3b45","sampler":"uThumbnail"},"animating":true,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision highp float;in vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform sampler2D uThumbnail;\nuniform sampler2D uVideoTexture;uniform vec2 uMousePos;\nuniform vec2 uResolution;vec4 applyLayerMix(vec4 color, vec4 bg, float amount) {\ncolor.rgb = mix(bg.rgb, color.rgb, amount);\ncolor.a = max(bg.a, amount);\nreturn color;\n}out vec4 fragColor;const float PI = 3.14159265359;\nmat2 rot(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}vec4 applyAdjustments(vec4 color) {color.rgb = clamp(color.rgb, 0.0, 1.0);\nreturn color;\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 bg = texture(uTexture, uv);ivec2 videoTexSize = textureSize(uVideoTexture, 0);\nbool videoReady = videoTexSize.x > 16 && videoTexSize.y > 16;\nivec2 texSize = videoReady ? videoTexSize : textureSize(uThumbnail, 0);\nfloat texWidth = float(texSize.x);\nfloat texHeight = float(texSize.y);\nfloat videoAspect = texWidth / max(texHeight, 0.0001);float screenAspect = (uResolution.x / uResolution.y);\nvec2 centeredUV = uv;vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.1000);\ncenteredUV = centeredUV - pos;\ncenteredUV.x *= screenAspect;\ncenteredUV = (centeredUV) / 1.0000;\ncenteredUV = centeredUV * rot(0.0000 * 2.0 * PI);\ncenteredUV.x /= videoAspect;\ncenteredUV += 0.5;\ncenteredUV += (bg.rg * 2.0 - 1.0) * 0.0000;\nif(centeredUV.x < 0.0 || centeredUV.x > 1.0 || centeredUV.y < 0.0 || centeredUV.y > 1.0) {\nfragColor = bg;\nreturn;\n}vec4 color;\nif (videoReady) {\ncolor = texture(uVideoTexture, centeredUV);\n} else {\ncolor = texture(uThumbnail, centeredUV);\n}\ncolor.rgb = color.rgb / max(color.a, 0.0001);\ncolor = applyAdjustments(color);float videoAlpha = color.a * 1.0000;\ncolor = applyLayerMix(color, bg, videoAlpha);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\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}"],"src":"https://firebasestorage.googleapis.com/v0/b/unicorn-studio.appspot.com/o/ldoKRzHepkRj9icRCErLhMwqpIi1%2Fmiaselida-cta-area.webm?alt=media&token=4f45d84b-3d4d-4161-9509-95d762a351e5","playbackRate":1,"loop":true,"trackMouse":0.1,"trackAxes":"x","data":{"depth":false,"uniforms":{},"isBackground":false,"texture":{"src":"","sampler":"uThumbnail"}},"id":"video"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"pixelate2","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision highp float;in vec3 vVertexPosition;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;out vec4 fragColor;vec2 distortUV(vec2 uv) {\nvec2 pos = vec2(0.5, 0.5) + mix(vec2(0.0), (uMousePos - 0.5), 0.0000);\nfloat aspectRatio = uResolution.x / uResolution.y;\nfloat gridSize = (0.0400 + 0.01) * 0.083;\nfloat baseGrid = 1.0 / gridSize;\nvec2 cellSize = vec2(1.0 / (baseGrid * aspectRatio), 1.0 / baseGrid) * mix(aspectRatio, 1.0 / aspectRatio, 0.5);\nvec2 offsetUv = uv - pos;\nvec2 cell = floor(offsetUv / cellSize);\nvec2 cellCenter = (cell + 0.5) * cellSize;\nvec2 pixelatedCoord = cellCenter + pos;return vec2(\nmix(uv.x, pixelatedCoord.x, vec2(1, 1).x),\nmix(uv.y, pixelatedCoord.y, vec2(1, 1).y)\n);\n}void main() {\nvec2 uv = distortUV(vTextureCoord);\nvec4 color = texture(uTexture, uv);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\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},"id":"pixelate"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"bloom","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;out vec4 fragColor;float luma(vec4 color) {\nreturn dot(color.rgb, vec3(0.299, 0.587, 0.114));\n}vec4 thresholdPass(vec4 color) {\ncolor.rgb = pow(color.rgb, vec3(1.0/2.2));\ncolor.rgb = 1.2 * (color.rgb - 0.5) + 0.5;\nvec4 bloom = color * smoothstep(0.8700 - 0.1, 0.8700, luma(color));\nreturn vec4(bloom.rgb, color.a);\n}vec4 getColor(vec4 color) {\nreturn thresholdPass(color);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);\nfragColor = getColor(color);\n}","#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;uniform vec2 uResolution;out vec4 fragColor;float getExponentialWeight(int index) {\nswitch(index) {\ncase 0: return 1.0000000000;\ncase 1: return 0.7165313106;\ncase 2: return 0.5134171190;\ncase 3: return 0.3678794412;\ncase 4: return 0.2636050919;\ncase 5: return 0.1888756057;\ncase 6: return 0.1353352832;\ncase 7: return 0.0969670595;\ncase 8: return 0.0694877157;\ndefault: return 0.0;\n}\n}vec4 blur(vec2 uv, bool vertical, float radius, bool diamond) {\nvec4 color = vec4(0.0);\nfloat total_weight = 0.0;\nfloat aspectRatio = uResolution.x/uResolution.y;vec2 dir;\nif (diamond) {\ndir = vertical ? vec2(1, 1) : vec2(1, -1);\n} else {\ndir = vertical ? vec2(0, 1) : vec2(1, 0);\n}\ndir *= vec2(0.5000, 1. - 0.5000);\ndir.x /= aspectRatio;\nvec4 center = texture(uTexture, uv);\nfloat center_weight = getExponentialWeight(0);\ncolor += center * center_weight;\ntotal_weight += center_weight;radius *= 0.5100;\nfor (int i = 1; i <= 8; i++) {\nfloat weight = getExponentialWeight(i);\nfloat offset = mix(0.015, 0.025, radius) * float(i)/8.;\nvec4 sample1 = texture(uTexture, uv + offset * dir);\nvec4 sample2 = texture(uTexture, uv - offset * dir);\ncolor += (sample1 + sample2) * weight;\ntotal_weight += 2.0 * weight;\n}return color / total_weight;\n}vec4 blurPass(vec2 uv, bool vertical, float radius, float intensity, bool diamond) {\nreturn blur(uv, vertical, radius, diamond);\n}vec4 getColor(vec4 color) {\nreturn blurPass(vTextureCoord, false, 30., 1.25, true);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);\nfragColor = getColor(color);\n}","#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform sampler2D uBgTexture;uniform vec2 uResolution;out vec4 fragColor;float luma(vec4 color) {\nreturn dot(color.rgb, vec3(0.299, 0.587, 0.114));\n}float getExponentialWeight(int index) {\nswitch(index) {\ncase 0: return 1.0000000000;\ncase 1: return 0.7165313106;\ncase 2: return 0.5134171190;\ncase 3: return 0.3678794412;\ncase 4: return 0.2636050919;\ncase 5: return 0.1888756057;\ncase 6: return 0.1353352832;\ncase 7: return 0.0969670595;\ncase 8: return 0.0694877157;\ndefault: return 0.0;\n}\n}vec4 blur(vec2 uv, bool vertical, float radius, bool diamond) {\nvec4 color = vec4(0.0);\nfloat total_weight = 0.0;\nfloat aspectRatio = uResolution.x/uResolution.y;vec2 dir;\nif (diamond) {\ndir = vertical ? vec2(1, 1) : vec2(1, -1);\n} else {\ndir = vertical ? vec2(0, 1) : vec2(1, 0);\n}\ndir *= vec2(0.5000, 1. - 0.5000);\ndir.x /= aspectRatio;\nvec4 center = texture(uTexture, uv);\nfloat center_weight = getExponentialWeight(0);\ncolor += center * center_weight;\ntotal_weight += center_weight;radius *= 0.5100;\nfor (int i = 1; i <= 8; i++) {\nfloat weight = getExponentialWeight(i);\nfloat offset = mix(0.015, 0.025, radius) * float(i)/8.;\nvec4 sample1 = texture(uTexture, uv + offset * dir);\nvec4 sample2 = texture(uTexture, uv - offset * dir);\ncolor += (sample1 + sample2) * weight;\ntotal_weight += 2.0 * weight;\n}return color / total_weight;\n}vec4 thresholdPass(vec4 color) {\ncolor.rgb = pow(color.rgb, vec3(1.0/2.2));\ncolor.rgb = 1.2 * (color.rgb - 0.5) + 0.5;\nvec4 bloom = color * smoothstep(0.8700 - 0.1, 0.8700, luma(color));\nreturn vec4(bloom.rgb, color.a);\n}vec4 blurCombinePass(vec2 uv, bool vertical, float radius, float intensity, bool diamond) {\nvec4 blurred = blur(uv, vertical, radius, diamond);\nreturn (thresholdPass(texture(uBgTexture, uv)) * 0.25 + blurred * intensity);\n}vec4 getColor(vec4 color) {\nreturn blurCombinePass(vTextureCoord, true, 30., 1.25, true);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);\nfragColor = getColor(color);\n}","#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;uniform vec2 uResolution;out vec4 fragColor;float getExponentialWeight(int index) {\nswitch(index) {\ncase 0: return 1.0000000000;\ncase 1: return 0.7165313106;\ncase 2: return 0.5134171190;\ncase 3: return 0.3678794412;\ncase 4: return 0.2636050919;\ncase 5: return 0.1888756057;\ncase 6: return 0.1353352832;\ncase 7: return 0.0969670595;\ncase 8: return 0.0694877157;\ndefault: return 0.0;\n}\n}vec4 blur(vec2 uv, bool vertical, float radius, bool diamond) {\nvec4 color = vec4(0.0);\nfloat total_weight = 0.0;\nfloat aspectRatio = uResolution.x/uResolution.y;vec2 dir;\nif (diamond) {\ndir = vertical ? vec2(1, 1) : vec2(1, -1);\n} else {\ndir = vertical ? vec2(0, 1) : vec2(1, 0);\n}\ndir *= vec2(0.5000, 1. - 0.5000);\ndir.x /= aspectRatio;\nvec4 center = texture(uTexture, uv);\nfloat center_weight = getExponentialWeight(0);\ncolor += center * center_weight;\ntotal_weight += center_weight;radius *= 0.5100;\nfor (int i = 1; i <= 8; i++) {\nfloat weight = getExponentialWeight(i);\nfloat offset = mix(0.015, 0.025, radius) * float(i)/8.;\nvec4 sample1 = texture(uTexture, uv + offset * dir);\nvec4 sample2 = texture(uTexture, uv - offset * dir);\ncolor += (sample1 + sample2) * weight;\ntotal_weight += 2.0 * weight;\n}return color / total_weight;\n}vec4 blurPass(vec2 uv, bool vertical, float radius, float intensity, bool diamond) {\nreturn blur(uv, vertical, radius, diamond);\n}vec4 getColor(vec4 color) {\nreturn blurPass(vTextureCoord, false, 10., 1., false);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);\nfragColor = getColor(color);\n}","#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;uniform vec2 uResolution;out vec4 fragColor;float getExponentialWeight(int index) {\nswitch(index) {\ncase 0: return 1.0000000000;\ncase 1: return 0.7165313106;\ncase 2: return 0.5134171190;\ncase 3: return 0.3678794412;\ncase 4: return 0.2636050919;\ncase 5: return 0.1888756057;\ncase 6: return 0.1353352832;\ncase 7: return 0.0969670595;\ncase 8: return 0.0694877157;\ndefault: return 0.0;\n}\n}vec4 blur(vec2 uv, bool vertical, float radius, bool diamond) {\nvec4 color = vec4(0.0);\nfloat total_weight = 0.0;\nfloat aspectRatio = uResolution.x/uResolution.y;vec2 dir;\nif (diamond) {\ndir = vertical ? vec2(1, 1) : vec2(1, -1);\n} else {\ndir = vertical ? vec2(0, 1) : vec2(1, 0);\n}\ndir *= vec2(0.5000, 1. - 0.5000);\ndir.x /= aspectRatio;\nvec4 center = texture(uTexture, uv);\nfloat center_weight = getExponentialWeight(0);\ncolor += center * center_weight;\ntotal_weight += center_weight;radius *= 0.5100;\nfor (int i = 1; i <= 8; i++) {\nfloat weight = getExponentialWeight(i);\nfloat offset = mix(0.015, 0.025, radius) * float(i)/8.;\nvec4 sample1 = texture(uTexture, uv + offset * dir);\nvec4 sample2 = texture(uTexture, uv - offset * dir);\ncolor += (sample1 + sample2) * weight;\ntotal_weight += 2.0 * weight;\n}return color / total_weight;\n}vec4 blurPass(vec2 uv, bool vertical, float radius, float intensity, bool diamond) {\nreturn blur(uv, vertical, radius, diamond);\n}vec4 getColor(vec4 color) {\nreturn blurPass(vTextureCoord, true, 10., 1., false);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);\nfragColor = getColor(color);\n}","#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform sampler2D uBgTexture;\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;float luma(vec4 color) {\nreturn dot(color.rgb, vec3(0.299, 0.587, 0.114));\n}vec4 finalPass(vec4 bloomColor) {\nfloat dither = deband();\nbloomColor.rgb *= vec3(0.7058823529411765, 0.592156862745098, 0);\nbloomColor.rgb += dither;\nbloomColor.a = luma(bloomColor);\nvec4 sceneColor = texture(uBgTexture, vTextureCoord);\nvec4 finalColor = mix(sceneColor, sceneColor + bloomColor, 0.3600 * 1.9);\nreturn finalColor;\n}vec4 getColor(vec4 color) {\nreturn finalPass(color);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);\nfragColor = getColor(color);\n}"],"compiledVertexShaders":["#version 300 es\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":{"downSample":0.5,"depth":false,"uniforms":{},"isBackground":false,"passes":[{"prop":"pass","value":1,"downSample":0.25,"passDescription":"Blur the bloom mask diagonally."},{"prop":"pass","value":2,"downSample":0.25,"includeBg":true,"passDescription":"Reinforce the large bloom streaks."},{"prop":"pass","value":5,"downSample":0.5,"passDescription":"Blur the bloom buffer horizontally at a smaller radius."},{"prop":"pass","value":6,"downSample":0.5,"includeBg":true,"passDescription":"Blur the bloom buffer vertically at a smaller radius."},{"prop":"pass","value":7,"downSample":1,"includeBg":true,"passDescription":"Composite the tinted bloom back over the scene."}]},"id":"bloom"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"vignette","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision highp float;\nin vec3 vVertexPosition;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform vec2 uResolution;\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}const float TAU = 6.28318530718;out vec4 fragColor;\nmat2 rot(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}\nvoid main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);\nfloat displacement = 0.0;vec2 aspectRatio = vec2(uResolution.x/uResolution.y, 1.0);\nvec2 skew = vec2(0.5000, 1.0 - 0.5000);\nfloat halfRadius = 0.7400 * 0.5;\nfloat innerEdge = halfRadius - 1.0000 * halfRadius * 0.5;\nfloat outerEdge = halfRadius + 1.0000 * halfRadius * 0.5;\nvec2 pos = vec2(0.5, 0.5);\nvec2 scaledUV = uv * aspectRatio * rot(0.0000 * TAU) * skew;\nvec2 scaledPos = pos * aspectRatio * rot(0.0000 * TAU) * skew;\nfloat radius = distance(scaledUV, scaledPos);\nfloat falloff = smoothstep(innerEdge + displacement, outerEdge + displacement, radius);\nvec4 vignetteColor;vignetteColor = applyLayerMix(vec4(vec3(0.08235294117647059, 0.08235294117647059, 0.08235294117647059), 1.0), color, falloff * 1.0000);\nvec4 col = mix(color * (1.-falloff), vec4(vignetteColor.rgb, vignetteColor.a), 1.0000);\nfragColor = col;}"],"compiledVertexShaders":["#version 300 es\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},"id":"vignette"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"stretch","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision mediump float;\nin vec3 vVertexPosition;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;\nfloat ease (int easingFunc, float t) {\nreturn t;\n}out vec4 fragColor;vec2 rotate(vec2 v, float angle) {\nfloat c = cos(angle);\nfloat s = sin(angle);\nreturn vec2(v.x * c - v.y * s, v.x * s + v.y * c);\n}vec3 chromatic_aberration(vec3 color, vec2 uv, float amount) {\nvec2 offset = normalize(vTextureCoord - 0.5) * amount / vec2(uResolution.x/uResolution.y, 1);\nvec4 left = texture(uTexture, uv - offset);\nvec4 right = texture(uTexture, uv + offset);color.r = left.r;\ncolor.b = right.b;return color;\n}vec2 distortUV(vec2 uv) {\nfloat angle = (0.0000 - 0.25) * -6.28318530718;\nfloat stretchX = vec2(1, 1).x * 4. * 0.1200;\nfloat stretchY = vec2(1, 1).y * 4. * 0.1200;vec2 pos = vec2(0.5, 0.5) + (uMousePos - 0.5) * 0.3500;vec2 offset = uv - pos;\nvec2 rotatedOffset = rotate(offset, -angle);\nvec2 stretchedOffset = rotatedOffset;float stretchIntensity = abs(rotatedOffset.x);\nfloat easedIntensity = ease(0, stretchIntensity);\nstretchedOffset.x = sign(rotatedOffset.x) * stretchIntensity / (1.0 + stretchX * easedIntensity);\nstretchedOffset.y = rotatedOffset.y / (1.0 + stretchY * easedIntensity * easedIntensity);vec2 finalOffset = rotate(stretchedOffset, angle);\nreturn pos + finalOffset;\n}void main() {\nvec2 uv = vTextureCoord;\nvec2 st = distortUV(uv);\nvec4 color = texture(uTexture, st);color.rgb = chromatic_aberration(color.rgb, st, length(st - uv) * 0.05 * 0.9600);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\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.35,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"stretch"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"sphere","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision highp float;\nin vec3 vVertexPosition;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;\nconst float STEPS = 16.0;\nconst float PI = 3.14159265359;vec3 chromAb(vec2 st, float angle, float amount, float blend) {\nfloat aspect = uResolution.x/uResolution.y;\nfloat rot = angle * 360.0 * PI / 180.0;\nvec2 aber = amount * vec2(0.1 * sin(rot) * aspect, 0.1 * cos(rot));\naber *= distance(st, vec2(0.5)) * 2.0;vec4 r = vec4(0);\nvec4 b = vec4(0);\nvec4 g = vec4(0);float iStep = 1.0 / STEPS;for(float i = 1.0; i <= STEPS; i++) {\nvec2 off = aber * (i * iStep);\nr += texture(uTexture, st - off) * iStep;\nb += texture(uTexture, st + off) * iStep;\n}for (float i = 1.0; i <= STEPS; i++) {\nvec2 off = aber * ((i * iStep) - 0.5);\ng += texture(uTexture, st + off) * iStep;\n}return vec3(r.r, g.g, b.b);\n}vec2 sphereTx(float u, float v, float cx, float cy, float r, float tau) {\nfloat aspect = uResolution.x/uResolution.y;\nu -= cx;\nv -= cy;float s = sqrt(u * u + v * v);\nif (s > r)\nreturn vec2((u + cx) / aspect, v + cy);float z = sqrt(r * r - s * s);float ua = (1.0 - (1.0 / tau)) * asin(u / r);\nfloat va = (1.0 - (1.0 / tau)) * asin(v / r);u = cx + z * sin(ua);\nv = cy + z * sin(va);return vec2(u/aspect, v);\n}float circularIn(float t) {\nreturn 1.0 - sqrt(1.0 - t * t);\n}vec2 sLens(vec2 sc, vec2 p, float r, float mx) {\nreturn sphereTx(\nmix(sc.x, mx - sc.x, 0.0000),\nmix(sc.y, 1. - sc.y, 0.0000),\nmix(p.x, mx - p.x, 0.0000),\nmix(p.y, 1. - p.y, 0.0000),\nr / 2., 1. + 0.5000 * 9.\n);\n}vec2 getCoords(vec2 uv, vec2 p, float r, float mx, float aspect) {\nvec2 sc = uv;\nsc.x *= aspect;sc = sLens(sc, p, r, mx);return clamp((sc - 0.5) + 0.5, 0.0, 1.0);\n}vec2 sc;\nfloat inside;\nfloat insideA;\nfloat dPos;vec2 distortUV(vec2 uv) {\nfloat aspect = uResolution.x / uResolution.y;\nfloat mx = aspect;\nvec2 p = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos - 0.5), 1.0000);\np.x *= aspect;\nfloat r = 0.1100;sc = getCoords(uv, p, r, mx, aspect);vec2 uvA = uv;\nuvA.x *= aspect;\ndPos = distance(uvA, p);float edge = 0.001;\ninside = 1.0 - smoothstep(r / 2.0 - edge, r / 2.0, dPos);\ninsideA = 1.0 - smoothstep(r / 2.0 + 0.002 - edge, r / 2.0 + 0.002, dPos);return mix(uv, sc, inside);\n}out vec4 fragColor;\nvoid main() {\nvec2 uv = vTextureCoord;\nvec2 st = distortUV(uv);\nvec4 color = texture(uTexture, st);\nvec4 base = texture(uTexture, uv);\nvec4 sph = vec4(0.0);\nsph.rgb = chromAb(sc, atan(sc.y, sc.x), dPos * 0.9200, 1.0);\nsph.a = 1.0;\ncolor = mix(base, sph, inside);float r = 0.1100 * uResolution.x / max(uResolution.x, uResolution.y);\ncolor.rgb += vec3((1.0000 - 0.5) * 2.) * mix(0., circularIn(smoothstep(0., r, dPos)), inside);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\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":1,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"lens_distort"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"fastFog","usesPingPong":false,"texture":false,"animating":true,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform float uTime;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;\nfloat ease (int easingFunc, float t) {\nreturn t;\n}out vec4 fragColor;mat2 rot(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}const float PHI = 1.618033988;\nconst float PI = 3.14159265359;float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}float ignGaussian4(vec2 st) {\nfloat n0 = interleavedGradientNoise(st + vec2(0.5, 0.5));\nfloat n1 = interleavedGradientNoise(st + vec2(5.2, 1.3));\nfloat n2 = interleavedGradientNoise(st + vec2(1.7, 9.2));\nfloat n3 = interleavedGradientNoise(st + vec2(8.3, 2.8));\nreturn (n0 + n1 + n2 + n3 - PHI) * PHI;\n}vec2 rot90(vec2 v) {\nreturn vec2(v.y, -v.x);\n}float dot_noise(vec3 p) {\nconst mat3 GOLD = mat3(\n-0.571464913, +0.814921382, +0.096597072,\n-0.278044873, -0.303026659, +0.911518454,\n+0.772087367, +0.494042493, +0.399753815);\nreturn dot(cos(GOLD * p), sin(PHI * p * GOLD));\n}float cheap_fbm(vec3 p) {\nmat2 rota = mat2(0.6, -0.8, 0.8, 0.6);\nfloat nos = 0.;\nfloat amp = 1. + 0.5000 * 10.;\nfloat xp = sqrt(2.);\nfloat halfxp = xp * 0.5;\nfor(int i = 0; i < 6; i++) {\nfloat theta = uTime * 0.05 + float(i);\np.xy *= xp;\np.xy += sin(rota * p.xy * xp + theta) * 0.2;\nfloat nz = dot_noise(vec3(p.xy * rota, p.z + theta));\nnos += nz * amp * rota[0][0];\namp *= halfxp;\nrota *= mat2(0.6, -0.8, 0.8, 0.6);\n}\nnos *= 1./float(6);\nfloat density = -3. + 0.5000 * 6.;\nreturn smoothstep(-3., 3., nos + density);\n}float fnoise(vec2 uv) {\nfloat aspectRatio = uResolution.x/uResolution.y;\nvec2 aspect = vec2(aspectRatio, 1);\nfloat multiplier = 10.0 * (1.0000 / ((aspectRatio + 1.) / 2.));vec2 st = ((uv * aspect - vec2(0.5, 0.5) * aspect)) * multiplier * rot((0.0000) * 2. * PI);\nst *= vec2((1.0 + 0.0000 * 2.0), 1.0);vec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nvec2 pos = mix(vec2(0.5, 0.5), mPos, floor(1.0000));\nfloat dist = ease(0, max(0.,1.-distance(uv * aspect, mPos * aspect) * 4. * (1. - 1.0000)));if (0 == 1) {\ndist = max(0., (0.5 - dist));\n}\nfloat time = uTime * 0.05;\nvec2 drift = vec2(time * 0.2) * 2.0 * 0.5000 * rot(0.125 * 2. * PI);\nfloat fbm = cheap_fbm(vec3(st - drift, time)) * dist;\nfbm = fbm / (1. + fbm);\nreturn fbm;\n}vec4 fastFogBlur(vec2 uv) {\nfloat fogNoise = fnoise(uv);\nvec2 px = gl_FragCoord.xy;\nvec2 texel = 1.0 / uResolution;\nfloat aspectRatio = uResolution.x / uResolution.y;\nvec2 aspect = vec2(aspectRatio, 1.0);\nfloat blurStrength = 0.1000;\nfloat baseRadius = (blurStrength * 100.0) * texel.y;if (baseRadius <= texel.y) {\nreturn vec4(texture(uTexture, uv).rgb, fogNoise);\n}float noise = interleavedGradientNoise(px * 1.212);\nfloat angle = noise * 2.0 * PI;\nvec2 screenAxis = vec2(cos(angle), sin(angle));\nvec2 screenAxisPerp = rot90(screenAxis);\nvec2 axis = screenAxis / aspect;\nvec2 axisPerp = screenAxisPerp / aspect;\nvec2 diag = (axis + axisPerp) * 0.7071;\nvec2 diagPerp = (axisPerp - axis) * 0.7071;float jitter = ignGaussian4(px);\njitter = clamp(jitter, -PHI, PHI);\njitter *= 0.46;float radius = baseRadius * (1.0 + jitter) * fogNoise;\nradius = max(radius, 0.0);if (radius <= texel.y * 0.5) {\nreturn vec4(texture(uTexture, uv).rgb, clamp(fogNoise, 0.0, 1.0));\n}float innerR = radius * 0.5;\nvec4 color = vec4(0.0);\ncolor += texture(uTexture, uv + axis * radius);\ncolor += texture(uTexture, uv - axis * radius);\ncolor += texture(uTexture, uv + axisPerp * radius);\ncolor += texture(uTexture, uv - axisPerp * radius);\ncolor += texture(uTexture, uv + diag * innerR);\ncolor += texture(uTexture, uv - diag * innerR);\ncolor += texture(uTexture, uv + diagPerp * innerR);\ncolor += texture(uTexture, uv - diagPerp * innerR);\nreturn vec4((color * 0.125).rgb, clamp(fogNoise, 0.0, 1.0));\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = vec4(0);color = fastFogBlur(uv);\nfragColor = color;}","#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform vec2 uResolution;out vec4 fragColor;const float PHI = 1.618033988;\nconst float PI = 3.14159265359;float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}vec2 rot90(vec2 v) {\nreturn vec2(v.y, -v.x);\n}vec4 gaussianBlur(vec2 uv) {\nfloat fogNoise = clamp(texture(uTexture, uv).a, 0.0, 1.0);\nfloat radius = 0.1000 * 60.0 * fogNoise;\nradius = max(radius, 0.000);\nfloat jitter = interleavedGradientNoise(gl_FragCoord.xy);\nvec2 texel = (radius / uResolution);\nvec2 at = texel * vec2(1.0, uResolution.x / uResolution.y);vec4 color = vec4(0.0);color += texture(uTexture, uv + vec2(at.x, 0.0)) * 0.0719;\ncolor += texture(uTexture, uv - vec2(at.x, 0.0)) * 0.0719;\ncolor += texture(uTexture, uv + vec2(0.0, at.y)) * 0.0719;\ncolor += texture(uTexture, uv - vec2(0.0, at.y)) * 0.0719;\ncolor += texture(uTexture, uv + at) * 0.0635;\ncolor += texture(uTexture, uv - at) * 0.0635;\ncolor += texture(uTexture, uv + vec2(at.x, -at.y)) * 0.0635;\ncolor += texture(uTexture, uv + vec2(-at.x, at.y)) * 0.0635;vec2 at2 = rot90(at) * 2.0;\ncolor += texture(uTexture, uv + vec2(at2.x, 0.0)) * 0.0494;\ncolor += texture(uTexture, uv - vec2(at2.x, 0.0)) * 0.0494;\ncolor += texture(uTexture, uv + vec2(0.0, at2.y)) * 0.0494;\ncolor += texture(uTexture, uv - vec2(0.0, at2.y)) * 0.0494;\ncolor += texture(uTexture, uv + at2) * 0.0300;\ncolor += texture(uTexture, uv - at2) * 0.0300;\ncolor += texture(uTexture, uv + vec2(at2.x, -at2.y)) * 0.0300;\ncolor += texture(uTexture, uv + vec2(-at2.x, at2.y)) * 0.0300;vec2 at3 = at * 3.0;\ncolor += texture(uTexture, uv + vec2(at3.x, 0.0)) * 0.0265;\ncolor += texture(uTexture, uv - vec2(at3.x, 0.0)) * 0.0265;\ncolor += texture(uTexture, uv + vec2(0.0, at3.y)) * 0.0265;\ncolor += texture(uTexture, uv - vec2(0.0, at3.y)) * 0.0265;\ncolor += texture(uTexture, uv + at3) * 0.0087;\ncolor += texture(uTexture, uv - at3) * 0.0087;\ncolor += texture(uTexture, uv + vec2(at3.x, -at3.y)) * 0.0087;\ncolor += texture(uTexture, uv + vec2(-at3.x, at3.y)) * 0.0087;return color;\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = vec4(0);color = gaussianBlur(uv);\nfragColor = color;}","#version 300 es\nprecision highp float;\nprecision highp int;in vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform sampler2D uBgTexture;\nuniform vec2 uResolution;\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}out vec4 fragColor;vec3 chromatic_aberration(vec3 color, vec2 uv, float amount) {\nvec2 offset = normalize(vTextureCoord - 0.5) * amount / vec2(uResolution.x/uResolution.y, 1);\nvec4 left = texture(uTexture, uv - offset);\nvec4 right = texture(uTexture, uv + offset);color.r = left.r;\ncolor.b = right.b;return color;\n}const float PHI = 1.618033988;\nconst float PI = 3.14159265359;float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}vec4 fogComposite(vec2 uv) {\nfloat ign = interleavedGradientNoise(gl_FragCoord.xy) - 0.5;\nfloat fogNoise = clamp(texture(uTexture, uv).a, 0.0, 1.0);\nvec2 jitter = vec2(0, ign * 0.02) * 0.1000;\nvec4 blur = texture(uTexture, uv + jitter);\nblur.a = clamp(fogNoise, 0.0, 1.0);\nfloat fogMask = clamp(fogNoise * 2., 0., 1.);\nvec4 bg = texture(uBgTexture, uv);if (fogMask <= 0.001) {\nreturn bg;\n}vec3 grain = vec3(randFibo(uv + fogNoise));blur.rgb = chromatic_aberration(blur.rgb, uv, fogMask * 0.01 * 0.1000 * (0.5000 * 1.5));\nblur.rgb = (blur.rgb * (0.5000 + 0.5)) + grain * 0.05;\nvec4 foggedBlur = vec4(blur.rgb * vec3(1, 1, 1), fogMask);\nfoggedBlur.rgb += (0.1000 * 0.25 * fogMask * vec3(1, 1, 1));\nfoggedBlur = mix(bg, foggedBlur, fogMask);\nreturn foggedBlur;\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = vec4(0);color = fogComposite(uv);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\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.5,"trackMouse":0,"trackAxes":"xy","data":{"downSample":0.5,"depth":false,"uniforms":{},"isBackground":false,"passes":[{"prop":"pass","value":1,"downSample":0.5,"passDescription":"Blur the fog field for a softer result."},{"prop":"pass","value":2,"includeBg":true,"passDescription":"Composite the fog over the background."}]},"id":"fast_fog"}],"options":{"name":"miaselida-cta-banner","fps":60,"dpi":1.5,"scale":1,"includeLogo":false,"isProduction":false,"flatten":false},"version":"2.1.9","id":"Ufjk89YyTXmVSEGJ8ueY"}