✏️ 正在编辑: mystic-noise.frag
路径:
/home/qyel0117/public_html/wp-content/themes/semplice7/assets/shader/generative/mystic-noise.frag
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
precision mediump float; varying vec2 vUv; uniform float time; uniform vec2 resolution; uniform vec2 mouse; uniform float speed; uniform float scale; uniform float turbulence; uniform float drift; uniform float colorShift; uniform float mouseStrength; uniform vec3 colorA; uniform vec3 colorB; const float PI = 3.14159265359; const float TAU = 6.28318530718; vec3 hash3(vec2 p) { vec3 q = vec3( dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3)), dot(p, vec2(419.2, 371.9)) ); return fract(sin(q) * 43758.5453); } float voronoise(vec2 x) { vec2 p = floor(x); vec2 f = fract(x); float k = 1.0 + 63.0 * pow(0.0, 4.0); float va = 0.0; float wt = 0.0; for(int j = -2; j <= 2; j++) { for(int i = -2; i <= 2; i++) { vec2 g = vec2(float(i), float(j)); vec3 o = hash3(p + g); o.xy += 0.5 * vec2( sin(time * speed * 0.1 + o.x * 6.28), cos(time * speed * 0.1 + o.y * 6.28) ); vec2 r = g - f + o.xy; float d = dot(r, r); float ww = pow(1.0 - smoothstep(0.0, 1.414, sqrt(d)), k); va += o.z * ww; wt += ww; } } return va / wt; } vec3 anchoredPal(float t, vec3 col1, vec3 col2) { vec3 mid = 0.5 * (col1 + col2); vec3 axisAmp = 0.5 * (col2 - col1); vec3 base = mid + axisAmp * cos(TAU * t); vec3 axis = length(axisAmp) > 0.0001 ? normalize(axisAmp) : vec3(1.0, 0.0, 0.0); vec3 ref = abs(axis.x) > 0.9 ? vec3(0.0, 1.0, 0.0) : vec3(1.0, 0.0, 0.0); vec3 tangent1 = normalize(cross(axis, ref)); vec3 tangent2 = normalize(cross(axis, tangent1)); float richness = 0.24 * length(axisAmp) + 0.02; vec3 ripple = tangent1 * sin(TAU * (t * 2.0 + 0.123)) + tangent2 * sin(TAU * (t * 3.0 + 0.437)); vec3 col = base + (richness * 0.63) * ripple; col = 1.0 / (1.0 + exp(-col * 4.0 + 0.25) * 7.5); return col; } void main() { float aspect = resolution.x / resolution.y; vec2 uv = vUv; vec2 st = (uv - 0.5) * vec2(aspect, 1.0) * scale; // drift motion st.y -= drift * time * speed * 0.008; // mouse displacement vec2 m = mouse - 0.5; m.x *= aspect; float mouseDist = length((uv - 0.5) * vec2(aspect, 1.0) - m); float mouseInfluence = smoothstep(0.5, 0.0, mouseDist) * mouseStrength; st += m * mouseInfluence * 2.0; // voronoi noise float noise = voronoise(st); noise = mix(0.5, noise, turbulence * 2.5); // color palette float shift = colorShift + time * speed * 0.01; vec3 color = anchoredPal(noise + shift, colorA, colorB); // difference blend with itself for depth vec2 st2 = st * 0.7 + vec2(3.7, 1.2); st2.y += drift * time * speed * 0.004; float noise2 = voronoise(st2); noise2 = mix(0.5, noise2, turbulence * 2.0); vec3 color2 = anchoredPal(noise2 + shift * 0.8, colorA * 0.8, colorB * 1.2); color = abs(color - color2); // subtle vignette float vignette = 1.0 - 0.3 * length(uv - 0.5); color *= vignette; color = clamp(color, 0.0, 1.0); gl_FragColor = vec4(color, 1.0); }
💾 保存文件
← 返回文件管理器