{"history":[{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"twodlight","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"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;\nprecision highp int;in vec2 vTextureCoord;uniform sampler2D uTexture;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}float deband() {\nreturn (randFibo(gl_FragCoord.xy) - 0.5) / 255.0;\n}const float EPSILON = 0.0002;\nconst int MAX_STEPS = 20;\nconst float MAX_STEPS_F = 20.0;\nconst float STEP_SCALE = 64.0 / 20.0;\nconst float AMBIENT_STEP = 0.01 * STEP_SCALE;\nconst float SOURCE_ACCUM_GAIN = 0.05;\nconst float SOURCE_RADIUS_SCALE = 0.0;out vec4 fragColor;vec3 Tonemap_tanh(vec3 x) {\nx = clamp(x, -40.0, 40.0);\nreturn (exp(x) - exp(-x)) / (exp(x) + exp(-x));\n}float SHADER_COST_RAYMARCH_HINT(float value) {\nreturn value;\n}float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}void main() {\nvec4 sceneColor = texture(uTexture, vTextureCoord);\nvec2 aspectRatio = uResolution / min(uResolution.x, uResolution.y);\nvec2 uv = vTextureCoord * aspectRatio;\nvec2 pos = vec2(0.501530781870759, 0.6420565576064312) + mix(vec2(0), (uMousePos-0.5), 0.0000);\npos = pos * aspectRatio;\nvec2 lightDelta = pos - uv;\nfloat lightDist = length(lightDelta);if(lightDist <= EPSILON) {\nvec3 lightColor = Tonemap_tanh(sceneColor.rgb * vec3(1, 1, 1) + vec3(1, 1, 1) * (0.25 + 1.0000 * 0.5) * SOURCE_ACCUM_GAIN);\nfloat dither = deband();\nlightColor += dither;\nvec4 color = vec4(lightColor, 1.0);\nfragColor = color;return;\n}vec2 lightDir = lightDelta / lightDist;\nvec2 lightPerp = vec2(-lightDir.y, lightDir.x);\nbool hitObject = false;\nvec2 marchPos = uv;\nfloat rayDist = 0.;\nfloat jitter = interleavedGradientNoise(vTextureCoord * uResolution) - 0.5;\nfloat diffusion = 0.5400*0.125;\nfloat cappedScale = min(1.8, 0.8100);\nfloat ambient = 0.;\nfloat sourceGlow = 1.0 - smoothstep(0.0, 0.045 + cappedScale * 0.08, lightDist);\nfloat sourceRadius = (0.015 + cappedScale * 0.06) * SOURCE_RADIUS_SCALE;\nfloat sourceAccum = (SOURCE_ACCUM_GAIN * 1.0000) * (0.015 + 1.0000 * 0.12) / max(lightDist * lightDist, sourceRadius * sourceRadius);\nvec2 offset = lightPerp * jitter * diffusion;\nfloat baseStepLength = 0.01 * max(cappedScale, 0.05) * STEP_SCALE;\nfloat stepLength = min(baseStepLength, max(lightDist / (MAX_STEPS_F * 0.8), EPSILON));\nvec2 step = (lightDir + offset) * stepLength;\nmarchPos += step * (jitter + 0.5);\nvec3 prevColor = vec3(0.0);for(int i = 0; i < MAX_STEPS; i++) {\nfloat traveled = length(marchPos - uv);\nfloat dist = SHADER_COST_RAYMARCH_HINT(traveled);if (dist >= lightDist) {\nbreak;\n}marchPos += step * mix(dist, 1., 0.4);\nvec4 texColor = texture(uTexture, marchPos / aspectRatio);rayDist = dist / lightDist;vec3 color = texColor.rgb;float colorDiff = length(color - prevColor);\nbool hit = colorDiff > 0.2500;\nif (hit && !hitObject) {\nhitObject = true;\nprevColor = color;\nif(dist < lightDist) {\nbreak;\n}\n} else {\nambient -= AMBIENT_STEP;\n}\n}rayDist = mix(rayDist * lightDist, rayDist, 1.0000 * 1.5);\nfloat lightMix = max(0.0, 1. - rayDist + ambient * 1.0000);\nvec3 lightColor = mix(vec3(1, 1, 1), sceneColor.rgb * vec3(1, 1, 1), lightMix);\nlightColor += vec3(1, 1, 1) * (sourceGlow * (0.04 + 1.0000 * 0.1) + sourceAccum);\nlightColor = Tonemap_tanh(sceneColor.rgb * lightColor);\nfloat dither = deband();\nlightColor += dither;\nvec4 color = vec4(lightColor, 1.);\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},"id":"8165636d-28dc-497b-a96e-fc92c4f80197","publicId":"2d_light"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"beam","usesPingPong":false,"texture":false,"animating":true,"mouseMomentum":0.07,"mouseSpring":0.09,"isMask":0,"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;\nprecision highp int;in vec2 vTextureCoord;uniform sampler2D uTexture;uniform float uTime;uniform vec2 uMousePos;\nuniform vec2 uResolution;\nvec3 blend (int blendMode, vec3 src, vec3 dst) {\nreturn 1. - (1. - src) * (1. - dst);\n}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}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}const float TAU = 6.28318530718;vec3 Tonemap_tanh(vec3 x) {\nx = clamp(x, -40.0, 40.0);\nreturn (exp(x) - exp(-x)) / (exp(x) + exp(-x));\n}out vec4 fragColor;const float PI = 3.14159265359;\nconst float TWO_PI = 2.0 * PI;float luma(vec3 color) {\nreturn dot(color, vec3(0.299, 0.587, 0.114));\n}mat2 rot(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}float sdBox(vec2 p, vec2 b) {\nvec2 q = abs(p)-b;\nreturn length(max(q,0.0)) + min(max(q.x,q.y),0.0);\n}float sdEquilateralTriangle(vec2 p, float r ) {\nconst float k = sqrt(3.0);\np.x = abs(p.x) - r;\np.y = p.y + r/k;\nif( p.x+k*p.y>0.0 ) p = vec2(p.x-k*p.y,-k*p.x-p.y)/2.0;\np.x -= clamp( p.x, -2.0*r, 0.0 );\nreturn -length(p)*sign(p.y);\n}float sdStar4(vec2 p, float r) {\nvec2 q = abs(p * 1./r * 0.15);\nr = max(r, 0.001);\nfloat power = 0.4;\nvec2 pn = q / r;\nfloat d = pow(pn.x, power) + pow(pn.y, power);\nreturn max(1. - 1./d, 0.0);\n}float sdDiamond(vec2 p, float r) {\np = abs(p);\nreturn (p.x + p.y - r) * 0.70710678118;\n}float sdPentagon( vec2 p, float r ) {\nconst vec3 k = vec3(0.809016994, 0.587785252, 0.726542528);\np.x = abs(p.x);\np -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);\np -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);\np -= vec2(clamp(p.x,-r*k.z,r*k.z),r);\nreturn length(p)*sign(p.y);\n}float sdHexagon( vec2 p, float r ) {\nconst vec3 k = vec3(-0.866025404, 0.5, 0.577350269);\np = abs(p);\np -= 2.0*min(dot(k.xy,p),0.0)*k.xy;\np -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\nreturn length(p)*sign(p.y);\n}float sdOctagon( vec2 p, float r ) {\nconst vec3 k = vec3(-0.9238795325, 0.3826834323, 0.4142135623 );\np = abs(p);\np -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);\np -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);\np -= vec2(clamp(p.x, -r*k.z, r*k.z), r);\nreturn length(p)*sign(p.y);\n}float sdVesica(vec2 p, float r) {\nfloat d = r;\nvec2 c1 = vec2(-d * 0.5, 0.0);\nvec2 c2 = vec2( d * 0.5, 0.0);\nreturn max(length(p - c1) - r, length(p - c2) - r);\n}float sdArchway(vec2 p, float r_param) {\np.y += 0.06;\nvec2 rect_half_extents = vec2(r_param, r_param);\nfloat d_rect = sdBox(p, rect_half_extents);vec2 circle_center = vec2(0.0, r_param);\nfloat d_disk = length(p - circle_center) - r_param;\nfloat d_plane_above_rect_top = r_param - p.y;\nfloat d_semicircle = max(d_disk, d_plane_above_rect_top);return min(d_rect, d_disk);\n}float sdX(vec2 p, float w) {\np = abs(p);\nfloat d1 = sdBox(rot(PI/4.0) * p, vec2(w, w * 0.3));\nfloat d2 = sdBox(rot(-PI/4.0) * p, vec2(w, w * 0.3));\nreturn min(d1, d2);\n}float sdRing(vec2 p, float r1, float r2) {\nreturn abs(length(p) - r1) - r2;\n}float getSDFShape(vec2 p, float r, int shapeType) {\nswitch(shapeType) {\ncase 6: return sdEquilateralTriangle(p, r);\ncase 7: return sdDiamond(p, r); break;\ncase 8: return sdPentagon(p, r); break;\ncase 9: return sdHexagon(p, r); break;\ncase 10: return sdOctagon(p, r); break;\ncase 11: return sdVesica(p, r); break;\ncase 12: return sdArchway(p, r * 0.75); break;\ncase 13: return sdX(p, r); break;\ncase 14: return sdRing(p, r, r * 0.2); break;\ncase 17: return sdStar4(p, r); break;\ndefault: return sdEquilateralTriangle(p, r);\n}\n}float drawSDFShape(vec2 uv, vec2 center, float scale, int shapeType, vec2 resolution, float skewVal, float angleVal, float thickness) {\nfloat aspect = resolution.x/resolution.y;\nuv.x *= aspect;\ncenter.x *= aspect;\nvec2 skew = vec2(skewVal, 1. - skewVal) * 2.;\nuv = uv * rot(angleVal * TWO_PI) * skew;\ncenter = center * rot(angleVal * TWO_PI) * skew;\nvec2 p = uv - center;\nfloat r = scale * 0.4;\nfloat sdf = getSDFShape(p, r, shapeType);\nfloat t = thickness * 0.8;\nfloat glow = t / max(0.0001, 1.0 - smoothstep(0.12, 0.01, abs(sdf) + 0.02));\nreturn glow * pow(1.0-abs(sdf), 3.0);\n}float getBeam(vec2 uv, vec2 pos, float radius, float angleVal, float skewVal, float thickness, float time, float phaseVal, vec2 resolution) {\nreturn drawSDFShape(uv, pos, radius, 13, resolution, skewVal, angleVal, thickness);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 bg = texture(uTexture, uv);\nvec2 pos = vec2(0.5329626957093254, 0.08218943498243192) + mix(vec2(0), (uMousePos-0.5), 0.1100);\nfloat beam = getBeam(uv, pos, 0.7540, 0.7479, 0.0600, 0.1000, uTime, 0.5000, uResolution);\nvec3 beamColor = beam * vec3(0.4, 0.1, 1);\nfloat ssBeam = beam / (beam + 1.0);\nbeamColor = mix(beamColor, vec3(0.4, 0.1, 1), mix(1.0, ssBeam, 0.0000)) * beam;float dither = deband();\nvec3 result = Tonemap_tanh(beamColor);\nfloat lum = luma(beamColor);\nresult += dither;float layerMix = 1.0000;\nvec4 color;vec3 blended = blend(4, result, bg.rgb);\ncolor = applyLayerMix(vec4(blended, 1.0), bg, layerMix);\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.25,"trackMouse":0.11,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false},"id":"8aa6fc3a-9c1a-46b6-b78e-ad8acfbb8577","publicId":"beam"},{"layerType":"flattened","id":"flat_2","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;\n\nuniform sampler2D uBgTexture;\nuniform float uL0_Time;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;\nuniform float uL0_ElemOpacity;\nuniform float uL1_Time;\nuniform float uL1_ElemOpacity;\n\nconst float PI = 3.14159265359;\nvec2 caLiquifiedUV_L0;\nvec2 caOriginalUV_L0;\nmat2 rotHalf_L1 = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.5));\n\nout vec4 fragColor;\n\nfloat ease (int easingFunc, float t) {\nreturn t;\n}\nmat2 rot_L0(float a) {\nreturn mat2(cos(a), -sin(a), sin(a), cos(a));\n}\nvec2 liquify_L0(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 * uL0_Time * 0.0125) * rot_L0(0.0000 * -2. * PI);\npos += drift;\nvec2 skew = mix(vec2(1), vec2(1, 0), 0.0000);\nst -= pos;\nst.x *= aspectRatio;\nst = st * rot_L0(0.0000 * 2. * PI);\nst *= skew;\nfloat freq = (5.0 * (0.0600 + 0.1));\nfloat t = uL0_Time * 0.025;\nfloat amplitude = 0.6700 * mix(0.2, 0.2/(0.0600 + 0.05), 0.25) * dist;\nfor (float i = 1.0;\ni <= 5.0;\ni++) {\nst = st * rot_L0(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}\nst /= skew;\nst = st * rot_L0(0.0000 * -2. * PI);\nst.x /= aspectRatio;\nst += pos;\nreturn st;\n}\nvec2 distortUV_L0(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)));\nif (dist <= 0.001) return uv;\nif (0.6700 <= 0.001) return uv;\nif (0.5000 <= 0.001) return uv;\nvec2 liquifiedUV = liquify_L0(uv, dist);\ncaLiquifiedUV_L0 = liquifiedUV;\ncaOriginalUV_L0 = uv;\nreturn mix(uv, liquifiedUV, 0.5000);\n}\nvec3 hash33_L1(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}\nfloat perlin_noise_L1(vec3 p) {\nvec3 pi = floor(p);\nvec3 pf = p - pi;\nvec3 w = pf * pf * (3.0 - 2.0 * pf);\nfloat n000 = dot(pf - vec3(0.0, 0.0, 0.0), hash33_L1(pi + vec3(0.0, 0.0, 0.0)));\nfloat n100 = dot(pf - vec3(1.0, 0.0, 0.0), hash33_L1(pi + vec3(1.0, 0.0, 0.0)));\nfloat n010 = dot(pf - vec3(0.0, 1.0, 0.0), hash33_L1(pi + vec3(0.0, 1.0, 0.0)));\nfloat n110 = dot(pf - vec3(1.0, 1.0, 0.0), hash33_L1(pi + vec3(1.0, 1.0, 0.0)));\nfloat n001 = dot(pf - vec3(0.0, 0.0, 1.0), hash33_L1(pi + vec3(0.0, 0.0, 1.0)));\nfloat n101 = dot(pf - vec3(1.0, 0.0, 1.0), hash33_L1(pi + vec3(1.0, 0.0, 1.0)));\nfloat n011 = dot(pf - vec3(0.0, 1.0, 1.0), hash33_L1(pi + vec3(0.0, 1.0, 1.0)));\nfloat n111 = dot(pf - vec3(1.0, 1.0, 1.0), hash33_L1(pi + vec3(1.0, 1.0, 1.0)));\nfloat 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);\nfloat nxy0 = mix(nx00, nx10, w.y);\nfloat nxy1 = mix(nx01, nx11, w.y);\nfloat nxyz = mix(nxy0, nxy1, w.z);\nreturn nxyz;\n}\nmat2 rot_L1(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}\nfloat fbm_L1 (in vec3 st, float amplitude, int octaves) {\nfloat value = 0.0;\nfloat amp = .25;\nfloat frequency = 0.;\nfloat aM = (0.1 + amplitude * .65);\nvec2 shift = vec2(100.0);\nfor (int i = 0;\ni < octaves;\ni++) {\nvalue += amp * perlin_noise_L1(st);\nst.xy *= rotHalf_L1 * 2.5;\nst.xy += shift;\namp *= aM;\n}\nreturn value;\n}\nvec2 distortUV_L1(vec2 uv) {\nfloat aspectRatio = uResolution.x/uResolution.y;\nfloat multiplier = 6.0 * (0.2000 / ((aspectRatio + 1.) / 2.));\nvec2 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 mDist = ease(0, max(0.,1.-distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.0000)));\nif(mDist <= 0.001) {\nreturn uv;\n}\nif(0.5000 <= 0.001) {\nreturn uv;\n}\nvec2 skew = mix(vec2(1), vec2(1, 0), 0.0000);\nvec2 st = ((uv - pos) * vec2(aspectRatio, 1)) * multiplier * aspectRatio;\nst = rot_L1(0.0000 * -2. * PI) * st * skew;\nvec2 drift = vec2(0, uL1_Time * 0.005) * (0.5000 * 2.);\nfloat time = uL1_Time * 0.025;\nvec2 r = vec2(\nfbm_L1(vec3(st - drift + vec2(1.7, 9.2), 0.0000*25. + time), 0.5000, 6),\nfbm_L1(vec3(st - drift + vec2(8.2, 1.3), 0.0000*25. + time), 0.5000, 6)\n);\nfloat f = fbm_L1(vec3(st + r - drift, 0.0000*25. + time), 0.5000, 6) * 0.5000;\nvec2 offset = (f * 2. + (r * 0.5000));\nreturn uv + offset * mDist;\n}\n\nvec4 computeLayer_L0(vec2 uv) {\nvec2 distortedUV = distortUV_L0(uv);\nvec4 color = texture(uBgTexture, distortedUV);\nvec2 dir = caLiquifiedUV_L0 - caOriginalUV_L0;\nfloat distanceUv = length(dir);\nif (distanceUv > 0.001) {\nvec2 normalizedUv = dir / distanceUv;\nfloat chromAbb = 1.0000 * 0.5;\nvec2 offsetR = caLiquifiedUV_L0 + chromAbb * normalizedUv * distanceUv;\nvec2 offsetB = caLiquifiedUV_L0 - chromAbb * normalizedUv * distanceUv;\nvec4 colorR = texture(uBgTexture, mix(caOriginalUV_L0, offsetR, 0.5000));\nvec4 colorB = texture(uBgTexture, mix(caOriginalUV_L0, offsetB, 0.5000));\ncolor = vec4(colorR.r, color.g, colorB.b, colorR.a * color.a * colorB.a);\n}\nreturn color;\n}\n\nvoid main() {\nvec2 uv = vTextureCoord;\nvec2 uv_z1_raw = distortUV_L1(uv);\nvec2 uv_z1 = mix(uv, uv_z1_raw, clamp(uL1_ElemOpacity, 0.0, 1.0));\nvec4 topOcc = vec4(0.0);\nvec4 occ0 = computeLayer_L0(uv_z1);\nocc0 *= uL0_ElemOpacity;\ntopOcc = topOcc + occ0 * (1.0 - topOcc.a);\nif (topOcc.a >= 0.9999) { fragColor = topOcc; return; }\nvec4 result = vec4(0.0);\nvec4 c0 = occ0;\nresult = c0 + result * (1.0 - c0.a);\nfragColor = result;\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;\nin vec3 aVertexPosition;\nin vec2 aTextureCoord;\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nout vec2 vTextureCoord;\nout vec3 vVertexPosition;\nvoid main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvVertexPosition = aVertexPosition;\nvTextureCoord = aTextureCoord;\n}"],"sublayers":[{"id":"d3cf9e6b-6816-494c-8f9a-40b49aa182cf","publicId":"liquify","layerType":"effect","type":"liquify","sublayerIndex":0,"opacity":1,"animating":true},{"id":"8aa3cfe1-99bf-4b3f-a5f8-5f629ce97a8c","publicId":"fbm","layerType":"effect","type":"fbm","sublayerIndex":1,"opacity":1,"animating":true}],"data":{"uniforms":{"resolution":{"name":"uResolution","type":"2f","value":{"type":"Vec2","_x":1080,"_y":1080}},"mousePos":{"name":"uMousePos","type":"2f","value":{"type":"Vec2","_x":0.5,"_y":0.5}},"L0_time":{"name":"uL0_Time","type":"1f","value":0},"L0_elemOpacity":{"name":"uL0_ElemOpacity","type":"1f","value":1},"L1_time":{"name":"uL1_Time","type":"1f","value":0},"L1_elemOpacity":{"name":"uL1_ElemOpacity","type":"1f","value":1}},"textures":[],"timeUniforms":[{"key":"L0_time","speed":0.25,"animating":true},{"key":"L1_time","speed":0.25,"animating":true}],"mouseUniforms":[],"hasMouseTracking":false,"hasVideoSublayers":false,"estimatedSublayerWorkRaw":310,"occlusion":{"candidateLayers":0}},"states":{"appear":[],"scroll":[],"hover":[],"mousemove":[]},"breakpoints":[],"userDownsample":1,"visible":true},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"sdf_shape","usesPingPong":false,"texture":{"src":"/assets/cjt-logo-mark.svg","name":"","svgSrc":"","thumb":"","sampler":"uCustomTexture"},"animating":true,"mouseMomentum":1,"mouseSpring":0,"isMask":0,"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;\nprecision highp int;in vec2 vTextureCoord;\nuniform sampler2D uTexture;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 sdBlobbyCross(vec2 pos, float he) {\npos = abs(pos);\npos = vec2(abs(pos.x - pos.y), 1.0 - pos.x - pos.y) / sqrt(2.0);float p = (he - pos.y - 0.25 / he) / (6.0 * he);\nfloat q = pos.x / (he * he * 16.0);\nfloat h = q * q - p * p * p;float x;if (h > 0.0) {\nfloat r = sqrt(h);\nx = pow(q + r, 1.0 / 3.0) - pow(abs(q - r), 1.0 / 3.0) * sign(r - q);\n} else {\nfloat r = sqrt(p);\nx = 2.0 * r * cos(acos(q / (p * r)) / 3.0);\n}\nx = min(x, sqrt(2.0) / 2.0);vec2 z = vec2(x, he * (1.0 - 2.0 * x * x)) - pos;\nreturn length(z) * sign(z.y);\n}float roundedCross(vec3 p, float r) {\np *= ROT_Y_90;\np *= ROT_X_90;\nfloat d = sdBlobbyCross(p.xy * 0.6, r * (0.1 + 0.4 * 0.5000));\nreturn opExtrusion(p, d, 0.2500);\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.3320, 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.0000);\nvec2 axis = vec2(-1. * vec3(0.6585365853658537, 0.5613240418118467, 0.4995).y - 1. + mousePos.y/PI, vec3(0.6585365853658537, 0.5613240418118467, 0.4995).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.6585365853658537, 0.5613240418118467, 0.4995).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 roundedCross(p, 1.);\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.3320, 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.2000);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 texture(uTexture, vTextureCoord);\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(0.13333333333333333, 1, 0.6549019607843137), 1. - 0.7800);\nvec3 fresnelEffect = vec3(0.0);fresnelEffect = fresnel(rd, entryNormal, 8.0) * 0.5000 * vec3(0.13333333333333333, 1, 0.6549019607843137);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(0.13333333333333333, 1, 0.6549019607843137) * lightAndShadow, 0.7800);\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);if(0.3320 <= 0.0001 || 1.0000 <= 0.0001) {\ncol = vec4(0);\nif(1 == 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(bg, col, 1.0000);\nfragColor = col;}"],"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.66,"trackMouseMove":0,"trackAxes":"xy","trackMouse":0,"data":{"depth":false,"uniforms":{},"isBackground":false},"id":"5b0910dd-dab4-49e8-be35-3456ec9fe449","publicId":"3d_shape"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"outline","usesPingPong":false,"texture":false,"animating":false,"mouseMomentum":0,"mouseSpring":0,"isMask":0,"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;uniform sampler2D uTexture;\nuniform vec2 uResolution;\nvec3 blend (int blendMode, vec3 src, vec3 dst) {\nreturn src + dst;\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}out vec4 fragColor;float luma(vec3 c) {\nreturn dot(c, vec3(0.299, 0.587, 0.114));\n}float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}void main() {\nvec2 uv = vTextureCoord;float thickness = 0.5000;vec2 pixel = (1.0 / uResolution) * max(thickness * 4.0, 0.001);\nfloat noise = interleavedGradientNoise(gl_FragCoord.xy);pixel *= mix(1.0, noise, 0.1);float tl = luma(texture(uTexture, uv + pixel * vec2(-1, -1)).rgb);\nfloat t = luma(texture(uTexture, uv + pixel * vec2( 0, -1)).rgb);\nfloat tr = luma(texture(uTexture, uv + pixel * vec2( 1, -1)).rgb);\nfloat l = luma(texture(uTexture, uv + pixel * vec2(-1, 0)).rgb);\nfloat r = luma(texture(uTexture, uv + pixel * vec2( 1, 0)).rgb);\nfloat bl = luma(texture(uTexture, uv + pixel * vec2(-1, 1)).rgb);\nfloat b = luma(texture(uTexture, uv + pixel * vec2( 0, 1)).rgb);\nfloat br = luma(texture(uTexture, uv + pixel * vec2( 1, 1)).rgb);float gx = -tl - 2.0 * l - bl + tr + 2.0 * r + br;\nfloat gy = -tl - 2.0 * t - tr + bl + 2.0 * b + br;\nfloat edge = length(vec2(gx, gy));float soft = max(1.0000 * 0.5, 0.001);\nedge = smoothstep(0.5000 - soft, 0.5000 + soft, edge);\nedge *= (0.5000 * 2.0);vec4 scene = texture(uTexture, uv);\nvec3 outline = vec3(1, 1, 1) * edge;\nvec3 blended = outline;blended = blend(1, outline, scene.rgb);vec4 col = applyLayerMix(vec4(blended, 1.0), scene, 0.2600);\nfragColor = col;}"],"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},"id":"93276b65-8868-4927-b8c2-3d544b46bb88","publicId":"outline"},{"layerType":"flattened","id":"flat_6","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;\n\nuniform sampler2D uBgTexture;\nuniform vec2 uMousePos;\nuniform vec2 uResolution;\nuniform float uL0_ElemOpacity;\nuniform float uL1_Time;\nuniform float uL1_ElemOpacity;\nuniform float uL2_Time;\nuniform float uL2_ElemOpacity;\nuniform float uL3_Time;\nuniform float uL3_ElemOpacity;\n\nconst float MAX_ITERATIONS = 32.0;\nconst int MAX_LEVEL = 4;\nconst float TAU = 6.28318530718;\nconst 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);\nvec2 caUV_L3;\nvec3 caDistort_L3;\nfloat caDist_L3;\nfloat caAmount_L3;\n\nout vec4 fragColor;\n\nfloat interleavedGradientNoise_L0(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\n}\nvec4 godRays_L0(vec2 st) {\nvec3 color = vec3(0);\nfloat decay = mix(0.89, 0.965, 0.7800);\nvec2 pos = vec2(0.3722460220318238, 0.6297429620563035) - mix(vec2(0), (vec2(1. - uMousePos.x, 1. - uMousePos.y) - 0.5), 0.0000);\nfloat weight = 1.0;\nvec2 stepDir = (pos - st) / MAX_ITERATIONS * (0.25 + min(1., 0.7800)) * 0.75;\nfloat noise = interleavedGradientNoise_L0(st * uResolution);\nvec2 sampleUv = st + stepDir * noise;\nvec2 perpDir = vec2(-stepDir.y, stepDir.x);\nfloat intensity = 2.8 * 0.9000;\nfor (float i = 0.0;\ni < MAX_ITERATIONS;\ni++) {\nfloat theta = i/MAX_ITERATIONS;\nsampleUv += stepDir + (perpDir * theta * sin((noise * 0.25) * (1.0 + theta) * 50.0)) * 0.0000 * 0.25;\nvec4 samp = texture(uBgTexture, sampleUv);\nfloat lum = dot(samp.rgb, vec3(0.299, 0.587, 0.114));\nfloat thresh = smoothstep(0.4000 - 0.1, 0.4000, lum);\ncolor += samp.rgb * thresh * weight * intensity;\nweight *= decay;\nif(weight < 0.05) break;\n}\nreturn vec4(color / MAX_ITERATIONS, 1.0);\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}\nfloat randFibo(vec2 p) {\nuvec2 v = floatBitsToUint(p);\nv = pcg2d(v);\nuint r = v.x ^ v.y;\nreturn float(r) / float(0xffffffffu);\n}\nfloat getBayerFromCoordLevelScaled_L1(vec2 pixelpos, float scale) {\nfloat finalBayer = 0.0;\nfloat finalDivisor = 0.0;\nfloat layerMult = 1.0;\nfor(float bayerLevel = float(MAX_LEVEL);\nbayerLevel >= 1.0;\nbayerLevel--) {\nfloat bayerSize = exp2(bayerLevel) * 0.5 / scale;\nvec2 bayercoord = mod(floor(pixelpos.xy / bayerSize), 2.0);\nlayerMult *= 4.0;\nfloat byxx2 = bayercoord.x * 2.0;\nfinalBayer += mix(byxx2, 3.0 - byxx2, bayercoord.y) / 3.0 * layerMult;\nfinalDivisor += layerMult;\n}\nreturn (finalBayer / finalDivisor - 0.006);\n}\nfloat getBayerNoise_L1(vec2 st, float delta, float scale) {\nvec2 center = uResolution * 0.5;\nvec2 centered = st * uResolution - center;\nvec2 offset = vec2(\nmod(delta * 0.618033988749895, 16.0),\nmod(delta * 0.381966011250105, 16.0)\n) * 20.;\nvec2 final = (centered + center + offset);\nreturn getBayerFromCoordLevelScaled_L1(final, scale);\n}\nvec3 dither_L1(vec3 color, vec2 st) {\nfloat delta = floor(uL1_Time);\nvec2 offset = vec2(randFibo(vec2(123,16) + delta), randFibo(vec2(56,96) + delta));\nfloat noise = 0.0;\nnoise = getBayerNoise_L1(st, delta, 0.5);\nfloat dither_threshold = max(0.0001, 0.5000);\nfloat num_levels = 1.0 / dither_threshold;\nreturn floor(color * num_levels + noise) / num_levels;\n}\nvec3 getColor_L2(int index) {\nswitch(index) {\ncase 0: return vec3(0, 0, 0);\ncase 1: return vec3(0.0196078431372549, 0.3411764705882353, 0.1803921568627451);\ncase 2: return vec3(0.043137254901960784, 0.5215686274509804, 0.2901960784313726);\ncase 3: return vec3(0.06274509803921569, 0.7137254901960784, 0.403921568627451);\ncase 4: return vec3(0.13333333333333333, 1, 0.6549019607843137);\ncase 5: return vec3(0.807843137254902, 1, 0.8666666666666667);\ndefault: return vec3(0.0);\n}\n}\nfloat getStop_L2(int index) {\nswitch(index) {\ncase 0: return 0.0000;\ncase 1: return 0.2000;\ncase 2: return 0.4000;\ncase 3: return 0.6000;\ncase 4: return 0.8000;\ncase 5: return 1.0000;\ndefault: return 0.0;\n}\n}\nfloat deband_L2() {\nreturn (randFibo(gl_FragCoord.xy) - 0.5) / 255.0;\n}\nfloat luma_L2(vec3 color) {\nreturn dot(color, vec3(0.299, 0.587, 0.114));\n}\nvec3 linear_from_srgb_L2(vec3 rgb) {\nreturn pow(max(rgb, vec3(0.0)), vec3(2.2));\n}\nvec3 srgb_from_linear_L2(vec3 lin) {\nreturn pow(max(lin, vec3(0.0)), vec3(1.0/2.2));\n}\nvec3 safeCbrt_L2(vec3 v) {\nreturn sign(v) * pow(abs(v), vec3(1.0/3.0));\n}\nvec3 oklab_mix_L2(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_L2(kCONEtoLMS*lin1);\nvec3 lms2 = safeCbrt_L2(kCONEtoLMS*lin2);\nvec3 lms = mix(lms1, lms2, a);\nlms *= 1.0 + 0.02 * a * (1.0 - a);\nreturn kLMStoCONE*(lms*lms*lms);\n}\nvec3 getGradientColor_L2(float position) {\nposition = clamp(position, 0.0, 1.0);\nint count = 6 - 1;\nfor (int i = 0;\ni < count;\ni++) {\nfloat colorPosition = getStop_L2(i);\nfloat nextColorPosition = getStop_L2(i + 1);\nif (position <= nextColorPosition) {\nfloat stopDelta = nextColorPosition - colorPosition;\nfloat mixFactor = clamp(stopDelta > 0.0001 ? (position - colorPosition) / stopDelta : 0.0, 0.0, 1.0);\nvec3 linStart = linear_from_srgb_L2(getColor_L2(i));\nvec3 linEnd = linear_from_srgb_L2(getColor_L2(i + 1));\nvec3 mixedLin = oklab_mix_L2(linStart, linEnd, mixFactor);\nreturn srgb_from_linear_L2(mixedLin);\n}\n}\nreturn getColor_L2(count);\n}\nfloat ease_L3 (int easingFunc, float t) {\nreturn t;\n}\nmat2 rot_L3(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}\nvec2 scaleAspect_L3(vec2 st) {\nreturn st * vec2(uResolution.x / uResolution.y, 1.0);\n}\nvec2 unscaleAspect_L3(vec2 st) {\nreturn st * vec2(uResolution.y / uResolution.x, 1.0);\n}\nvec2 scaleAspect_L3(vec2 st, float aspectRatio) {\nreturn st * vec2(aspectRatio, 1.0);\n}\nfloat smoothSegment_L3(float s) {\nreturn mix(s, smoothstep(0.0, 0.5, s) - smoothstep(0.5, 1.0, s), 0.0000);\n}\nvec3 channelDistort_L3(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}\nvec2 applyStyle_L3(vec2 st, vec2 pos, float angle) {\nst = rot_L3(angle * 2. * PI) * (st - pos) + pos;\nst = unscaleAspect_L3(st);\nreturn st;\n}\nvec2 style0_L3(vec2 st, vec2 pos, float divisions, float dist, float amount, float angle, out vec3 d) {\nfloat segment = smoothSegment_L3(fract((st.y + 1. - pos.y - 1. + uL3_Time * 0.01) * divisions));\nd = channelDistort_L3(segment);\nst.y -= pow(d.r, dist) / 10. * amount;\nst.y += pow(d.b, dist) / 10. * amount;\nreturn applyStyle_L3(st, pos, angle);\n}\nvec2 getStyle_L3(vec2 st, vec2 pos, float divisions, float dist, float amount, float angle, out vec3 d) {\nreturn style0_L3(st, pos, divisions, dist, amount, angle, d);\n}\nvec2 distortUV_L3(vec2 uv) {\nfloat aspectRatio = uResolution.x / uResolution.y;\nvec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos - 0.5), 0.0000);\nfloat mDist = ease_L3(0, max(0., 1. - distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.0000)));\nvec2 pos = scaleAspect_L3(mix(vec2(0.5, 0.5), mPos, floor(1.0000)));\nvec2 st = scaleAspect_L3(uv);\nst = rot_L3(0.0000 * -2.0 * PI) * (st - pos) + pos;\nfloat divisions = 2. + 0.5000 * 30.;\nfloat dist = 0.2000 * 4. + 1.;\nfloat amount = 0.5000 * mDist;\ncaDist_L3 = dist;\ncaAmount_L3 = amount;\ncaUV_L3 = uv;\ncaDistort_L3 = vec3(0.0);\nif (abs(amount) <= 0.001) return uv;\nvec2 texelX = dFdx(st) * 1.5;\nvec2 texelY = dFdy(st) * 1.5;\nvec3 distort;\nvec3 scratchDistort;\nvec2 result = getStyle_L3(st, pos, divisions, dist, amount, 0.0000, distort);\nvec2 result1 = getStyle_L3(st + texelX, pos, divisions, dist, amount, 0.0000, scratchDistort);\nvec2 result2 = getStyle_L3(st + texelY, pos, divisions, dist, amount, 0.0000, scratchDistort);\nvec2 result3 = getStyle_L3(st - texelX, pos, divisions, dist, amount, 0.0000, scratchDistort);\nvec2 result4 = getStyle_L3(st - texelY, pos, divisions, dist, amount, 0.0000, scratchDistort);\ncaUV_L3 = result;\ncaDistort_L3 = distort;\nreturn (result + result1 + result2 + result3 + result4) / 5.;\n}\n\nvec4 computeLayer_L0(vec2 uv) {\nvec4 bg = texture(uBgTexture, uv);\nif(0.9000 <= 0.01) {\nvec4 color = bg;\nreturn color;\n}\nvec4 rays = godRays_L0(uv);\nrays.rgb *= vec3(1, 1, 1);\nvec4 color = vec4(bg.rgb + rays.rgb, bg.a + rays.r);\nreturn color;\n}\nvec4 computeLayer_L1(vec2 uv, vec4 prevLayerColor) {\nfloat delta = floor(uL1_Time);\nvec4 color = prevLayerColor;\ncolor.rgb = mix(color.rgb, dither_L1(color.rgb, vTextureCoord), 0.5000);\nreturn color;\n}\nvec4 computeLayer_L2(vec2 uv, vec4 prevLayerColor, float sharedDither) {\nvec4 color = prevLayerColor;\nif(color.a > 0.001) {\nfloat position = smoothstep(0., 1., luma_L2(color.rgb)) * (0.4000 * 2.);\nfloat posOffset = (dot(vec2(0.5, 0.5).x, vec2(0.5, 0.5).y) + 0.2600 + 0.0001) * 2.;\nposition -= (uL2_Time*0.01 + posOffset);\nfloat cycle = floor(position);\nbool reverse = 1.0000 > 0.5 && int(cycle) % 2 == 0;\nfloat animatedPos = reverse ? fract(-position) : fract(position);\nanimatedPos = reverse ? fract(-position) : fract(position);\nanimatedPos = clamp(animatedPos, 0.0, 1.0);\nvec3 gradientColor = getGradientColor_L2(animatedPos);\nfloat dither = sharedDither;\ngradientColor += dither;\nvec3 mixedColor = mix(color.rgb, gradientColor, 1.0000);\ncolor.rgb = mixedColor;\n}\nreturn color;\n;\n}\n\nvoid main() {\nvec2 uv = vTextureCoord;\nfloat sharedDither = deband_L2();\nvec2 uv_z1_raw = distortUV_L3(uv);\nvec2 uv_z1 = mix(uv, uv_z1_raw, clamp(uL3_ElemOpacity, 0.0, 1.0));\nvec4 result = vec4(0.0);\nvec4 c0 = computeLayer_L0(uv_z1);\nc0 *= uL0_ElemOpacity;\nresult = c0 + result * (1.0 - c0.a);\nvec4 c1 = computeLayer_L1(uv_z1, result);\nc1 *= uL1_ElemOpacity;\nresult = c1 + result * (1.0 - c1.a);\nvec4 c2 = computeLayer_L2(uv_z1, result, sharedDither);\nc2 *= uL2_ElemOpacity;\nresult = c2 + result * (1.0 - c2.a);\nfragColor = result;\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;\nin vec3 aVertexPosition;\nin vec2 aTextureCoord;\nuniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nout vec2 vTextureCoord;\nout vec3 vVertexPosition;\nvoid main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvVertexPosition = aVertexPosition;\nvTextureCoord = aTextureCoord;\n}"],"sublayers":[{"id":"c1608ff5-81d5-411d-9b29-4224d8d0205f","publicId":"god_rays","layerType":"effect","type":"godrays","sublayerIndex":0,"opacity":1,"animating":false},{"id":"2b4f0e9b-f07c-40ad-ba4b-c270b6ff3b44","publicId":"dither","layerType":"effect","type":"dither","sublayerIndex":1,"opacity":1,"animating":false,"texture":{"src":"/assets/unicorn/blue_noise_med.png","sampler":"uBlueNoise"}},{"id":"7ad15378-1e19-42ec-8443-65e86ef2f0a8","publicId":"gradient_map","layerType":"effect","type":"gradientMap","sublayerIndex":2,"opacity":1,"animating":false},{"id":"25d00597-e155-485c-84da-e5d51cf14ce3","publicId":"blinds","layerType":"effect","type":"blinds","sublayerIndex":3,"opacity":1,"animating":true}],"data":{"uniforms":{"resolution":{"name":"uResolution","type":"2f","value":{"type":"Vec2","_x":1080,"_y":1080}},"mousePos":{"name":"uMousePos","type":"2f","value":{"type":"Vec2","_x":0.5,"_y":0.5}},"L0_elemOpacity":{"name":"uL0_ElemOpacity","type":"1f","value":1},"L1_time":{"name":"uL1_Time","type":"1f","value":0},"L1_elemOpacity":{"name":"uL1_ElemOpacity","type":"1f","value":1},"L2_time":{"name":"uL2_Time","type":"1f","value":0},"L2_elemOpacity":{"name":"uL2_ElemOpacity","type":"1f","value":1},"L3_time":{"name":"uL3_Time","type":"1f","value":0},"L3_elemOpacity":{"name":"uL3_ElemOpacity","type":"1f","value":1}},"textures":[{"sampler":"uBlueNoise","type":"media","src":"/assets/unicorn/blue_noise_med.png","sublayerIndex":1}],"timeUniforms":[{"key":"L3_time","speed":0.5,"animating":true}],"mouseUniforms":[],"hasMouseTracking":false,"hasVideoSublayers":false,"estimatedSublayerWorkRaw":372.2855543593206,"occlusion":{"candidateLayers":0}},"states":{"appear":[],"scroll":[],"hover":[],"mousemove":[]},"breakpoints":[],"userDownsample":1,"visible":true}],"options":{"name":"Card 1","fps":60,"dpi":1.5,"scale":1,"includeLogo":false,"isProduction":false,"flatten":true},"version":"2.1.12","id":"dqueyCAJjUGKeGI7HIrl"}