memoscan
← all memos

Memo 0x94050cab…c97959 on Ethereum

//"use strict"; let N = 20; let Nrand = 100; let R; let dx=0.0,dy=0.0,dz=0.0; let dxc=0.0,dyc=0.0,dzc=0.0; let dxp=0.0,dyp=0.0,dzp=0.0; let xc=0,yc=0,zc=1; let TWO_PI=6.28318530718; let pals = []; pals.push([[359, 31, 56], [353, 19, 97], [6,20,96], [22, 21, 92], [20, 16, 98], [28, 21, 99], [6,20,96], [347,13,96]]); pals.push([[208,49,38], [205,41,59], [192,29,45], [190,14,64], [220, 9, 78], [12, 4, 45], [167,16,81], [180,7,100]]); pals.push([[222,86,22], [208,88,29], [203,61,57], [215, 49, 74], [211,68, 93], [236,100,24], [195,85,45]]); pals.push([[4,100,34],[1,96,84],[26,92,94],[34,58,89],[48,100,99],[21,100,84],[8,100,17]]); pals.push([[43,35,28],[46,39,42],[41,27,90],[39,46,49],[39,83,90],[46,6,96],[46,15,97]]); pals.push([[209, 92, 15], [197, 98, 24], [195, 79, 37], [190, 42, 64], [189, 62, 90]]); pals.push([[331,21,31], [265,23,40], [335,26,76], [163,32,22], [210, 24, 29], [180,31, 97], [49,30,63], [180,23,90], [170,13,48]]); pals.push([[26, 71, 17],[26, 78, 23],[42, 68, 60], [40, 46, 60], [42, 76, 74], [37, 62, 74]]); pals.push([[102,41,55], [123,37,63], [94,27,65], [121,30,69], [91, 26, 67], [125,37, 63]]); pals.push([[115,52,17], [98,51,40],[78,58,54],[91,67,84],[6,54,38]]); pals.push([[349, 83, 69],[250, 44, 66],[191, 44, 66],[27, 82, 72],[45, 85, 70],[0, 100, 79]]) pals.push([[221, 20, 21],[199, 26, 38],[190, 10, 81],[220, 0, 100],[190, 0, 100],[205, 30, 43],[183, 20, 100],[215, 43, 36],[185, 0, 100],[200, 0, 100]]) let header = `#version 300 es precision highp float;`; var src_vert = header+` in vec2 a; out vec2 u; void main() { gl_Position = vec4(a,0.,1.); u = a/2. +vec2(.5,.5); }`; var src_simp = header+` const int N =20; const float Nf =20.; const int Nrand =100; const float Nrandf =100.; const float dn =0.1; const int Nx =512; const float Nxf =512.; const float PI =3.1415926; const int numOctaves =8; in vec2 u; out vec4 cout; uniform vec2 res; uniform int t; // frame number uniform highp sampler2D img; uniform highp sampler2D img00; uniform float kp[N]; uniform float rand[Nrand]; uniform vec3 dxy; uniform vec3 rc; vec2 hash2( in vec2 x ) { int ii = int(mod(x.x+res.x*x.y,Nrandf)); //counter into array of random #s int i2 = int(mod(x.y-res.y*x.x,Nrandf)); //counter into array of random #s return vec2(rand[ii],rand[i2]); } float ddot ( in vec2 x, in vec2 y ) { return x.x+y.x + x.y*y.y; } // returns 3D value noise (in .x) and its derivatives (in .yz) vec3 noise( in vec2 p ) { vec2 i = floor( p ); vec2 f = fract( p ); vec2 u = f*f*f*(f*(f*6.0-15.0)+10.0); vec2 du = 30.0*f*f*(f*(f-2.0)+1.0); vec2 ga = hash2( i + vec2(0.0,0.0) ); vec2 gb = hash2( i + vec2(1.0,0.0) ); vec2 gc = hash2( i + vec2(0.0,1.0) ); vec2 gd = hash2( i + vec2(1.0,1.0) ); float va = ddot( ga, f - vec2(0.0,0.0) ); float vb = ddot( gb, f - vec2(1.0,0.0) ); float vc = ddot( gc, f - vec2(0.0,1.0) ); float vd = ddot( gd, f - vec2(1.0,1.0) ); return vec3( va + u.x*(vb-va) + u.y*(vc-va) + u.x*u.y*(va-vb-vc+vd), // value ga + u.x*(gb-ga) + u.y*(gc-ga) + u.x*u.y*(ga-gb-gc+gd) + // derivatives du * (u.yx*(va-vb-vc+vd) + vec2(vb,vc) - va)); } vec3 fbm( in vec2 x, in float H ) { float G = exp(-2.*H);float f = 1.0;float a = 1.0;vec3 t = vec3(0.); for( int i=0; i<numOctaves; i++ ) { t += a*noise(f*x);f *= 2.0;a *= G; } return t; } vec4 laplacian(in sampler2D img, in vec2 uv, in float dx) { vec2 dt = 1./res; vec4 rg = texture(img, uv + vec2(-1., -1.)*dt)*(0.05+dx); rg += texture(img, uv + vec2(0., -1.)*dt)*(0.2-dx); rg += texture(img, uv + vec2(1., -1.)*dt)*(0.05+dx); rg += texture(img, uv + vec2(-1., 0.)*dt)*(0.2-dx); rg -= texture(img, uv + vec2(0., 0.)*dt); rg += texture(img, uv + vec2(1., 0.)*dt)*(0.2-dx); rg += texture(img, uv + vec2(-1., 1.)*dt)*(0.05+dx); rg += texture(img, uv + vec2(0., 1.)*dt)*(0.2-dx); rg += texture(img, uv + vec2(1., 1.)*dt)*(0.05+dx); return rg; } void main(void) //( out vec4 fragColor, in vec2 fragCoord ) { vec2 dt = rc.z/res; vec2 uv = (u+dxy.xy-vec2(0.5))*(1.+dxy.z)+vec2(0.5); vec2 uc = -rc.xy + u*rc.z; // global coords vec3 ff = (0.4+0.6*kp[9])*fbm(uc+fbm(0.8*uc,0.7).yz,0.7); vec3 f2 = (0.4+0.6*kp[10])*fbm(-uc+fbm(-0.8*uc,0.7).yz,0.7); vec4 cc; vec4 lp,lp2,cv,cu,cv2,cu2; float aa,bb; if ((uv.x>1. || uv.x<0. || uv.y>1. || uv.y<0.)) { cc = texture(img00,uc); aa = cc.x/256. + cc.y; bb = cc.z/256. + cc.w; lp = laplacian(img00,uc,(kp[0]*2.-1.)*f2.x*(1.-aa)); lp2 = laplacian(img00,uc,(kp[1]*2.-1.)*ff.x*bb); cv= texture(img00, uc + vec2(0., 1.)*dt); cu= texture(img00, uc + vec2(1., 0.)*dt); cv2= texture(img00, uc + vec2(0., -1.)*dt); cu2= texture(img00, uc + vec2(-1., 0.)*dt); } else { uc=uv; cc = texture(img,uc); aa = cc.x/256. + cc.y; bb = cc.z/256. + cc.w; lp = laplacian(img,uc,(kp[0]*2.-1.)*f2.x*(1.-aa)); lp2 = laplacian(img,uc,(kp[1]*2.-1.)*ff.x*bb); cv= texture(img, uc + vec2(0., 1.)*dt); cu= texture(img, uc + vec2(1., 0.)*dt); cv2= texture(img, uc + vec2(0., -1.)*dt); cu2= texture(img, uc + vec2(-1., 0.)*dt); } float da = 1.2*(1.-kp[15])*(1.-bb)*(lp.x+256.*lp.y)/256. + 3.*( -aa*bb*bb + 0.015*(1.+kp[17])*(1.-aa))*ff.x*ff.x ; float db = 1.2*(1.-kp[16])*(1.+kp[7])*(0.02+ff.x*ff.x)*aa*0.5*(lp2.z+256.*lp2.w)/256. + 3.*( aa*bb*bb - 0.04*(1.+1.*kp[6])*bb)*ff.x*ff.x; float dda=sin(3.*(1.+kp[2]*(ff.x-1.))*aa*1.57)*kp[15]*0.18*((cu.x/256.+cu.y-cu2.x/256.-cu2.y)*ff.y + (cv.x/256.+cv.y-cv2.x/256.-cv2.y)*ff.z); float ddb=sin(3.*(1.+kp[3]*(f2.x-1.))*bb*1.57)*kp[16]*0.18*((cu.z/256.+cu.w-cu2.z/256.-cu2.w)*f2.y + (cv.z/256.+cv.w-cv2.z/256.-cv2.w)*f2.z); uv += 2.*f2.yz; float uv2 = .003+uv.x*uv.x+uv.y*uv.y; uv2 = (cu.x/256.+cu.y-cu2.x/256.-cu2.y)*uv.y/uv2 - (cv.x/256.+cv.y-cv2.x/256.-cv2.y)*uv.x/uv2; dda += kp[12]*0.04*uv2; ddb += kp[13]*0.04*uv2; da += dda*(1.-dda); db += ddb*(1.-ddb); da*=46000.; db*=46000.; da+=aa*256.*256.; db+=bb*256.*256.; float yn = floor(da/256.); float xn = (da-yn*256.); float wn = floor(db/256.); float zn = (db-wn*256.); cout = vec4(xn,yn,zn,wn)/256.; }`; var src_colp = header+` const int N =20; const float Nf =20.; const int Nrand =100; const float Nrandf =100.; const float dn =0.1; const int Nx =512; const float Nxf =512.; const float PI =3.1415926; const int numOctaves =8; in vec2 u; out vec4 cc; uniform vec2 res; uniform vec2 L; uniform int t; // frame number uniform highp sampler2D img; uniform highp sampler2D img2; uniform sampler2D pal; // palette uniform float rand[Nrand]; uniform vec3 dxy; uniform vec3 rc; vec2 hash2( in vec2 x ) { int ii = int(mod(x.x+res.x*x.y,Nrandf)); int i2 = int(mod(x.y-res.y*x.x,Nrandf)); return vec2(rand[ii],rand[i2]); } float ddot ( in vec2 x, in vec2 y ) { return x.x+y.x + x.y*y.y; } // returns 3D value noise (in .x) and its derivatives (in .yz) vec3 noise( in vec2 p ) { vec2 i = floor( p ); vec2 f = fract( p ); vec2 u = f*f*f*(f*(f*6.0-15.0)+10.0); vec2 du = 30.0*f*f*(f*(f-2.0)+1.0); vec2 ga = hash2( i + vec2(0.0,0.0) ); vec2 gb = hash2( i + vec2(1.0,0.0) ); vec2 gc = hash2( i + vec2(0.0,1.0) ); vec2 gd = hash2( i + vec2(1.0,1.0) ); float va = ddot( ga, f - vec2(0.0,0.0) ); float vb = ddot( gb, f - vec2(1.0,0.0) ); float vc = ddot( gc, f - vec2(0.0,1.0) ); float vd = ddot( gd, f - vec2(1.0,1.0) ); return vec3( va + u.x*(vb-va) + u.y*(vc-va) + u.x*u.y*(va-vb-vc+vd), // value ga + u.x*(gb-ga) + u.y*(gc-ga) + u.x*u.y*(ga-gb-gc+gd) + // derivatives du * (u.yx*(va-vb-vc+vd) + vec2(vb,vc) - va)); } vec3 fbm( in vec2 x, in float H ) { float G = exp(-2.*H);float f = 1.0;float a = 1.0;vec3 t = vec3(0.); for( int i=0; i<numOctaves; i++ ) { t += a*noise(f*x);f *= 2.0;a *= G; } return t; } vec4 laplacian(in sampler2D img, in vec2 uv, in float dx) { vec2 dt = 1./res; vec4 rg = texture(img, uv + vec2(-1., -1.)*dt)*(0.05+dx); rg += texture(img, uv + vec2(0., -1.)*dt)*(0.2-dx); rg += texture(img, uv + vec2(1., -1.)*dt)*(0.05+dx); rg += texture(img, uv + vec2(-1., 0.)*dt)*(0.2-dx); rg -= texture(img, uv + vec2(0., 0.)*dt); rg += texture(img, uv + vec2(1., 0.)*dt)*(0.2-dx); rg += texture(img, uv + vec2(-1., 1.)*dt)*(0.05+dx); rg += texture(img, uv + vec2(0., 1.)*dt)*(0.2-dx); rg += texture(img, uv + vec2(1., 1.)*dt)*(0.05+dx); return rg; } // from http://www.java-gaming.org/index.php?topic=35123.0 vec4 cubic(float v){ vec4 n = vec4(1.0, 2.0, 3.0, 4.0) - v; vec4 s = n*n*n; float x = s.x; float y = s.y - 4.0 * s.x; float z = s.z - 4.0 * s.y + 6.0 * s.x; float w = 6.0 - x - y - z; return vec4(x, y, z, w)*(1./6.); } vec4 textureBicubic(in sampler2D img, in vec2 uv){ vec2 dt = 1./res; uv = uv/dt - 0.5; vec2 fxy = fract(uv); uv -= fxy; vec4 xc = cubic(fxy.x); vec4 yc = cubic(fxy.y); vec4 c = uv.xxyy + vec2 (-0.5, +1.5).xyxy; vec4 s = vec4(xc.xz + xc.yw, yc.xz + yc.yw); vec4 offset = c + vec4 (xc.yw, yc.yw) / s; offset *= dt.xxyy; vec4 sample0 = vec4(texture(img, offset.xz)); vec4 sample1 = vec4(texture(img, offset.yz)); vec4 sample2 = vec4(texture(img, offset.xw)); vec4 sample3 = vec4(texture(img, offset.yw)); float sx = s.x / (s.x + s.y); float sy = s.z / (s.z + s.w); return mix(mix(sample3, sample2, sx), mix(sample1, sample0, sx), sy); } void main(void) { vec2 uv = (u+dxy.xy)*(1.+dxy.z); //vTexCoord.xy; vec2 uc = -rc.xy + u*rc.z; if (L.x>L.y) { uv.y = 0.5 + (L.y/L.x)*(uv.y-0.5); uc.y = 0.5 + (L.y/L.x)*(uc.y-0.5); } else { uv.x = 0.5 + (L.x/L.y)*(uv.x-0.5); uc.x = 0.5 + (L.x/L.y)*(uc.x-0.5); } vec3 ff = .5*fbm(uc+fbm(0.8*uc,0.7).yz,0.7); vec3 f2 = fbm(-uc+fbm(-0.8*uc,0.7).yz,0.7); cc = textureBicubic(img,uv); vec4 cco = textureBicubic(img2,uv); float aa = (cc.x+256.*cc.y)/256.; float bb = (cc.z+256.*cc.w)/256.; float aao = (cco.x+256.*cco.y)/256.; float bbo = (cco.z+256.*cco.w)/256.; vec4 lpo = laplacian(img2,uv,3.*0.3*ff.x*aao); vec4 lp = laplacian(img,uv,3.*0.3*ff.x*aa); aao=4.*0.03*(lp[0]+lp[1]*256.-lpo[0]-lpo[1]*256.); bbo=4.*0.03*(lp[2]+lp[3]*256.-lpo[2]-lpo[3]*256.); vec4 cc_hsl = texture(pal,vec2(clamp(2.*bb*aa+0.4*(aa)*ff.x+0.4*(bb)*f2.x,0.,1.),clamp(ff*bb,0.,1.))); vec4 cco_hsl = texture(pal,vec2(clamp(2.*bbo*aao+0.4*(aao)*ff.x+0.4*(bbo)*f2.x,0.,1.),clamp(ff*bbo,0.,1.))); cc_hsl -= 0.5*(cc_hsl-cco_hsl); cc_hsl.x += 0.3*ff.x*(1.-f2.x) + 0.01*f2.x*bb + rc.x*rc.y; cc_hsl.x = mod(cc_hsl.x,1.); cc_hsl.z *= 0.2+(3.*bb+6.*aa*bb); cc_hsl.y *= (1.1-ff.x*bb)*(1.-f2.x*f2.x); vec3 rgb = clamp( abs(mod(cc_hsl.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 ); rgb = cc_hsl.z + cc_hsl.y * (rgb-0.5)*(1.0-abs(2.0*cc_hsl.z-1.0)); rgb *= .75+.32*rgb*(3.-2.*rgb); cc = vec4(pow(rgb[0],0.9), pow(rgb[1],0.9), pow(rgb[2],0.85), 1.); vec4 ccoo = vec4(.4+.3*aao-f2.x,.1*(aao+bbo),1.-bbo,1.); cc = mix(cc,ccoo,clamp(2.*ff.x*bbo*aao,-0.5,1.)); cc=clamp(cc,0.,1.); }`;