Skip to content

Instantly share code, notes, and snippets.

@keijiro
Last active March 17, 2018 09:49
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save keijiro/51dd3277abe2a9e33d11560e367231f5 to your computer and use it in GitHub Desktop.
Save keijiro/51dd3277abe2a9e33d11560e367231f5 to your computer and use it in GitHub Desktop.
KodeLife fragment shader sketch
#version 150
uniform float time;
uniform sampler2D prevFrame;
uniform vec2 resolution;
uniform vec3 spectrum;
out vec4 fragColor;
vec3 fade(vec3 x) { return x * x * x * (x * (x * 6 - 15) + 10); }
vec3 phash(vec3 p)
{
p = fract(mat3(1.2989833, 7.8233198, 2.3562332,
6.7598192, 3.4857334, 8.2837193,
2.9175399, 2.9884245, 5.4987265) * p);
p = ((2384.2345 * p - 1324.3438) * p + 3884.2243) * p - 4921.2354;
return normalize(fract(p) * 2 - 1);
}
float cnoise(vec3 p)
{
vec3 ip = floor(p);
vec3 fp = fract(p);
float d000 = dot(phash(ip), fp);
float d001 = dot(phash(ip + vec3(0, 0, 1)), fp - vec3(0, 0, 1));
float d010 = dot(phash(ip + vec3(0, 1, 0)), fp - vec3(0, 1, 0));
float d011 = dot(phash(ip + vec3(0, 1, 1)), fp - vec3(0, 1, 1));
float d100 = dot(phash(ip + vec3(1, 0, 0)), fp - vec3(1, 0, 0));
float d101 = dot(phash(ip + vec3(1, 0, 1)), fp - vec3(1, 0, 1));
float d110 = dot(phash(ip + vec3(1, 1, 0)), fp - vec3(1, 1, 0));
float d111 = dot(phash(ip + vec3(1, 1, 1)), fp - vec3(1, 1, 1));
fp = fade(fp);
return mix(mix(mix(d000, d001, fp.z), mix(d010, d011, fp.z), fp.y),
mix(mix(d100, d101, fp.z), mix(d110, d111, fp.z), fp.y), fp.x);
}
void main(void)
{
vec2 uv = gl_FragCoord.xy / resolution;
float aspect = resolution.x / resolution.y;
// ellipse
float r = length((uv - 0.5) * vec2(aspect, 1));
float c = 1 - step(spectrum.x, r);
// polar coords
uv -= 0.5;
vec2 p = vec2(atan(uv.y, uv.x), length(uv));
// displace
p += vec2(cnoise(vec3(p.x * 3, p.y * 9, time * 1.23)) * 0.3,
cnoise(vec3(p.y * 5, p.x * 4, time * 1.17)) * 0.07);
uv = vec2(cos(p.x), sin(p.x)) * p.y + 0.5;
// feedback
c += texture(prevFrame, uv).b * 0.995;
// color gradient
float c1 = 0.5 - sin(c * 4.12 + 0.12 + time * 2.21) * 0.5;
float c2 = 0.5 - sin(c * 7.33 + 1.34 + time * 1.73) * 0.5;
fragColor = vec4(c2, c1, 1, 0) * c;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment