{"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 float uTime;\nuniform vec2 uMousePos;uvec2 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}float deband() {\nreturn (randFibo(gl_FragCoord.xy) - 0.5) / 255.0;\n}vec3 getColor(int index) {\nswitch(index) {\ncase 0: return vec3(0, 0, 0);\ncase 1: return vec3(0.615686274509804, 0.615686274509804, 0.615686274509804);\ncase 2: return vec3(1, 1, 1);\ndefault: return vec3(0.0);\n}\n}float getStop(int index) {\nswitch(index) {\ncase 0: return 0.0000;\ncase 1: return 0.5000;\ncase 2: return 1.0000;\ndefault: return 0.0;\n}\n}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}vec3 linear_from_srgb(vec3 rgb) {\nreturn pow(max(rgb, vec3(0.0)), vec3(2.2));\n}vec3 srgb_from_linear(vec3 lin) {\nreturn pow(max(lin, vec3(0.0)), vec3(1.0/2.2));\n}vec3 safeCbrt(vec3 v) {\nreturn sign(v) * pow(abs(v), vec3(1.0/3.0));\n}vec3 oklab_mix(vec3 lin1, vec3 lin2, float a) {\nconst mat3 kCONEtoLMS = mat3(\n0.4121656120, 0.2118591070, 0.0883097947,\n0.5362752080, 0.6807189584, 0.2818474174,\n0.0514575653, 0.1074065790, 0.6302613616);\nconst mat3 kLMStoCONE = mat3(\n4.0767245293, -1.2681437731, -0.0041119885,\n-3.3072168827, 2.6093323231, -0.7034763098,\n0.2307590544, -0.3411344290, 1.7068625689);\nvec3 lms1 = safeCbrt( kCONEtoLMS*lin1 );\nvec3 lms2 = safeCbrt( kCONEtoLMS*lin2 );\nvec3 lms = mix( lms1, lms2, a );\nlms *= 1.0 + 0.025 * a * (1.0-a);\nreturn kLMStoCONE * (lms * lms * lms);\n}vec3 getGradientColor(float position) {\nposition = clamp(position, 0.0, 1.0);\nif (3 <= 1) return getColor(0);int count = 3 - 1;for (int i = 0; i < 15; i++) {\nif (i >= count) break;\nfloat stopA = getStop(i);\nfloat stopB = getStop(i + 1);\nif (position <= stopB || i == count - 1) {\nfloat denom = max(stopB - stopA, 0.00001);\nfloat t = clamp((position - stopA) / denom, 0.0, 1.0);\nvec3 linA = linear_from_srgb(getColor(i));\nvec3 linB = linear_from_srgb(getColor(i + 1));\nvec3 mixed = oklab_mix(linA, linB, t);\nreturn srgb_from_linear(mixed);\n}\n}\nreturn getColor(min(count, 15));\n}out vec4 fragColor;vec3 applyColorToPosition(float position) {\nvec3 color = vec3(0);\nposition -= (uTime * 0.01 + 0.0000);\nfloat cycle = floor(position);\nbool reverse = 1.0000 > 0.5 && int(cycle) % 2 == 0;\nfloat animatedPos = reverse ? 1.0 - fract(position) : fract(position);color = getGradientColor(animatedPos);\nfloat dither = deband();\ncolor += dither;\nreturn color;\n}vec3 linearGrad(vec2 uv) {\nfloat position = (uv.x+0.5);\nreturn applyColorToPosition(position);\n}vec3 getGradient(vec2 uv) {\nreturn linearGrad(uv);\n}vec3 getBgColor(vec2 uv) {return getGradient(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.3100*2., 1e-5);\nuv = rotate(uv, (0.0189 - 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":0.25,"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":true},"id":"gradient"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"blinds","usesPingPong":false,"texture":false,"animating":true,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision highp float;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform float uTime;uniform vec2 uMousePos;\nuniform vec2 uResolution;float ease (int easingFunc, float t) {\nreturn t;\n}const float STEPS = 8.0;\nconst float PI = 3.14159265359;\nconst vec3 CH_R = vec3(1, 0, 0);\nconst vec3 CH_G = vec3(0, 1, 0);\nconst vec3 CH_B = vec3(0, 0, 1);mat2 rot(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}vec2 scaleAspect(vec2 st) {\nreturn st * vec2(uResolution.x / uResolution.y, 1.0);\n}vec2 unscaleAspect(vec2 st) {\nreturn st * vec2(uResolution.y / uResolution.x, 1.0);\n}vec2 scaleAspect(vec2 st, float aspectRatio) {\nreturn st * vec2(aspectRatio, 1.0);\n}float smoothSegment(float s) {\nreturn mix(s, smoothstep(0.0, 0.5, s) - smoothstep(0.5, 1.0, s), 1.0000);\n}vec3 channelDistort(float segment) {\nreturn mix(mix(CH_R, CH_G, segment * 2.0), mix(CH_G, CH_B, (segment - 0.5) * 2.0), step(0.5, segment));\n}vec2 applyStyle(vec2 st, vec2 pos, float angle) {\nst = rot(angle * 2. * PI) * (st - pos) + pos;\nst = unscaleAspect(st);\nreturn st;\n}vec2 style0(vec2 st, vec2 pos, float divisions, float dist, float amount, float angle, out vec3 d) {\nfloat segment = smoothSegment(fract((st.y + 1. - pos.y - 1. + uTime * 0.01) * divisions));\nd = channelDistort(segment);\nst.y -= pow(d.r, dist) / 10. * amount;\nst.y += pow(d.b, dist) / 10. * amount;\nreturn applyStyle(st, pos, angle);\n}vec2 getStyle(vec2 st, vec2 pos, float divisions, float dist, float amount, float angle, out vec3 d) {\nreturn style0(st, pos, divisions, dist, amount, angle, d);\n}vec2 caUV;\nvec3 caDistort;\nfloat caDist;\nfloat caAmount;out vec4 fragColor;vec2 distortUV(vec2 uv) {\nfloat aspectRatio = uResolution.x / uResolution.y;vec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos - 0.5), 0.0000);\nfloat mDist = ease(0, max(0., 1. - distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.0000)));vec2 pos = scaleAspect(mix(vec2(0.5, 0.5), mPos, floor(1.0000)));\nvec2 st = scaleAspect(uv);\nst = rot(0.1566 * -2.0 * PI) * (st - pos) + pos;float divisions = 2. + 0.0200 * 30.;\nfloat dist = 0.0000 * 4. + 1.;\nfloat amount = 2.2700 * mDist;caDist = dist;\ncaAmount = amount;\ncaUV = uv;\ncaDistort = vec3(0.0);if (abs(amount) <= 0.001) return uv;vec2 texelX = dFdx(st) * 1.5;\nvec2 texelY = dFdy(st) * 1.5;vec3 distort;\nvec3 scratchDistort;\nvec2 result = getStyle(st, pos, divisions, dist, amount, 0.1566, distort);\nvec2 result1 = getStyle(st + texelX, pos, divisions, dist, amount, 0.1566, scratchDistort);\nvec2 result2 = getStyle(st + texelY, pos, divisions, dist, amount, 0.1566, scratchDistort);\nvec2 result3 = getStyle(st - texelX, pos, divisions, dist, amount, 0.1566, scratchDistort);\nvec2 result4 = getStyle(st - texelY, pos, divisions, dist, amount, 0.1566, scratchDistort);caUV = result;\ncaDistort = distort;return (result + result1 + result2 + result3 + result4) / 5.;\n}void main() {\nvec2 uv = vTextureCoord;\nuv = distortUV(uv);\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}"],"speed":0.5,"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"blinds"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"liquify","usesPingPong":false,"texture":false,"animating":true,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\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.0000 * uTime * 0.0125) * rot(0.0000 * -2. * PI);pos += drift;\nvec2 skew = mix(vec2(1), vec2(1, 0), 0.0000);\nst -= pos;\nst.x *= aspectRatio;\nst = st * rot(0.0000 * 2. * PI);\nst *= skew;\nfloat freq = (5.0 * (0.2200 + 0.1));\nfloat t = uTime * 0.025;float amplitude = 0.5500 * mix(0.2, 0.2/(0.2200 + 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.0000 * -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.5500 <= 0.001) return uv;\nif (0.8600 <= 0.001) return uv;vec2 liquifiedUV = liquify(uv, dist);\ncaLiquifiedUV = liquifiedUV;\ncaOriginalUV = uv;\nreturn mix(uv, liquifiedUV, 0.8600);\n}void main() {\nvec2 uv = vTextureCoord;\nvec2 distortedUV = distortUV(uv);\nvec4 color = texture(uTexture, distortedUV);vec2 dir = caLiquifiedUV - caOriginalUV;\nfloat distanceUv = length(dir);\nif (distanceUv > 0.001) {\nvec2 normalizedUv = dir / distanceUv;\nfloat chromAbb = 0.1300 * 0.5;\nvec2 offsetR = caLiquifiedUV + chromAbb * normalizedUv * distanceUv;\nvec2 offsetB = caLiquifiedUV - chromAbb * normalizedUv * distanceUv;\nvec4 colorR = texture(uTexture, mix(caOriginalUV, offsetR, 0.8600));\nvec4 colorB = texture(uTexture, mix(caOriginalUV, offsetB, 0.8600));\ncolor = vec4(colorR.r, color.g, colorB.b, colorR.a * color.a * colorB.a);\n}\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.25,"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"liquify"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"sdf_shape","usesPingPong":false,"texture":{"src":"https://assets.unicorn.studio/images/w7P05mODigMIhhzQnz01RTXJOkw1/Logo Titan White_combined_1776246327861.png","sampler":"uCustomTexture"},"animating":false,"mouseMomentum":1,"mouseSpring":0,"isMask":0,"compiledFragmentShaders":["#version 300 es\nprecision highp float;\nprecision highp int;in vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform sampler2D uCustomTexture;uniform float uTime;uniform vec2 uMousePos;\nuniform vec2 uResolution;uvec2 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}const float PI = 3.14159265359;\nconst float TAU = 6.28318530718;\nconst float PHI = 1.61803398875;\nconst vec3 viewDir = vec3(0,0, -4.25);ivec2 customTexSize;\nfloat customTexAspect;const mat3 ROT_Y_90 = mat3(\n0.0, 0.0, 1.0,\n0.0, 1.0, 0.0,\n-1.0, 0.0, 0.0\n);const mat3 ROT_Z_90 = mat3(\n0.0, -1.0, 0.0,\n1.0, 0.0, 0.0,\n0.0, 0.0, 1.0\n);const mat3 ROT_X_90 = mat3(\n1.0, 0.0, 0.0,\n0.0, 0.0, -1.0,\n0.0, 1.0, 0.0\n);float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}mat3 rotY(float ang) {\nfloat c = cos(ang), s = sin(ang);\nreturn mat3(c, 0.0, s, 0.0, 1.0, 0.0, -s, 0.0, c);\n}mat3 rotX(float ang) {\nfloat c = cos(ang), s = sin(ang);\nreturn mat3(1.0, 0.0, 0.0, 0.0, c, -s, 0.0, s, c);\n}mat3 rotZ(float ang) {\nfloat c = cos(ang), s = sin(ang);\nreturn mat3(c, -s, 0.0, s, c, 0.0, 0.0, 0.0, 1.0);\n}vec3 twistY(vec3 p, float amount) {\nfloat c = cos(amount * p.y);\nfloat s = sin(amount * p.y);\nmat2 m = mat2(c, -s, s, c);\nreturn vec3(m * p.xz, p.y);\n}vec3 twistX(vec3 p, float amount) {\nfloat c = cos(amount * p.x);\nfloat s = sin(amount * p.x);\nmat2 m = mat2(c, -s, s, c);\nreturn vec3(p.x, m * p.yz);\n}float opExtrusion(vec3 p, float d, float h) {\nvec2 w = vec2( d, abs(p.z) - h );\nreturn min(max(w.x,w.y),0.0) + length(max(w,0.0));\n}float median(float r, float g, float b) {\nreturn max(min(r, g), min(max(r, g), b));\n}float sdCustom(vec3 p) {\np *= rotX(radians(90.0));\np *= rotY(radians(180.0));\np *= rotZ(radians(180.0));\nvec2 uv = p.xy * 0.25 + 0.5;\nif (customTexAspect > 1.0) {\nuv.y = (uv.y - 0.5) * customTexAspect + 0.5;\n} else {\nuv.x = (uv.x - 0.5) / customTexAspect + 0.5;\n}vec4 sdColor = texture(uCustomTexture, uv);\nfloat msdf = median(sdColor.r, sdColor.g, sdColor.b);\nfloat sdf = sdColor.a;\nfloat sd = msdf;\nif(sdf < 1.) {\nfloat tuning = 0.023;\nsd = mix(msdf, max(msdf - tuning, sdf), sdf);\n}float screenPxDistance = sd - 0.5;\nfloat d = -screenPxDistance;return opExtrusion(p, d, 0.2900 * 0.5);\n}vec3 getRepeat(vec3 p) {\nfloat spacing = (0.5000 + 0.0000 * 0.38) * 8.;\nreturn p;\n}vec3 getThreeDRepeat(vec3 p) {\nfloat spacing = (0.5000 + 0.0000 * 0.38) * 8.;\nreturn p;\n}vec3 getAdjustedP(vec3 p) {\nfloat scale = max(0.3740, 0.000000001);\nfloat scaleFactor = 1.0/scale;\nvec3 adjustedP = p * scaleFactor;vec2 twist = vec2(0, 0);adjustedP.xy *= vec2(uResolution.x / uResolution.y, 1);adjustedP *= (1. + (0.0000 + 0.01));vec2 mousePos = mix(vec2(0), uMousePos - 0.5, 0.2000);\nvec2 axis = vec2(-1. * vec3(0.5923344947735192, 0.5696864111498258, 0.5).y - 1. + mousePos.y/PI, vec3(0.5923344947735192, 0.5696864111498258, 0.5).x + mousePos.x/PI) * 2.;adjustedP = getRepeat(adjustedP);float baseTime = uTime * 0.02;\nfloat timeX = vec3(0, 1, 0).x * baseTime;\nfloat timeY = vec3(0, 1, 0).y * baseTime;\nfloat timeZ = vec3(0, 1, 0).z * baseTime;mat3 rotYMat = rotY(axis.y * PI);\nmat3 rotXMat = rotX(axis.x * PI);\nmat3 rotZMat = rotZ(vec3(0.5923344947735192, 0.5696864111498258, 0.5).z * 2.0 * PI);mat3 combinedRotation = rotZMat * rotYMat * rotXMat;\nmat3 combinedAnimation = rotZ(timeZ) * rotX(timeX) * rotY(timeY);adjustedP = combinedRotation * adjustedP;\nadjustedP = combinedAnimation * adjustedP;\nadjustedP = getThreeDRepeat(adjustedP);if (twist.y != 0.0) {\nadjustedP = twistY(adjustedP, -1.0 * twist.y);\n} else {\nadjustedP = adjustedP.xzy;\n}if (twist.x != 0.0) {\nadjustedP = twistX(adjustedP, -1.0 * twist.x);\n}return adjustedP;\n}float getMergedSDF(vec3 p) {\np = getAdjustedP(p);\nreturn sdCustom(p);\n}float fresnel(vec3 eyeVector, vec3 worldNormal, float power) {\nfloat NdotV = abs(dot(eyeVector, worldNormal));\nfloat width = fwidth(dot(eyeVector, worldNormal));\nfloat threshold = 0.2;\nfloat edgeDampFactor = smoothstep(threshold, -threshold, width);\nfloat fresnelFactor = 1.0 - NdotV;\nreturn pow(fresnelFactor, power) * mix(1., edgeDampFactor * 2., 0.5);\n}float ign(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}float ignGaussian4(vec2 st) {\nfloat n0 = ign(st + vec2(0.5, 0.5));\nfloat n1 = ign(st + vec2(5.2, 1.3));\nfloat n2 = ign(st + vec2(1.7, 9.2));\nfloat n3 = ign(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}vec3 sampleDispersionTap(vec3 rd, vec3 normal, float iorBase, vec3 dispCoefficients, float step, vec2 blurOffset) {\nvec3 disp = step * dispCoefficients;\nvec3 ior = 1.0 / (iorBase + disp);\nvec3 refractedRayR = refract(rd, normal, ior.r);\nvec3 refractedRayG = refract(rd, normal, ior.g);\nvec3 refractedRayB = refract(rd, normal, ior.b);return vec3(\ntexture(uTexture, vTextureCoord - refractedRayR.xy + blurOffset).r,\ntexture(uTexture, vTextureCoord - refractedRayG.xy + blurOffset).g,\ntexture(uTexture, vTextureCoord - refractedRayB.xy + blurOffset).b\n);\n}vec3 frostOrDispersion(vec3 rd, vec3 normal) {\nvec3 refractionColor = vec3(0.0);\nfloat iorBase = 1. + 0.5000 * 0.25;\nvec3 dispCoefficients = vec3(0.03, 0.06, 0.1) * 0.2500 * 1.2;\nvec2 texel = 1.0 / uResolution;\nfloat aspectRatio = uResolution.x / uResolution.y;\nvec2 aspect = vec2(aspectRatio, 1.0);\nvec2 px = gl_FragCoord.xy;\nfloat noise = ign(px * 1.212);\nfloat angle = noise * PHI;\nvec2 screenAxis = vec2(cos(angle), sin(angle));\nvec2 screenAxisPerp = rot90(screenAxis);\nvec2 axis = screenAxis / aspect;\nvec2 axisPerp = screenAxisPerp / aspect;\nfloat jitter = ignGaussian4(px);\njitter = clamp(jitter, -2.0, 2.0) * 0.5;\nfloat blurRadius = max((0.0000 * 25.0) * texel.y * (1.0 + jitter), 0.0);dispCoefficients *= mix(jitter, 1.0, 0.6);vec2 blurAxis = vec2(0.0);\nvec2 blurAxisPerp = vec2(0.0);\nif (blurRadius > texel.y * 0.5) {\nblurAxis = axis * blurRadius;\nblurAxisPerp = axisPerp * blurRadius;\n}refractionColor += sampleDispersionTap(rd, normal, iorBase, dispCoefficients, 0.125, blurAxis);\nrefractionColor += sampleDispersionTap(rd, normal, iorBase, dispCoefficients, 0.375, -blurAxis);\nrefractionColor += sampleDispersionTap(rd, normal, iorBase, dispCoefficients, 0.625, blurAxisPerp);\nrefractionColor += sampleDispersionTap(rd, normal, iorBase, dispCoefficients, 0.875, -blurAxisPerp);return clamp(refractionColor * 0.25, 0.0, 1.0);\n}vec3 calculateNormal(vec3 p, float eps) {\nvec2 e = vec2(1.0, -1.0) * eps * 0.5;\nreturn normalize(\ne.xyy * getMergedSDF(p + e.xyy) +\ne.yyx * getMergedSDF(p + e.yyx) +\ne.yxy * getMergedSDF(p + e.yxy) +\ne.xxx * getMergedSDF(p + e.xxx)\n);\n}vec3 sampleTexture(vec3 rd, vec3 normal) {return frostOrDispersion(rd, normal);\n}float getFinalSDF(vec3 p) {\nreturn max(0.0000000001, getMergedSDF(p) - (0.0000 + 0.005)) * max(0.3740, 0.000000001);\n}const int STEPS = 72;\nconst float MAX_DISTANCE = 120.0;vec4 rayMarch(vec3 ro, vec3 rd) {\nfloat pixelSize = 0.005;\nfloat jitter = interleavedGradientNoise(gl_FragCoord.xy);\nfloat traveled = jitter;\nvec3 entryPoint = vec3(0.0);\nvec3 entryNormal = vec3(0.0);\nfloat partialAlpha = 0.0;\nfloat lastDistance = 0.0;\nfloat smoothing = mix(1., 4., 0.5000);for (int i = 0; i < STEPS; ++i) {\nvec3 currentPos = ro + rd * traveled;\nfloat distance = getFinalSDF(currentPos);\nfloat progress = float(i)/float(STEPS);\nfloat step = distance * mix(0.5, 2.0, progress) * mix(1.0, jitter + 0.5, 1. - progress);if (distance > MAX_DISTANCE) break;if (distance < pixelSize) {\npartialAlpha = 1.;\nentryPoint = currentPos;\nentryNormal = calculateNormal(entryPoint, pixelSize * smoothing);\nbreak;\n}lastDistance = distance;traveled += max(step, pixelSize);\nif (traveled > MAX_DISTANCE) break;\n}if (partialAlpha == 0.0) {\nreturn vec4(0);\n}vec3 samplePosition = mix(rd, entryPoint, 0.0000);vec3 refractionColor = sampleTexture(samplePosition, entryNormal);\nvec3 lightDir = vec3(((vec2(vec3(0.25, 0.25, -3).x, 1.-vec3(0.25, 0.25, -3).y) - 0.333) * 3.) - vec2(0.5, 0.5), vec3(0.25, 0.25, -3).z);\nvec3 normLightDir = normalize(lightDir);float lightAndShadow = dot(entryNormal, normLightDir);\nvec3 lightColor = mix(vec3(1), vec3(1, 1, 1), 1. - 0.0000);\nvec3 fresnelEffect = vec3(0.0);fresnelEffect = fresnel(rd, entryNormal, 8.0) * 0.5000 * vec3(1, 1, 1);vec3 specularEffect = vec3(0.0);vec3 halfwayDir = normalize(lightDir + rd);\nfloat specFactor = pow(max(dot(entryNormal, halfwayDir), 0.0), 64.0 * 0.5000 + 0.01);\nspecularEffect = specFactor * 0.5000 * lightColor;vec3 combinedEffects = fresnelEffect + specularEffect;\nvec3 finalColor = mix(refractionColor, vec3(1, 1, 1) * lightAndShadow, 0.0000);\nfinalColor += combinedEffects;vec4 outputColor = vec4(finalColor, 1.);return outputColor;\n}out vec4 fragColor;void main() {\nvec4 col = vec4(0);\nvec2 uv = vTextureCoord;\nvec4 bg = texture(uTexture, uv);customTexSize = textureSize(uCustomTexture, 0);\ncustomTexAspect = float(customTexSize.x) / float(customTexSize.y);if(float(customTexSize.x) == float(uResolution.x) && float(customTexSize.y) == float(uResolution.y)) {\ndiscard;\n}if(0.3740 <= 0.0001 || 1.0000 <= 0.0001) {\ncol = vec4(0);\nif(0 == 1) {\ncol = bg;\n}\nfragColor = col;\nreturn;\n}vec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nuv = uv - pos;\nfloat fovFactor = tan(radians(20.) * 0.5);\nvec3 rd = vec3(uv * fovFactor, 0.5);\ncol = rayMarch(viewDir, rd);\nfloat dither = (randFibo(vTextureCoord.xy) - 0.5) / 255.0;\ncol += dither;col = mix(vec4(0), col, 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}"],"speed":0.5,"trackMouseMove":0,"trackAxes":"xy","trackMouse":0.2,"data":{"depth":false,"uniforms":{},"isBackground":false},"id":"3d_shape"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"fxaa","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;uniform sampler2D uTexture;uniform vec2 uResolution;const float FXAA_REDUCE_MIN = 0.0078125;\nconst float FXAA_REDUCE_MUL = 0.125;\nconst float FXAA_SPAN_MAX = 12.0;\nconst float FXAA_EDGE_THRESHOLD = 0.166;\nconst float FXAA_EDGE_THRESHOLD_MIN = 0.0833;\nconst float FXAA_SUBPIX_QUALITY = 0.75;out vec4 fragColor;void main() {\nvec2 res = 1.0 / uResolution;vec3 rgbNW = texture(uTexture, vTextureCoord.xy + vec2(-1.0, -1.0) * res).xyz;\nvec3 rgbNE = texture(uTexture, vTextureCoord.xy + vec2( 1.0, -1.0) * res).xyz;\nvec3 rgbSW = texture(uTexture, vTextureCoord.xy + vec2(-1.0, 1.0) * res).xyz;\nvec3 rgbSE = texture(uTexture, vTextureCoord.xy + vec2( 1.0, 1.0) * res).xyz;\nvec4 rgbaM = texture(uTexture, vTextureCoord.xy);\nvec3 rgbM = rgbaM.xyz;vec3 luma = vec3(0.299, 0.587, 0.114);\nfloat lumaNW = dot(rgbNW, luma);\nfloat lumaNE = dot(rgbNE, luma);\nfloat lumaSW = dot(rgbSW, luma);\nfloat lumaSE = dot(rgbSE, luma);\nfloat lumaM = dot(rgbM, luma);float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\nfloat lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\nfloat lumaRange = lumaMax - lumaMin;\nif (lumaRange < max(FXAA_EDGE_THRESHOLD_MIN, lumaMax * FXAA_EDGE_THRESHOLD)) {\nfragColor = rgbaM;\nreturn;\n}\nfloat lumaAvg = (lumaNW + lumaNE + lumaSW + lumaSE) * 0.25;\nfloat subpixBlend = clamp(abs(lumaAvg - lumaM) / lumaRange, 0.0, 1.0);\nsubpixBlend = smoothstep(0.0, 1.0, subpixBlend);\nsubpixBlend = subpixBlend * subpixBlend * FXAA_SUBPIX_QUALITY;vec2 dir;\ndir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\ndir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\nfloat rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);dir = min(vec2(FXAA_SPAN_MAX),\nmax(vec2(-FXAA_SPAN_MAX),\ndir * rcpDirMin)) * res;vec4 rgbA = 0.5 * (\ntexture(uTexture, vTextureCoord.xy + dir * (1.0/3.0 - 0.5)) +\ntexture(uTexture, vTextureCoord.xy + dir * (2.0/3.0 - 0.5)));vec4 rgbB = rgbA * 0.5 + 0.25 * (\ntexture(uTexture, vTextureCoord.xy + dir * -0.5) +\ntexture(uTexture, vTextureCoord.xy + dir * 0.5));float lumaB = dot(rgbB.xyz, luma);vec4 edgeResult;\nif (lumaB < lumaMin || lumaB > lumaMax) {\nedgeResult = rgbA;\n} else {\nedgeResult = rgbB;\n}fragColor = mix(edgeResult, rgbaM, -subpixBlend);\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":{"depth":false,"uniforms":{},"isBackground":false},"id":"fxaa"}],"options":{"name":"Titan Liquid Metal","fps":60,"dpi":1.5,"scale":1,"includeLogo":false,"isProduction":false,"flatten":false},"version":"2.1.9","id":"2o2NhseaqW85lsZ025ez"}