✏️ 正在编辑: gradient-ring.frag
路径:
/home/qyel0117/public_html/wp-content/themes/semplice7/assets/shader/generative/gradient-ring.frag
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
precision mediump float; varying vec2 vUv; uniform float time; uniform vec2 resolution; uniform vec2 mouse; uniform float speed; uniform float noiseScale; uniform float innerRadius; uniform float glowIntensity; uniform float glowFalloff; uniform float sharpness; uniform vec3 colorA; uniform vec3 colorB; uniform vec3 colorC; // 3d hash for noise vec3 hash3(vec3 p) { p = fract(p * vec3(443.897, 441.423, 437.195)); p += dot(p, p.yxz + 29.07); return -1.0 + 2.0 * fract(vec3(p.x + p.y, p.x + p.z, p.y + p.z) * p.zyx); } // simplex noise 3d float simplex3(vec3 p) { const float K1 = 0.333333333; const float K2 = 0.166666667; vec3 i = floor(p + (p.x + p.y + p.z) * K1); vec3 d0 = p - (i - (i.x + i.y + i.z) * K2); vec3 e = step(vec3(0.0), d0 - d0.yzx); vec3 i1 = e * (1.0 - e.zxy); vec3 i2 = 1.0 - e.zxy * (1.0 - e); vec3 d1 = d0 - (i1 - K2); vec3 d2 = d0 - (i2 - K1); vec3 d3 = d0 - 0.5; vec4 h = max(0.6 - vec4(dot(d0, d0), dot(d1, d1), dot(d2, d2), dot(d3, d3)), 0.0); vec4 n = h * h * h * h * vec4(dot(d0, hash3(i)), dot(d1, hash3(i + i1)), dot(d2, hash3(i + i2)), dot(d3, hash3(i + 1.0))); return dot(vec4(31.316), n); } void main() { vec2 uv = (vUv * 2.0 - 1.0) * vec2(resolution.x / resolution.y, 1.0); // mouse influence on ring center vec2 m = (mouse - 0.5) * 0.3; uv -= m; float t = time * speed; float ang = atan(uv.y, uv.x); float len = length(uv); // noise-distorted ring float n = simplex3(vec3(uv * noiseScale, t * 0.5)) * 0.5 + 0.5; float r0 = mix(innerRadius, 1.0, mix(0.4, 0.6, n)); float d0 = distance(uv, r0 / len * uv); // primary ring glow float v0 = glowIntensity / (1.0 + d0 * glowFalloff); v0 = pow(v0, 1.0 + sharpness * 2.0); v0 *= smoothstep(r0 * 1.05, r0, len); // angular color blend float cl = cos(ang + t * 2.0) * 0.5 + 0.5; // orbiting highlight float a = t * -1.0; vec2 pos = vec2(cos(a), sin(a)) * r0; float d = distance(uv, pos); float v1 = 1.5 / (1.0 + d * d * 5.0); v1 *= glowIntensity / (1.0 + d0 * 50.0); // fade at edges float v2 = smoothstep(1.0, mix(innerRadius, 1.0, n * 0.5), len); // hole in center float v3 = smoothstep(innerRadius, mix(innerRadius, 1.0, 0.5), len); // mouse glow boost near ring float mDist = length(uv); float mRingDist = abs(mDist - r0); float mouseBoost = 1.0 + smoothstep(0.3, 0.0, mRingDist) * 0.5; // compose color vec3 col = mix(colorA, colorB, cl); col = mix(colorC, col, v0); col = (col + v1) * v2 * v3 * mouseBoost; col = clamp(col, 0.0, 1.0); // extract alpha for clean edges on black bg float maxVal = min(max(max(col.r, col.g), col.b), 1.0); float alpha = maxVal > 0.00001 ? maxVal : 0.0; vec3 premul = maxVal > 0.00001 ? col / maxVal : vec3(0.0); vec3 final = mix(vec3(0.0), premul, alpha); gl_FragColor = vec4(final, 1.0); }
💾 保存文件
← 返回文件管理器