{"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\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec2 vTextureCoord;uniform vec2 uMousePos;const float PI = 3.14159265359;vec2 rotate(vec2 coord, float angle) {\nfloat s = sin(angle);\nfloat c = cos(angle);\nreturn vec2(\ncoord.x * c - coord.y * s,\ncoord.x * s + coord.y * c\n);\n}out vec4 fragColor;vec3 getBgColor(vec2 uv) {return vec3(0.011764705882352941, 0.023529411764705882, 0.06666666666666667);\n}void main() {vec2 uv = vTextureCoord;\nvec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nuv -= pos;\nuv /= max(0.5000*2., 1e-5);\nuv = rotate(uv, (0.0000 - 0.5) * 2. * PI);\nvec4 color = vec4(getBgColor(uv), 1.0) * 1.0000;\nfragColor = color;\n}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = aTextureCoord;\n}"],"speed":0.25,"trackMouse":0,"trackAxes":"xy","data":{"downSample":0.5,"depth":false,"uniforms":{},"isBackground":true},"id":"13d92756-3b5f-4316-b750-87d1caf85ae3","publicId":"gradient"},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"nebula","usesPingPong":false,"texture":false,"animating":true,"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 mediump int;in vec2 vTextureCoord;\nin vec3 vVertexPosition;uniform sampler2D uTexture;uniform vec2 uMousePos;\nuniform vec2 uResolution;uniform float uTime;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 TAU = 6.28318530718;\nconst float PI = 3.14159265359;const mat3 GOLD = mat3(\n-0.571464913, +0.814921382, +0.096597072,\n-0.278044873, -0.303026659, +0.911518454,\n+0.772087367, +0.494042493, +0.399753815);const mat3 GOLD_PHI = mat3(\n-0.924648, -0.449886, 1.249265,\n1.318571, -0.490308, 0.800377,\n0.156297, 1.474868, 0.646816);const mat3 ROT1 = mat3(-0.57, 0.81, 0.10, -0.28, -0.30, 0.91, 0.77, 0.49, 0.40);\nconst mat3 ROT2 = mat3(0.1746, -0.6561, 0.7314, 0.9452, 0.3072, 0.0211, -0.2389, 0.6865, 0.6863);float interleavedGradientNoise(vec2 st) {\nreturn fract(52.9829189 * fract(dot(st, vec2(0.06711056, 0.00583715))));\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);vec3 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 Tonemap_ACES(vec3 x) {\nconst float a = 2.51;\nconst float b = 0.03;\nconst float c = 2.43;\nconst float d = 0.59;\nconst float e = 0.14;\nreturn (x * (a * x + b)) / (x * (c * x + d) + e);\n}vec3 pal( in float t, in vec3 a, in vec3 b, in vec3 c, in vec3 d ) {\nreturn a + b*cos( TAU*(c*t+d) );\n}float dot_noise(vec3 p) {\nreturn dot(cos(GOLD * p), sin(GOLD_PHI * p));\n}float sdCircle(vec2 uv, vec2 scale) {\nvec2 scaledUv = uv / scale;\nreturn length(scaledUv) - 1.0;\n}mat2 rot(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}float getDistance(vec2 uv, float scale) {\nvec2 finalScale = scale * vec2(1.0 - -0.6200 * 0.5, 1.0 + -0.6200 * 0.5);\nfinalScale *= mix(0.8, 1.2, 0.6900);\nreturn sdCircle(uv, finalScale);\n}float density(vec3 q, float amplitude, float depth, vec2 skew) {\nfloat d = 0.0;\nfloat fd = 0.0;q.xy = (q.xy - 0.5) * skew + 0.5;\nq.z = q.z * depth;\nfloat n = dot_noise(q * vec3(1.6, 0.8, 1.1)) - 0.2;\nd += amplitude * n;\nfloat val = d * 0.5 + 0.5;\nfd += max(0.0, val) * amplitude;\nq = (ROT1 * (q * vec3(0.8, 1.6, 0.9))) * 2.2 + vec3(1.025, 0.575, 0.425);\namplitude *= 0.5 + 0.5 * (n * 0.5);\nn = dot_noise(q) - 0.2;\nd += amplitude * n;\nval = d * 0.5 + 0.5;\nfd += (val * val) * amplitude;\nq = (ROT2 * (q * vec3(1.6, 0.8, 1.1))) * 2.6 + vec3(2.05, 1.15, 0.85);\namplitude *= 0.5 + 0.5 * abs(n);\nn = dot_noise(q) + 0.2;\nd += amplitude * n;\nval = d * 0.5 + 0.5;\nfd += (val * val) * amplitude;\nreturn fd;\n}const int ITERATIONS = 40;void main() {\nvec2 aspect = vec2(uResolution.x / uResolution.y, 1.0);\nvec2 uv = vTextureCoord;\nvec4 bg = texture(uTexture, uv);\nvec2 pos = vec2(1.0037906082116483, 1.0969257978214388) + (uMousePos - 0.5) * 0.0000;\nfloat mDist = length(uv * aspect - vec2(1.0037906082116483, 1.0969257978214388) * aspect + (uMousePos - 0.5) * aspect);\nmDist = smoothstep(0.0, 0.5, (0.05/mDist) * 2.0);\nvec2 sdfUv = (uv - vec2(1.0037906082116483, 1.0969257978214388) - vec2(0, 0)) * aspect;\nfloat angleRad = 0.0000 * -TAU;\nmat2 rotationMatrix = rot(angleRad);\nsdfUv = rotationMatrix * sdfUv;vec2 mouseOffset = rotationMatrix * ((uMousePos - 0.5) * 0.0000 * aspect);\nsdfUv -= mouseOffset;float sdf = getDistance(sdfUv, 2.0000);\nfloat ampSdf = smoothstep(0.1, 0.6900 * 1.5, -sdf);\nvec3 col = vec3(0.0);\nfloat transmittance = 1.0;\nfloat depthClip = 0.0000;if(ampSdf > 0.0) {\nvec2 uvCentered = (uv - vec2(1.0037906082116483, 1.0969257978214388)) * aspect;vec3 ro = vec3(pos.x, pos.y, -3.0);\nvec3 rd = normalize(vec3(uvCentered, 1.0));float MAX_DIST = 1.0 + (0.9300 * 2.0);\nfloat baseStep = MAX_DIST / float(ITERATIONS);float ign = interleavedGradientNoise(uResolution * vTextureCoord);float t = baseStep * ign * 0.999;\nfloat wrappedTime = (uTime) * 0.05 + 0.0000 * 50.0;vec3 colorCenter = oklab_mix(vec3(0.20392156862745098, 0.3411764705882353, 0.8352941176470589), vec3(0.8941176470588236, 0.9294117647058824, 1), 0.5);\nvec3 colorDelta = oklab_mix(vec3(0.8941176470588236, 0.9294117647058824, 1), vec3(0.20392156862745098, 0.3411764705882353, 0.8352941176470589), 0.5);float absorptionFactor = baseStep * mix(-2.0, -6.0, 0.2000);\nfloat scale = mix(2.0, 8.0, 0.7700);float lastDensity = 0.0;\nfloat ampBase = mix(0.2, 1.2, 0.9400) * 2.0;\nfloat amplitude = mix(ampBase, ampBase * ampSdf, depthClip);vec3 q_ro = ro * scale + vec3(-vec3(-0.65, 0, 0.8).x, vec3(-0.65, 0, 0.8).y, vec3(-0.65, 0, 0.8).z + (0.9300 * 2.0)) * wrappedTime;\nvec3 q_rd = rd * scale;float maxDepthFull = MAX_DIST;\nfloat maxDepthClipped = MAX_DIST * (0.2 + 0.8 * ampSdf * ampSdf);\nfloat maxDepth = mix(maxDepthFull, maxDepthClipped, depthClip);int emptySteps = 0;\nfloat accumulatedLight = 0.0;\nbool hit = false;\nfloat densityThreshold = 0.0001;\nfloat saturationThreshold = 0.33;\nint maxEmptySteps = 20;\nfloat depth = mix(1.0, 0.001, 0.9300);\nvec2 skew = vec2(1.0 - 0.4800 * 0.5, 1.0 + 0.4800 * 0.5);\nfor(int i = 0; i < ITERATIONS; i++) {\nif(transmittance < 0.01 || t > maxDepth) break;\nif(!hit && emptySteps > maxEmptySteps) break;\nif(accumulatedLight > saturationThreshold) break;float step = ro.z + rd.z * t;vec3 q = q_ro + q_rd * t;\nfloat d = density(q, amplitude, depth, skew);float dr = t / maxDepth;\nfloat stepSS = smoothstep(-3.0, -2.0, step);\nfloat zFadeFull = stepSS * (1.0 - dr * dr);\nfloat zFadeClipped = stepSS * (1.0 - dr * dr * (1.0 - ampSdf));\nfloat zFade = mix(zFadeFull, zFadeClipped, depthClip);\nd *= zFade;lastDensity = d;if(d > densityThreshold) {\nfloat d_val = 0.25 / max(d, 0.0001);\nfloat atten = smoothstep(0.0, 1.0, d_val);\nfloat chroma = 0.5;vec3 mixed = pal(\natten,\ncolorCenter,\ncolorDelta,\nvec3(1.0 - chroma, 1.0, 1.0 + chroma),\nvec3(chroma, 0.0, -chroma)\n);vec3 light = mixed * atten;\nfloat absorption = exp(-d * baseStep * 20.0);\nvec3 contribution = light * d * transmittance * absorptionFactor;\ncol += contribution;\naccumulatedLight += abs(dot(contribution, vec3(0.299, 0.587, 0.114)));\ntransmittance *= absorption;\nemptySteps = 0;\nhit = true;\n} else {\nemptySteps++;\n}t += baseStep;\n}\n}\nfloat maskStrength = mix(ampSdf, 1.0, depthClip);\ncol = Tonemap_ACES(col * maskStrength);vec3 blended;\nfloat alpha = 1.0;transmittance = mix(1.0, transmittance, maskStrength);\ntransmittance = smoothstep(0.0, 1.0, transmittance);\nblended = col + bg.rgb * transmittance;\nalpha = max(bg.a, 1.0 - transmittance); - transmittance;vec4 color = applyLayerMix(vec4(blended, alpha), bg, 1.0000);\nfragColor = color;}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"speed":0.2,"trackMouse":0,"trackAxes":"xy","data":{"depth":false,"uniforms":{},"isBackground":false,"texture":{"src":"https://assets.unicorn.studio/media/blue_noise_med.png","sampler":"uBlueNoise"}},"id":"c4f3dda6-931d-4137-9c5d-027f4d36f34b","publicId":"nebula"},{"breakpoints":[],"aspectRatio":1.9921875,"userDownsample":1,"states":{"appear":[],"scroll":[],"hover":[],"mousemove":[]},"effects":[],"anchorPoint":"center","mask":0,"maskInvert":0,"maskDepth":0,"maskDepthLayer":0,"layerType":"text","width":0.42230555555555555,"widthMode":"relative","height":285.12,"heightMode":"fixed","left":0.5,"top":0.6988888888888889,"rotation":0,"fontSize":0.066,"lineHeight":1,"letterSpacing":-0.05,"fontFamily":"Overused Grotesk","fontStyle":"regular","fontWeight":"400","textAlign":"center","textContent":"WebGL Components with No Code","href":"","fill":["#D0D0D0"],"fontSizeMode":"relative","noTextAsHtml":false,"fontCSS":{"family":"Overused Grotesk","src":"https://assets.unicorn.studio/fonts/studio_picks/Overused%20Grotesk/remix_OverusedGrotesk-Roman.otf"},"compiledFragmentShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;\nin vec2 vTextureCoord;\nin vec3 vVertexPosition;uniform vec2 uMousePos;\nuniform sampler2D uBgTexture;\nuniform sampler2D uTexture;const float PI = 3.14159265359;out vec4 fragColor;vec4 getNormalOutput(vec4 color, vec4 background) {\nreturn mix(background, color + background * (1.0 - color.a), 1.0000);\n}vec4 getOutputByMode(vec4 color, vec4 background) {\nreturn getNormalOutput(color, background);\n}void main() {\nvec2 uv = vTextureCoord;\nvec2 pos = vec2(0);pos = mix(vec2(0), (uMousePos - 0.5), 0.0000);uv -= pos;vec4 background = vec4(0);background = texture(uBgTexture, vTextureCoord);\nvec4 color = texture(uTexture, uv);vec4 col = getOutputByMode(color, background);fragColor = col;\n}"],"compiledVertexShaders":["#version 300 es\n// Copyright (c) Unicorn Studio. Licensed under the Unicorn Studio Commercial License.\n// Unauthorized copying, redistribution, or use in competing products is prohibited.\nprecision highp float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;\nuniform vec2 uMousePos;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\nfloat angleX = uMousePos.y * 0.5 - 0.25;\nfloat angleY = (1.-uMousePos.x) * 0.5 - 0.25;mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0,\n0.0, cos(angleX), -sin(angleX), 0.0,\n0.0, sin(angleX), cos(angleX), 0.0,\n0.0, 0.0, 0.0, 1.0);\nmat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0,\n0.0, 1.0, 0.0, 0.0,\n-sin(angleY), 0.0, cos(angleY), 0.0,\n0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY;\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz;\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"],"data":{"uniforms":{},"elementOpacity":0},"id":"56c138fe-ef5e-497b-bb90-7b30f2f61eef","publicId":"text","windowWidth":1440,"visible":false},{"breakpoints":[],"visible":true,"aspectRatio":1,"userDownsample":1,"layerType":"effect","type":"grain","usesPingPong":false,"texture":false,"animating":true,"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 vec3 vVertexPosition;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform float uTime;\nuniform vec2 uResolution;\nvec3 blend (int blendMode, vec3 src, vec3 dst) {\nreturn vec3((dst.x <= 0.5) ? (2.0 * src.x * dst.x) : (1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)), (dst.y <= 0.5) ? (2.0 * src.y * dst.y) : (1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)), (dst.z <= 0.5) ? (2.0 * src.z * dst.z) : (1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z)));\n}\nuvec2 pcg2d(uvec2 v) {\nv = v * 1664525u + 1013904223u;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nv ^= v >> 16;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nreturn v;\n}float randFibo(vec2 p) {\nuvec2 v = floatBitsToUint(p);\nv = pcg2d(v);\nuint r = v.x ^ v.y;\nreturn float(r) / float(0xffffffffu);\n}out vec4 fragColor;void main() {\nvec2 uv = vTextureCoord;\nvec4 color = texture(uTexture, uv);if(color.a <= 0.001) {\nfragColor = vec4(0);\nreturn;\n}vec2 st = uv;\nvec3 grainRGB = vec3(0);st *= uResolution;float delta = fract((floor(uTime)/20.));\ngrainRGB = vec3(\nrandFibo(st + vec2(1, 2) + delta),\nrandFibo(st + vec2(2, 3) + delta),\nrandFibo(st + vec2(3, 4) + delta)\n);color.rgb = mix(color.rgb, blend(5, grainRGB, color.rgb), 0.1700);\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.5,"data":{"depth":false,"uniforms":{},"isBackground":false},"id":"72265805-efe9-4202-92fc-9c9a47dc4ee7","publicId":"grain"}],"options":{"name":"Domex Engine Hero","fps":60,"dpi":1.5,"scale":1,"includeLogo":false,"isProduction":false,"flatten":false},"version":"2.1.12","id":"4rJ7JROK8JttmFfvG1FT"}