diff --git a/2018-10-20/anatol.frag b/2018-10-20/anatol.frag new file mode 100644 index 0000000..c786d6a --- /dev/null +++ b/2018-10-20/anatol.frag @@ -0,0 +1,90 @@ + +precision mediump float; + +uniform vec2 resolution; +uniform float time; + + +vec3 lookat (vec3 eye, vec3 at, vec2 uv) { + vec3 front = normalize(at-eye); + vec3 right = normalize(cross(front, vec3(0,1,0))); + vec3 up = normalize(cross(front, right)); + return normalize(front + right * uv.x + up * uv.y); +} + +mat2 rot (float a) { + float c = cos(a), s = sin(a); + return mat2(c,s,-s,c); +} + + +float hash(float p) +{ + return fract(sin(p)*43557.); +} + +float obj(vec3 p) +{ + float d = length(p.xy+vec2(cos(p.z+cos(time*.5)), sin(p.z+cos(time*.25))))-.1+cos(time)*.4; +d = min(d, -abs(p.y)+2.); + return d; +} + +float map(vec3 p) +{ + float d = cos(p.x)+cos(p.y*(cos(time)*.5+.5))+cos(p.z) + cos(p.y*10.)*.1; + d = min(d, obj(p)); + return d; +} + +vec3 normal(vec3 p) +{ + vec3 n; + vec2 eps = vec2(0.01, 0.); + float d = map(p); + n.x = d - map(p-eps.xyy); + n.y = d - map(p-eps.yxy); + n.z = d - map(p-eps.yyx); + return normalize(n); +} + +vec3 raymarch(vec3 ro, vec3 rd) +{ + vec3 p = ro; + for(int i=0; i<64; i++) { + float d = map(p); + p += rd * d; + } + return p; +} +vec3 shade(vec3 ro, vec3 rd, vec3 p, vec3 n) +{ + vec3 col = n*.1+.5; + + col += vec3(rd.x,rd.y,.2) * length(ro-p)*.08; + return col; +} + + +void main () { + vec2 uv = gl_FragCoord.xy / resolution; + uv.x *= resolution.x/resolution.y; + vec3 ro = vec3(0.,0.,-2.+time*3.); + vec3 rd = normalize(vec3(uv*2.-1., 1.)); +rd.xy = rot(time*.1) * rd.xy; +rd.xz = rot(time*.5) * rd.xz; + vec3 p = raymarch(ro,rd); + vec3 n = normal(p); + vec3 col = vec3(1.); + col *= shade(ro,rd,p,n); + + if(obj(p) == map(p)) + { + vec3 rro = p; + vec3 rrd = reflect(rd,n); + vec3 rp = raymarch(rro+n*.1, rrd); + vec3 rn = normal(rp); + col *= shade(rro,rrd,rp,rn); + } + gl_FragColor = vec4(col,1.); +} diff --git a/2018-10-20/leon.frag b/2018-10-20/leon.frag new file mode 100644 index 0000000..c2e5f7c --- /dev/null +++ b/2018-10-20/leon.frag @@ -0,0 +1,83 @@ + +precision mediump float; + +uniform vec2 resolution; +uniform float time; + + +vec3 lookat (vec3 eye, vec3 at, vec2 uv) { + vec3 front = normalize(at-eye); + vec3 right = normalize(cross(front, vec3(0,1,0))); + vec3 up = normalize(cross(front, right)); + return normalize(front + right * uv.x + up * uv.y); +} + +mat2 rot (float a) { + float c = cos(a), s = sin(a); + return mat2(c,-s,s,c); +} + +float smin (float a, float b, float r) { + float h = clamp(.5+.5*(b-a), 0., 1.); + return mix(b,a,h)-r*h*(1.-h); +} + +float repeat( float p, float c) { return mod(p,c)-c/2.; } + +float map (vec3 pos) { + float scene = 10.; + const float count = 8.; + // pos.xz *= rot(length(pos)); + vec3 p = pos; + // p.xz * + float s = 10.; + for (float i = count; i > 0.; --i) { + float r = i / count; + pos = abs(pos)-.2*r; + pos.xz *= rot(time * .05); + // pos.xz *= rot(sin(time * 4.)*.5); + pos.yz *= rot(time * .01); + // pos.yx *= rot(time * 1.5); + float b = .24 * r; + // scene = smin(scene, length(pos)-.1*r, b);//+.5*sin(time)); + // scene = smin(scene, length(pos.xz)-.1*r, b);//+.5*sin(time)); + scene = min(scene, max(pos.x, max(pos.y, pos.z))); + vec3 pp = pos; + // pp.xy *= rot(time * .2); + // pp.zy *= rot(sin(time*8.) * .2); + // pp.xz *= rot(time * .4); + s = min(s, length(pp.yz)-.01); + + pp.x = repeat(pp.x + time * .01, .4); + s = min(s, length(pp)-.1*r); + // s = min(s, length(pp.xz)-.01*r); + } + scene = max(-scene, length(p)-1.); + scene = min(scene, s); + // scene = length(pos)-.1;//+.5 * sin(time*5.); + return scene; +} + +void main () { + vec2 uv = gl_FragCoord.xy / resolution; + uv = uv * 2. - 1.; + uv.x *= resolution.x / resolution.y; + vec3 eye = vec3(0,0,-3.); + eye.z += sin(time * 2.) * .25; + eye.xz *= rot(time*.5); + eye.yz *= rot(time*.5); + vec3 target = vec3(0); + vec3 ray = lookat(eye, target, uv); + float shade = 0.; + const float count = 30.; + for (float i = count; i > 0.; --i) { + float dist = map(eye); + if (dist < .001) { + shade = i / count; + break; + } + eye += ray * dist; + } + vec3 color = vec3(.5) + vec3(.5) * cos(time*vec3(.1,.2,.3)*4. + shade * 4.); + gl_FragColor = vec4(color*shade, 1.); +} diff --git a/2018-10-20/theo.frag b/2018-10-20/theo.frag new file mode 100644 index 0000000..7cd6750 --- /dev/null +++ b/2018-10-20/theo.frag @@ -0,0 +1,83 @@ + +precision mediump float; + +uniform vec2 resolution; +uniform float time; + + +vec3 lookat (vec3 eye, vec3 at, vec2 uv) { + vec3 front = normalize(at-eye); + vec3 right = normalize(cross(front, vec3(0,1,0))); + vec3 up = normalize(cross(front, right)); + return normalize(front + right * uv.x + up * uv.y); +} + +mat2 rot (float a) { + float c = cos(a), s = sin(a); + return mat2(c,-s,s,c); +} + +float smin (float a, float b, float r) { + float h = clamp(.5+.5*(b-a), 0., 1.); + return mix(b,a,h)-r*h*(1.-h); +} + +float repeat( float p, float c) { return mod(p,c)-c/2.; } +float box(vec3 p, vec3 b) { + b=abs(p)-b; + return min(max(b.x, max(b.y, b.z)),0.) + length(max(b, 0.)); +} +float sc(vec3 p,float d){ + p=abs(p);p=max(p,p.yzx); + return min(p.x,min(p.y,p.z))-d; +} + +mat2 r2d(float a){float c=cos(a),s=sin(a);return mat2(c,s,-s,c);} +vec3 re(vec3 p, float d){return mod(p-d*.5,d)-d*.5;} +float g=0.; +float de(vec3 p){ + //p.y+=.5; + + float t = time*6.; + float s1 = .77+2.5*(t*.1+sin(t)*.1); + p.xz*=r2d(s1); + p.xy*=r2d(s1); + + + float d= box(p, vec3(1)); + + float s=1.; + vec3 q = p; + + for(int m=0;m<3;m++) { + q = re(p*s, 2.); + s*=3.; + d = max(d, -sc(2.-abs(q)*3., 1.)/s); + } + + d = min(d, sc(1.-abs(q), .1)); + g+=.01/(.01+d*d); + return d; + return sc(p,.3); + return length(p)-1.; +} +void main () { + vec2 uv = gl_FragCoord.xy / resolution; + uv -= .5; + uv.x *= resolution.x / resolution.y + tan(time)*.4; + + vec3 ro=vec3(0,0,-2),rd=normalize(vec3(uv,.7-length(uv))),p; + float ri,t=0.; + for(float i=0.;i<1.;i+=.01) { + ri=i; + p = ro+rd*t; + float d = de(p); + //if(d<.001)break; + d = max(abs(d), .002); + t+=d*.5; + } + vec3 c = mix(vec3(.1, .3, .3), vec3(.1, .1, .2), length(uv*2.)+ri); + c.r+=(sin(time*4.)*.5+.5)*.1; + c+=g*.007; + gl_FragColor = vec4(c, 1); +}