Last active
February 13, 2025 21:24
-
-
Save velipso/ecf63f8dbe0a18a3102deb1f184d5f0c to your computer and use it in GitHub Desktop.
ShaderToy Looking at closed eyelids
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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