✏️ 正在编辑: organic-fluid.frag
路径:
/home/qyel0117/public_html/wp-content/themes/semplice7/assets/shader/generative/organic-fluid.frag
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
precision mediump float; varying vec2 vUv; uniform float time; uniform vec2 resolution; uniform vec2 mouse; uniform float speed; uniform float scale; uniform float warpStrength; uniform float highlightIntensity; uniform float mouseStrength; uniform vec3 colorA; uniform vec3 colorB; uniform vec3 colorC; // Simplex-like noise helpers vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; } vec4 permute(vec4 x) { return mod289(((x * 34.0) + 1.0) * x); } vec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; } float snoise(vec3 v) { const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0); const vec4 D = vec4(0.0, 0.5, 1.0, 2.0); vec3 i = floor(v + dot(v, C.yyy)); vec3 x0 = v - i + dot(i, C.xxx); vec3 g = step(x0.yzx, x0.xyz); vec3 l = 1.0 - g; vec3 i1 = min(g.xyz, l.zxy); vec3 i2 = max(g.xyz, l.zxy); vec3 x1 = x0 - i1 + C.xxx; vec3 x2 = x0 - i2 + C.yyy; vec3 x3 = x0 - D.yyy; i = mod289(i); vec4 p = permute(permute(permute( i.z + vec4(0.0, i1.z, i2.z, 1.0)) + i.y + vec4(0.0, i1.y, i2.y, 1.0)) + i.x + vec4(0.0, i1.x, i2.x, 1.0)); float n_ = 0.142857142857; vec3 ns = n_ * D.wyz - D.xzx; vec4 j = p - 49.0 * floor(p * ns.z * ns.z); vec4 x_ = floor(j * ns.z); vec4 y_ = floor(j - 7.0 * x_); vec4 x = x_ * ns.x + ns.yyyy; vec4 y = y_ * ns.x + ns.yyyy; vec4 h = 1.0 - abs(x) - abs(y); vec4 b0 = vec4(x.xy, y.xy); vec4 b1 = vec4(x.zw, y.zw); vec4 s0 = floor(b0) * 2.0 + 1.0; vec4 s1 = floor(b1) * 2.0 + 1.0; vec4 sh = -step(h, vec4(0.0)); vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww; vec3 p0 = vec3(a0.xy, h.x); vec3 p1 = vec3(a0.zw, h.y); vec3 p2 = vec3(a1.xy, h.z); vec3 p3 = vec3(a1.zw, h.w); vec4 norm = taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); p0 *= norm.x; p1 *= norm.y; p2 *= norm.z; p3 *= norm.w; vec4 m = max(0.6 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0); m = m * m; return 42.0 * dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); } float fbm(vec3 p) { float value = 0.0; float amplitude = 0.5; float frequency = 1.0; for (int i = 0; i < 5; i++) { value += amplitude * snoise(p * frequency); frequency *= 2.0; amplitude *= 0.5; } return value; } float domainWarpedFbm(vec3 p) { vec3 q = vec3( fbm(p + vec3(0.0, 0.0, 0.0)), fbm(p + vec3(5.2, 1.3, 2.8)), fbm(p + vec3(1.7, 9.2, 3.4)) ); vec3 r = vec3( fbm(p + warpStrength * q + vec3(1.7, 9.2, 0.0)), fbm(p + warpStrength * q + vec3(8.3, 2.8, 0.0)), fbm(p + warpStrength * q + vec3(3.1, 6.5, 0.0)) ); return fbm(p + warpStrength * r); } void main() { float aspect = resolution.x / resolution.y; vec2 uv = vUv; vec2 p = uv - 0.5; p.x *= aspect; float t = time * 0.15 * speed; // Mouse influence vec2 m = mouse - 0.5; m.x *= aspect; float mouseDist = length(p - m); float mouseInfluence = smoothstep(0.5, 0.0, mouseDist) * mouseStrength; // Domain warping with organic motion vec3 pos = vec3(p * scale, t); // Displace based on mouse pos.xy += m * mouseInfluence * 2.0; float n1 = domainWarpedFbm(pos); float n2 = domainWarpedFbm(pos + vec3(3.3, 1.7, -0.5)); float n3 = fbm(pos * 1.5 + vec3(n1, n2, t * 0.5)); // Color blending with customizable palette float blend = n1 * 0.5 + 0.5; float blend2 = n2 * 0.5 + 0.5; float blend3 = n3 * 0.5 + 0.5; vec3 color = mix(colorA, colorB, smoothstep(0.0, 0.45, blend)); color = mix(color, colorC, smoothstep(0.4, 0.75, blend2)); color = mix(color, colorA * 1.5 + colorC * 0.5, smoothstep(0.6, 0.9, blend3 * blend)); // Luminous highlights float highlight = pow(max(blend3, 0.0), 3.0) * highlightIntensity; color += highlight * (colorC + vec3(0.1)); // Subtle vignette float vignette = 1.0 - 0.4 * length(p); color *= vignette; // Mouse glow float glow = exp(-mouseDist * mouseDist * 8.0) * 0.15; color += glow * mix(colorB, colorC, 0.5); // Subtle pulsing float pulse = snoise(vec3(p * 3.0, t * 2.0)) * 0.03; color += pulse; color = clamp(color, 0.0, 1.0); gl_FragColor = vec4(color, 1.0); }
💾 保存文件
← 返回文件管理器