✏️ 正在编辑: aurora-waves.frag
路径:
/home/qyel0117/public_html/wp-content/themes/semplice7/assets/shader/generative/aurora-waves.frag
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
precision mediump float; varying vec2 vUv; uniform float time; uniform vec2 resolution; uniform vec2 mouse; uniform float speed; uniform float waveIntensity; uniform float glassStrength; uniform float sparkleAmount; uniform float mouseStrength; uniform float scale; uniform vec3 colorA; uniform vec3 colorB; uniform vec3 colorC; #define PI 3.14159265359 // Simplex noise vec3 permute(vec3 x) { return mod(((x * 34.0) + 1.0) * x, 289.0); } float snoise(vec2 v) { const vec4 C = vec4(0.211324865405187, 0.366025403784439, -0.577350269189626, 0.024390243902439); vec2 i = floor(v + dot(v, C.yy)); vec2 x0 = v - i + dot(i, C.xx); vec2 i1; i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); vec4 x12 = x0.xyxy + C.xxzz; x12.xy -= i1; i = mod(i, 289.0); vec3 p = permute(permute(i.y + vec3(0.0, i1.y, 1.0)) + i.x + vec3(0.0, i1.x, 1.0)); vec3 m = max(0.5 - vec3(dot(x0, x0), dot(x12.xy, x12.xy), dot(x12.zw, x12.zw)), 0.0); m = m * m; m = m * m; vec3 x = 2.0 * fract(p * C.www) - 1.0; vec3 h = abs(x) - 0.5; vec3 ox = floor(x + 0.5); vec3 a0 = x - ox; m *= 1.79284291400159 - 0.85373472095314 * (a0 * a0 + h * h); vec3 g; g.x = a0.x * x0.x + h.x * x0.y; g.yz = a0.yz * x12.xz + h.yz * x12.yw; return 130.0 * dot(m, g); } float fbm(vec2 p) { float sum = 0.0; float amp = 1.0; float freq = 1.0; for (int i = 0; i < 6; i++) { sum += amp * snoise(p * freq); amp *= 0.5; freq *= 2.0; } return sum; } // Frosted glass effect vec2 frostedGlass(vec2 uv, float strength) { float noise1 = snoise(uv * 10.0 + time * 0.1 * speed); float noise2 = snoise(uv * 15.0 - time * 0.15 * speed); float flute = sin(uv.x * 40.0) * 0.02; return uv + vec2(noise1, noise2) * strength + vec2(flute, 0.0); } // Aurora color function vec3 aurora(vec2 uv) { uv.x *= resolution.x / resolution.y; // Mouse influence float mouseInfluence = distance(mouse, vec2(0.5)) * mouseStrength; float waveSpeed = 0.2 + mouseInfluence * 0.3; float waveInt = waveIntensity + mouseInfluence * 1.0; // Base wave pattern float t = time * waveSpeed * speed; float yOffset = sin(uv.x * 2.0 + t) * 0.2; float xOffset = cos(uv.y * 2.0 + t * 0.7) * 0.1; // FBM for organic wave movement float fbmVal = fbm(vec2(uv.x + xOffset, uv.y + yOffset) + t * 0.1) * waveInt; // Vertical gradient for aurora base float gradient = 1.0 - abs(uv.y - 0.5 + fbmVal * 0.3) * 2.0; gradient = pow(max(0.0, gradient), 1.5); // Mix colors based on position and noise float mixFactor1 = sin(uv.x * 3.0 + t) * 0.5 + 0.5; float mixFactor2 = cos(uv.y * 2.0 - t * 0.5) * 0.5 + 0.5; vec3 auroraColor = mix(colorA, colorB, mixFactor1); auroraColor = mix(auroraColor, colorC, mixFactor2); // Apply gradient and intensity auroraColor *= gradient * (0.8 + fbmVal * 0.5); // Sparkles float sparkle = pow(max(0.0, snoise(uv * 50.0 + t * 2.0)), 20.0) * sparkleAmount; auroraColor += sparkle * vec3(0.8, 0.9, 1.0); return auroraColor; } void main() { vec2 uv = (vUv - 0.5) * scale + 0.5; // Mouse interaction for frosted glass float distToMouse = distance(mouse, uv); float glass = glassStrength + glassStrength * (1.0 - smoothstep(0.0, 0.5, distToMouse)); // Apply frosted glass effect vec2 distortedUV = frostedGlass(uv, glass); // Generate aurora vec3 auroraColor = aurora(distortedUV); // Dark background from darkest color vec3 bgColor = colorA * 0.15; // Combine vec3 finalColor = bgColor + auroraColor; // Vignette float vignette = smoothstep(1.0, 0.3, length((uv - 0.5) * 1.5)); finalColor *= vignette; gl_FragColor = vec4(finalColor, 1.0); }
💾 保存文件
← 返回文件管理器