Skip to content

Instantly share code, notes, and snippets.

@solsarratea
Created August 31, 2020 14:18
Show Gist options
  • Save solsarratea/f1bf85b8085d0ac8a7274b8eb01b8779 to your computer and use it in GitHub Desktop.
Save solsarratea/f1bf85b8085d0ac8a7274b8eb01b8779 to your computer and use it in GitHub Desktop.
2D galaxy
float r21 (vec2 p) {
p = fract(p*vec2(233.34,851.79));
p += dot(p,p+23.34);
return fract(p.x*p.y);
}
vec2 r22 (vec2 p) {
float n = r21(p);
return vec2(n,r21(p+n));
}
//////////////////////////////////////////////////////
//2D WORLD
vec2 gpos (vec2 id, vec2 offset){
vec2 n = r22(id +offset)*time;
return offset + sin(n) *0.45;
}
float dline (vec2 p, vec2 s, vec2 e){
vec2 ps = p-s;
vec2 es = e-s;
float t = clamp(dot(ps,es)/dot(es,es),0.,1.);
return length(ps-es*t);
}
float line (vec2 p, vec2 s, vec2 e){
float d = dline(p,s,e);
float r = smoothstep(.15,0.02,d);
float d2 = length(s-e);
float brighter = smoothstep(1.,0.2,abs(d2-.35));
r *=smoothstep(1.8,.1,d2) + brighter*2.;
return r;
}
void neigh(vec2 grid, vec2 id,inout float m){
vec2 a[9];
vec3 p = vec3(-1.,0.,1.);
a[0]= gpos(id,vec2(p.x,p.x));
a[1]= gpos(id,vec2(p.x,p.y));
a[2]= gpos(id,vec2(p.x,p.z));
a[3]= gpos(id,vec2(p.y,p.x));
a[4]= gpos(id,vec2(p.y,p.y));
a[5]= gpos(id,vec2(p.y,p.z));
a[6]= gpos(id,vec2(p.z,p.x));
a[7]= gpos(id,vec2(p.z,p.y));
a[8]= gpos(id,vec2(p.z,p.z));
for (int i=0; i<9; i++){
m += line(grid, a[4],a[i]);
vec2 j = (a[i]-grid)*12.;
float sparkle = 3./dot(j,j);
m+= sparkle * (abs(sin(time+fract(a[i].x)*.4)));
}
m += line(grid, a[1],a[3]);
m += line(grid, a[1],a[5]);
m += line(grid, a[7],a[3]);
m += line(grid, a[5],a[7]);
}
void main () {
float l; vec4 color = vec4(0.);
vec2 pos = uv();
float size = 6.;
float m = -0.02;
vec2 grid = fract(pos*size) - 0.5;
vec2 id = floor(pos*size);
neigh(grid,id,m);
color.gb -= abs(id)*.13;
color += m;
gl_FragColor = color;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment