Skip to content

Instantly share code, notes, and snippets.

@velipso
Last active February 13, 2025 21:24
Show Gist options
  • Save velipso/ecf63f8dbe0a18a3102deb1f184d5f0c to your computer and use it in GitHub Desktop.
Save velipso/ecf63f8dbe0a18a3102deb1f184d5f0c to your computer and use it in GitHub Desktop.
ShaderToy Looking at closed eyelids
vec2 grad(ivec2 z) {
int n = z.x+z.y*11111;
n = (n<<13)^n;
n = (n*(n*n*15731+789221)+1376312589)>>16;
return vec2(cos(float(n)),sin(float(n)));
}
float noise(vec2 p, float seed) {
p += vec2(cos(seed * 123.456) * 123.456, sin(seed * 456.789) * 456.789);
ivec2 i = ivec2(floor(p));
vec2 f = fract(p);
vec2 u = f*f*(3.0-2.0*f);
return mix(
mix(
dot(grad(i+ivec2(0,0)), f-vec2(0.0,0.0)),
dot(grad(i+ivec2(1,0)), f-vec2(1.0,0.0)),
u.x
),
mix(
dot(grad(i+ivec2(0,1)), f-vec2(0.0,1.0)),
dot(grad(i+ivec2(1,1)), f-vec2(1.0,1.0)),
u.x
),
u.y
);
}
float perlin(vec2 uv, float seed) {
float a1 = sin(iTime*0.95+seed)*0.5+0.8;
float a2 = sin(iTime*0.92+seed)*0.5+0.9;
float a3 = sin(iTime*0.87+seed)*0.5+1.0;
float a4 = sin(iTime*0.83+seed)*0.5+1.0;
float f = 0.0;
uv *= 8.0;
mat2 m = mat2(1.6, 1.2, -1.2, 1.6);
f += 0.5000 * noise(uv, seed); uv = m * uv;
f += a1 * 0.2500 * noise(uv, seed); uv = m * uv;
f += a2 * 0.1250 * noise(uv, seed); uv = m * uv;
f += a3 * 0.0625 * noise(uv, seed); uv = m * uv;
f += a4 * 0.0312 * noise(uv, seed);
f = 0.5 + 0.5*f;
return f;
}
float pic(vec2 uv, float Time1, float Time2) {
float Ta = floor(Time2 * .25)*414.332;
float Tb = fract(Time2 * .25)*3.141592;
float dang = fract(sin(floor(Ta)*439.45+773.91));
float ang = Time2 * mix(-0.2, 0.2, dang) + sin(Ta)*0.1;
vec2 dd = vec2(cos(ang) * 0.3, sin(ang) * 0.3);
float cd = length(uv);
uv *= mat2(cos(ang), -sin(ang), sin(ang), cos(ang));
float f = uv.x;
float rf = -uv.x;
float seed = floor(Time2);
float speed = fract(sin(floor(Ta)*279.95+173.94));
float sps = fract(sin(floor(Ta)*139.45+873.91));
uv.x += Time1 * sign(sps-.5) * mix(.2, .5, speed);
float speed2 = fract(sin(floor(Ta)*679.95+163.94));
float sps2 = fract(sin(floor(Ta)*869.85+673.91));
uv.y += Time1 * sign(sps2-.5) * mix(.2, .5, speed2);
float f1 = perlin(uv, seed);
float f2 = perlin(uv, seed + 1.);
float f3 = perlin(uv, seed + 2.);
f += mix(f1 + f2, f2 + f3, fract(Time2));
f = pow(f, 10.0);
f = smoothstep(0., 1., f);
f *= 0.4;
f += abs(rf - 0.1);
f = smoothstep(0., 1., f);
float mm = 0.11;
mm += 0.012*(sin(iTime*2.3+111.9)*0.5+0.5);
mm += 0.012*(sin(iTime*2.1+621.9)*0.5+0.5);
mm += 0.012*(sin(iTime*1.9+913.9)*0.5+0.5);
f = mix(
max(mm, f * sin(Tb)*0.1 + 0.1),
max(mm, 0.11),
cd * 1.5
);
return f*5.6;
}
void mainImage(out vec4 fragColor, vec2 fragCoord) {
vec2 p = fragCoord / iResolution.xy - 0.5;
vec2 uv = p*vec2(iResolution.x/iResolution.y,1.0);
float TT = iTime+123.;
float W = sin(TT*0.99)*0.1+sin(TT*0.97)*0.15;
float T = TT*0.5;
float f = pic(uv, T*0.8, (T+W)*0.8);
f = pow(f, 10.);
f *= min(iTime*0.1, 1.);
fragColor = vec4(f, f, f, 1.0);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment