runnable fragment
code snippet
precision mediump float;
uniform vec2 resolution;
uniform float time;
float hash(vec2 p){ return fract(sin(dot(p, vec2(127.1,311.7))) * 43758.5453); }
void main(){
vec2 uv=(gl_FragCoord.xy-0.5*resolution.xy)/min(resolution.x,resolution.y);
vec3 col=vec3(0.0);
for(int layer=0; layer<4; layer++){
float z=float(layer)+1.0;
vec2 p=uv*z + vec2(0.0,time*(0.08+0.03*z));
vec2 id=floor(p*18.0); vec2 f=fract(p*18.0)-0.5;
float rnd=hash(id+z);
float star=smoothstep(0.045*rnd,0.0,length(f));
col += star * mix(vec3(0.45,0.7,1.0), vec3(1.0,0.85,0.55), rnd) / z;