precision highp float;
uniform float u_time;
uniform vec2 u_resolution;
"code-comment">// @param u_speed {type: "float", min: 0.1, max: 2.5, step: 0.05, value: 1.0, label: "Flow Speed"}
uniform float u_speed;
"code-comment">// @param u_density {type: "float", min: 4.0, max: 16.0, step: 0.25, value: 8.0, label: "Ring Density"}
uniform float u_density;
"code-comment">// @param u_intensity {type: "float", min: 0.4, max: 2.2, step: 0.05, value: 1.2, label: "Glow Intensity"}
uniform float u_intensity;
vec3 palette(float t) {
vec3 a = vec3(0.5, 0.5, 0.5);
vec3 b = vec3(0.5, 0.5, 0.5);
vec3 c = vec3(1.0, 1.0, 1.0);
vec3 d = vec3(0.263, 0.416, 0.557);
return a + b * cos(6.28318 * (c * t + d));
}
void main() {
vec2 uv = (gl_FragCoord.xy * 2.0 - u_resolution.xy) / u_resolution.y;
vec2 uv0 = uv;
vec3 finalCol = vec3(0.0);
for (int i = 0; i < 4; i++) {
uv = fract(uv * 1.5) - 0.5;
float d = length(uv) * exp(-length(uv0));
vec3 col = palette(length(uv0) + float(i) * 0.4 + u_time * 0.4 * u_speed);
d = sin(d * u_density + u_time * u_speed) / u_density;
d = abs(d);
d = pow(0.01 / d, u_intensity);
finalCol += col * d;
}
finalCol = pow(clamp(finalCol, 0.0, 1.0), vec3(0.9));
gl_FragColor = vec4(finalCol, 1.0);
}
Describe the shader effect you want
Try: "colorful plasma" or "water ripples"
No projects yet
Create a 2D or 3D shader
Generated shaders will appear here. Click Apply to restore a previous version.
No exposed parameters yet. Choose a template or add uniforms with `@param` comments.
Large images are scaled to fit inside 2048×2048 while keeping aspect ratio. Supported: PNG, JPEG, WEBP, HEIC/HEIF
precision highp float;
uniform float u_time;
uniform vec2 u_resolution;
"code-comment">// @param u_speed {type: "float", min: 0.1, max: 2.5, step: 0.05, value: 1.0, label: "Flow Speed"}
uniform float u_speed;
"code-comment">// @param u_density {type: "float", min: 4.0, max: 16.0, step: 0.25, value: 8.0, label: "Ring Density"}
uniform float u_density;
"code-comment">// @param u_intensity {type: "float", min: 0.4, max: 2.2, step: 0.05, value: 1.2, label: "Glow Intensity"}
uniform float u_intensity;
vec3 palette(float t) {
vec3 a = vec3(0.5, 0.5, 0.5);
vec3 b = vec3(0.5, 0.5, 0.5);
vec3 c = vec3(1.0, 1.0, 1.0);
vec3 d = vec3(0.263, 0.416, 0.557);
return a + b * cos(6.28318 * (c * t + d));
}
void main() {
vec2 uv = (gl_FragCoord.xy * 2.0 - u_resolution.xy) / u_resolution.y;
vec2 uv0 = uv;
vec3 finalCol = vec3(0.0);
for (int i = 0; i < 4; i++) {
uv = fract(uv * 1.5) - 0.5;
float d = length(uv) * exp(-length(uv0));
vec3 col = palette(length(uv0) + float(i) * 0.4 + u_time * 0.4 * u_speed);
d = sin(d * u_density + u_time * u_speed) / u_density;
d = abs(d);
d = pow(0.01 / d, u_intensity);
finalCol += col * d;
}
finalCol = pow(clamp(finalCol, 0.0, 1.0), vec3(0.9));
gl_FragColor = vec4(finalCol, 1.0);
}