Skip to content

Instantly share code, notes, and snippets.

@keijiro
Last active June 28, 2019 07:15
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save keijiro/82a08c0eb13ac71cc76e825b16ee7c5c to your computer and use it in GitHub Desktop.
Save keijiro/82a08c0eb13ac71cc76e825b16ee7c5c 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);
c *= spectrum.x;
// displacement
vec3 np = vec3(uv * 8, time * 1.8);
float n0 = cnoise(np);
float n1 = cnoise(np + vec3(0.01, 0, 0));
float n2 = cnoise(np + vec3(0, 0.01, 0));
vec2 d = vec2(n2 - n0, n0 - n1) * 5;
uv += d / vec2(aspect, 1);
uv = (uv - 0.5) * 0.95 + 0.5;
// feedback
vec3 duv = vec3(4, 4, 0) / resolution.xyy;
c += texture(prevFrame, uv).r * 0.99;
// color gradient
float c1 = 0.5 - sin(c * 9.12 + time * 1.21) * 0.6;
float c2 = 0.5 - sin(c * 8.33 + time * 0.73) * 0.6;
fragColor = vec4(1, c1, c2, 0) * c;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment