export declare const vert = "\n\t\t\t\tvarying vec3 vLocalPosition;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvLocalPosition = position; // use local/object space\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\t\t\t\t}\n\t\t\t"; export declare const frag = "\n\t\t\t\tuniform vec3 topColor;\n\t\t\t\tuniform vec3 bottomColor;\n\t\t\t\tuniform float offset;\n\t\t\t\tuniform float exponent;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform float sunIntensity;\n\t\t\t\tuniform vec3 cloudsColor;\n\t\t\t\tuniform float cloudsCoverage;\n\t\t\t\tuniform float starsIntensity;\n\n\t\t\t\tvarying vec3 vLocalPosition;\n\n\t\t\t\tvec4 permute(vec4 x){ return mod(((x*34.0)+1.0)*x, 289.0); }\n\t\t\t\tvec4 taylorInvSqrt(vec4 r){ return 1.79284291400159 - 0.85373472095314 * r; }\n\n\t\t\t\tfloat noise3d(vec3 v) {\n\t\t\t\t\tconst vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n\t\t\t\t\tconst vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n\n\t\t\t\t\t// First corner\n\t\t\t\t\tvec3 i = floor(v + dot(v, C.yyy) );\n\t\t\t\t\tvec3 x0 = v - i + dot(i, C.xxx) ;\n\n\t\t\t\t\t// Other corners\n\t\t\t\t\tvec3 g = step(x0.yzx, x0.xyz);\n\t\t\t\t\tvec3 l = 1.0 - g;\n\t\t\t\t\tvec3 i1 = min( g.xyz, l.zxy );\n\t\t\t\t\tvec3 i2 = max( g.xyz, l.zxy );\n\n\t\t\t\t\t// x0 = x0 - 0.0 + 0.0 * C.xxx;\n\t\t\t\t\t// x1 = x0 - i1 + 1.0 * C.xxx;\n\t\t\t\t\t// x2 = x0 - i2 + 2.0 * C.xxx;\n\t\t\t\t\t// x3 = x0 - 1.0 + 3.0 * C.xxx;\n\t\t\t\t\tvec3 x1 = x0 - i1 + C.xxx;\n\t\t\t\t\tvec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\n\t\t\t\t\tvec3 x3 = x0 - D.yyy; // -1.0 + 3.0 * C.x = -0.5\n\n\t\t\t\t\t// Permutations\n\t\t\t\t\ti = mod(i, 289.0 ); \n\t\t\t\t\tvec4 p = permute( permute( permute( \n\t\t\t\t\t\t\t\ti.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n\t\t\t\t\t\t\t+ i.y + vec4(0.0, i1.y, i2.y, 1.0 )) \n\t\t\t\t\t\t\t+ i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n\n\t\t\t\t\t// Gradients\n\t\t\t\t\tfloat n_ = 1.0/7.0; // N=7\n\t\t\t\t\tvec3 ns = n_ * D.wyz - D.xzx;\n\n\t\t\t\t\tvec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,N*N)\n\t\t\t\t\tvec4 x_ = floor(j * ns.z);\n\t\t\t\t\tvec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n\n\t\t\t\t\tvec4 x = x_ *ns.x + ns.yyyy;\n\t\t\t\t\tvec4 y = y_ *ns.x + ns.yyyy;\n\t\t\t\t\tvec4 h = 1.0 - abs(x) - abs(y);\n\n\t\t\t\t\tvec4 b0 = vec4( x.xy, y.xy );\n\t\t\t\t\tvec4 b1 = vec4( x.zw, y.zw );\n\n\t\t\t\t\tvec4 s0 = floor(b0)*2.0 + 1.0;\n\t\t\t\t\tvec4 s1 = floor(b1)*2.0 + 1.0;\n\t\t\t\t\tvec4 sh = -step(h, vec4(0.0));\n\n\t\t\t\t\tvec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n\t\t\t\t\tvec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n\n\t\t\t\t\tvec3 p0 = vec3(a0.xy,h.x);\n\t\t\t\t\tvec3 p1 = vec3(a0.zw,h.y);\n\t\t\t\t\tvec3 p2 = vec3(a1.xy,h.z);\n\t\t\t\t\tvec3 p3 = vec3(a1.zw,h.w);\n\n\t\t\t\t\t// Normalise gradients\n\t\t\t\t\tvec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2,p2), dot(p3,p3)));\n\t\t\t\t\tp0 *= norm.x;\n\t\t\t\t\tp1 *= norm.y;\n\t\t\t\t\tp2 *= norm.z;\n\t\t\t\t\tp3 *= norm.w;\n\n\t\t\t\t\t// Mix contributions from corners\n\t\t\t\t\tvec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n\t\t\t\t\tm = m * m;\n\t\t\t\t\treturn 42.0 * dot( m*m, vec4(dot(p0,x0), dot(p1,x1), \n\t\t\t\t\t\t\t\t\t\t\t\tdot(p2,x2), dot(p3,x3)) );\n\t\t\t\t}\n\n\t\t\t\tfloat random(vec2 st) {\n\t\t\t\t\treturn fract(sin(dot(st.xy, vec2(12.9898,78.233))) * 43758.5453123);\n\t\t\t\t}\n\n\t\t\t\tfloat noise(vec2 st) {\n\t\t\t\t\tvec2 i = floor(st);\n\t\t\t\t\tvec2 f = fract(st);\n\t\t\t\t\tfloat a = random(i);\n\t\t\t\t\tfloat b = random(i + vec2(1.0, 0.0));\n\t\t\t\t\tfloat c = random(i + vec2(0.0, 1.0));\n\t\t\t\t\tfloat d = random(i + vec2(1.0, 1.0));\n\t\t\t\t\tvec2 u = f * f * (3.0 - 2.0 * f);\n\t\t\t\t\treturn mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\t// use local position instead of world position\n\t\t\t\t\tvec3 direction = normalize(vLocalPosition);\n\n\t\t\t\t\t// Vertical gradient factor\n\t\t\t\t\tfloat h = clamp(direction.y + offset, 0.0, 1.0);\n\t\t\t\t\tvec3 finalColor = mix(bottomColor, topColor, pow(h, exponent));\n\n\t\t\t\t\t// --- Sun ---\n\t\t\t\t\tif (sunIntensity > 0.0) {\n\t\t\t\t\t\tfloat sunDot = dot(direction, normalize(sunDirection));\n\t\t\t\t\t\tfloat sunDisk = smoothstep(0.999, 1.0, sunDot);\n\t\t\t\t\t\tfinalColor += sunDisk * sunColor * sunIntensity;\n\n\t\t\t\t\t\tfloat glow = smoothstep(0.999, 1.0, sunDot);\n\t\t\t\t\t\tfinalColor += glow * sunColor * sunIntensity * 0.3;\n\t\t\t\t\t}\n\n\t\t\t\t\t// --- Clouds ---\n\t\t\t\t\tif (cloudsCoverage > 0.0 && direction.y > 0.0) {\n\t\t\t\t\t\t// vec2 cloudCoord = direction.xz * 2.0\n\t\t\t\t\t\tvec2 cloudCoord = direction.xz / max(direction.y, 0.001);\n\t\t\t\t\t\tfloat cloudNoise = noise(cloudCoord * 3.0) * 0.5\n\t\t\t\t\t\t\t\t\t\t+ noise(cloudCoord * 6.0) * 0.25\n\t\t\t\t\t\t\t\t\t\t+ noise(cloudCoord * 12.0) * 0.125;\n\t\t\t\t\t\tfloat clouds = smoothstep(1.0 - cloudsCoverage, 1.0, cloudNoise);\n\t\t\t\t\t\t// Fade clouds toward horizon (distance) using view elevation\n\t\t\t\t\t\tfloat cloudFade = smoothstep(0.0, 0.25, direction.y);\n\t\t\t\t\t\tfinalColor = mix(finalColor, cloudsColor, clouds * 0.9 * cloudFade);\n\t\t\t\t\t}\n\n\t\t\t\t\t// --- Stars (now using 3D simplex noise) ---\n\t\t\t\t\tif (starsIntensity > 0.0) {\n\t\t\t\t\t\t// High frequency 3D noise sampled along view direction.\n\t\t\t\t\t\t// noise3d returns roughly in [-1,1]; remap to [0,1].\n\t\t\t\t\t\tfloat n = noise3d(direction * 100.0);\n\t\t\t\t\t\tn = clamp(n * 0.5 + 0.5, 0.0, 1.0);\n\n\t\t\t\t\t\t// Threshold to isolate sparse bright points (stars).\n\t\t\t\t\t\t// Adjust 0.995 for density; higher -> fewer stars.\n\t\t\t\t\t\tfloat starMask = step(0.9, n);\n\n\t\t\t\t\t\t// Optional micro twinkle via a secondary modulation:\n\t\t\t\t\t\t// starMask *= 0.75 + 0.25 * noise3d(direction * 400.0);\n\n\t\t\t\t\t\tfinalColor += starMask * starsIntensity * vec3(1.0, 1.0, 0.9);\n\t\t\t\t\t}\n\n\t\t\t\t\tgl_FragColor = vec4(finalColor, 1.0);\n\t\t\t\t}\n\t\t\t"; //# sourceMappingURL=skybox.d.ts.map