memoscan
← all memos

Memo 0x47b7d8b5…9b9927 on Ethereum

"use strict"; let N = 30; 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 feat=[]; var GET = {}; var query = window.location.search.substring(1).split("&"); for (var i = 0, max = query.length; i < max; i++) { if (query[i] === "") continue; var param = query[i].split("="); GET[decodeURIComponent(param[0])] = decodeURIComponent(param[1] || ""); } let pals = []; pals.push([[359,31,38],[353,19,66],[6,20,65],[22,21,63],[20,16,67],[28,21,67],[6,20,65],[347,13,65]]); pals.push([[208,49,37],[205,41,57],[192,29,44],[190,14,62],[220,9,76],[12,4,44],[167,16,79],[180,7,98]]); pals.push([[222,86,28],[208,88,36],[203,61,72],[215,49,94],[211,68,118],[236,100,30],[195,85,57]]); pals.push([[4,100,29],[1,96,73],[26,92,82],[34,58,77],[48,100,86],[21,100,73],[8,100,14]]); pals.push([[43,35,24],[46,39,37],[41,27,80],[39,46,43],[39,83,80],[46,6,85],[46,15,86]]); pals.push([[209,92,20],[197,98,32],[195,79,50],[190,42,87],[189,62,122]]); pals.push([[331,21,35],[265,23,45],[335,26,86],[163,32,24],[210,24,32],[180,31,110],[49,30,71],[180,23,102],[170,13,54]]); pals.push([[26,81,10],[26,78,28],[42,68,73],[40,46,73],[42,76,90],[37,62,90]]); pals.push([[102,41,54],[123,37,61],[94,27,63],[121,30,67],[91,26,65],[125,37,61]]); pals.push([[115,52,22],[98,51,53],[78,58,72],[91,67,112],[6,54,51]]); pals.push([[349,83,61],[250,44,58],[191,44,58],[27,82,64],[45,85,62],[0,100,70]]); pals.push([[221,20,18],[199,26,33],[190,10,70],[220,0,87],[190,0,87],[205,30,37],[183,20,87],[215,43,31],[185,0,87],[200,0,87]]); pals.push([[0,0,20],[0,0,15],[0,0,10],[210,20,20],[210,20,30],[90,50,40],[120,50,50],[180,50,75],[180,70,90],[210,70,95]]); pals.push([[140,60,20],[140,60,30],[140,60,40],[140,60,50],[140,60,60],[220,50,70],[200,60,75],[200,60,85],[210,60,50],[220,60,35]]); 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 = 30; 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 = 9; in vec2 u; layout(location = 0) out vec4 cout; layout(location = 1) out vec4 cout2; uniform vec2 res; uniform float t; // frame number uniform float tr; // relative frame number wrt period \in [0,1] uniform highp sampler2D img; uniform highp sampler2D img00; uniform highp sampler2D img2; uniform highp sampler2D img02; uniform float kp[N]; uniform float kl[N]; uniform float rand[Nrand]; uniform vec3 dxy; uniform vec3 rc; uniform float mult; 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; } 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 ); 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, in int numoct ) { float G = exp(-2.*H);float f = 1.0;float a = 1.0;vec3 t = vec3(0.); for( int i=0; i<numoct; i++ ) { t += a*noise(f*x);f *= 2.0;a *= G; } return t; } vec4 laplacian(in sampler2D img, in vec2 uv, in float dx, in vec2 dt) { 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 ) { float sin1 = rand[42]; vec2 dt = 1./res; //rc.z/res; float tfac = exp(1.+kl[6]*sin(t*kp[13])); vec2 uc = -rc.xy + u*rc.z; // world space uc = u; // always simulate the entire world vec2 uv = u; // no resampling vec2 uc2 = uc; uc2.x*=1.+sin1*(40.*kl[14]-1.); uc2.y*=1.+(1.-sin1)*(40.*kl[15]-1.); vec3 ff = 1.9*(0.4+0.6*kp[9])*fbm(-(.3+.4*kl[11])*uc2+kl[16]+t/16.*vec2(kl[16]-.5,kl[17]-.5)+kl[18]*fbm((.3+.5*kl[12])*uc2,.7,4).yz,0.5,4); vec3 f2 = 1.1*(0.4+0.6*kp[10])*fbm(uc2+fbm(-0.6*uc2,0.7,5).yz,0.7,4); sin1 = .5+clamp(kl[16]*200.*ff.y,-.5,.5); float cos1 = 1.-sin1; float sin2 = .5+clamp(100.*ff.z+40.*(kl[8]-.5),-.5,.5); float sss = -1.+2.*round(fract(uc.y*res.y/8.)); float sss2 = -1.+2.*round(fract(uc.x*res.x/19./(.3+kl[2]))); sss = sin2*sss+(1.-sin2)*sss2; uv.x+=.2*(1.+2.*kp[16])*cos1*(.3*tr*(1.-tr)*(1.-tr)*(ff.x*ff.x) + (1.-tr)*(1.-tr)*1.*(kl[0]-.5))*rand[0]*sss*17./res.x/2.*(round(fract(uc.y*res.y/2.))-.5); uv.y+=.2*(1.+2.*kp[17])*sin1*(.3*tr*(1.-tr)*(1.-tr)*(ff.x*ff.x) + (1.-tr)*(1.-tr)*1.*(kl[0]-.5))*rand[0]*sss*17./res.y/2.*(round(fract(uc.x*res.x/2.))-.5); float r2 = (uc.x-.5)*(uc.x-.5)+(uc.y-.5)*(uc.y-.5); float sx = cos((uc.x-.5)*kl[7]*2.+kl[9]); float sy = cos((uc.y-.5)*kl[8]/2.+kl[10]); float x0 = .5+.5*cos(t/3.2321); float y0 = .5+.5*sin(t/2.); float rfac = (uc.x-x0)*(uc.x-x0)+(uc.y-y0)*(uc.y-y0); rfac = exp(kp[17]*sin(5.*kp[18]*rfac)); vec4 cc,cc2; vec4 lp,lpb,cv,cu,cvb,cub; vec4 lp2,lpb2,cv2,cu2,cvb2,cub2; float aa,bb,aa2,bb2; vec2 ex = vec2(1.,0.); vec2 ey = vec2(0.,1.); cc = texture(img,uv); aa = cc.x/256. + cc.y; bb = cc.z/256. + cc.w; lp = laplacian(img,uv,(kp[0]*2.-1.)*f2.x*(1.-aa),dt); lpb = laplacian(img,uv,(kp[1]*2.-1.)*ff.x*bb,dt); cv= texture(img, uv + ey*dt); cu= texture(img, uv + ex*dt); cvb= texture(img, uv - ey*dt); cub= texture(img, uv - ex*dt); cc2 = texture(img2,uv); aa2 = cc2.x/256. + cc2.y; bb2 = cc2.z/256. + cc2.w; lp2 = laplacian(img2,uv,(kp[0]*2.-1.)*f2.x*(1.-aa2),dt); lpb2 = laplacian(img2,uv,(kp[1]*2.-1.)*ff.x*bb2,dt); cv2= texture(img2, uv + ey*dt); cu2= texture(img2, uv + ex*dt); cvb2= texture(img2, uv - ey*dt); cub2= texture(img2, uv - ex*dt); float da = rfac*(1.-aa)*(1.-bb)*(lp.x+256.*lp.y)/256. + (1.+2.*kp[11])*( -aa*bb*bb + kl[10]*aa2*aa + 0.015*(1.+kp[17])*(1.-aa))*ff.x*ff.x ; float db = rfac*(1.+kp[7])*(0.02+ff.x*ff.x)*aa*0.5*(lpb.z+256.*lpb.w)/256. + (1.+2.*kp[11])*( aa*bb*bb - 0.04*(1.+1.*kp[6])*bb)*ff.x*ff.x; float da2 = 1.2*(1.-kp[17])*(1.+kp[7])*(0.02+f2.x*f2.x)*bb2*0.5*(lpb2.x+256.*lpb2.y)/256. + 3.*( bb*aa2*aa2 - 0.04*(1.+1.*kp[8])*aa2)*f2.x*f2.x; float db2 = 1.2*(1.-kp[18])*(1.+kp[7])*(0.02+f2.x*f2.x)*aa2*0.5*(lpb2.z+256.*lpb2.w)/256. + 3.*( kl[10]*aa2*aa + 0.*aa2*bb2*bb2 - 0.04*(1.+1.*kp[9])*bb2)*f2.x*f2.x; float dda=sin(3.*(1.+kp[2]*(ff.x-1.))*aa*1.57)*kp[15]*0.18*((cu.x/256.+cu.y-cub.x/256.-cub.y)*ff.y + (cv.x/256.+cv.y-cvb.x/256.-cvb.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-cub.z/256.-cub.w)*f2.y + (cv.z/256.+cv.w-cvb.z/256.-cvb.w)*f2.z); float dda2=sin(5.*(1.+kp[2]*(ff.x-1.))*aa2*1.57)*kp[15]*0.18*((cu2.x/256.+cu2.y-cub2.x/256.-cub2.y)*ff.y + (cv2.x/256.+cv2.y-cvb2.x/256.-cvb2.y)*ff.z); float ddb2=sin(5.*(1.+kp[3]*(f2.x-1.))*bb2*1.57)*kp[16]*0.18*((cu2.z/256.+cu2.w-cub2.z/256.-cub2.w)*f2.y + (cv2.z/256.+cv2.w-cvb2.z/256.-cvb2.w)*f2.z); da += tfac*dda; db += tfac*ddb; da2 += tfac*dda2*(1.-dda2); db2 += tfac*ddb2*(1.-ddb2); vec2 dtt = vec2((2.*kl[28]-1.)*sy,sx); da*= (1.+kl[17])*2000.*dtt.x/mult; db*= (1.+kl[17])*2000.*dtt.x/mult; da2*= 800.*dtt.y/mult; db2*= 800.*dtt.y/mult; da+=aa*256.*256.; db+=bb*256.*256.; da2+=aa2*256.*256.; db2+=bb2*256.*256.; float yn = floor(da/256.); // get leading part of da and rescale float xn = (da-yn*256.); float wn = floor(db/256.); float zn = (db-wn*256.); float yn2 = floor(da2/256.); float xn2 = (da2-yn2*256.); float wn2 = floor(db2/256.); float zn2 = (db2-wn2*256.); cout = vec4(xn,yn,zn,wn)/256.; cout2 = vec4(xn2,yn2,zn2,wn2)/256.; uc.x += 10.*ff.y*ff.z*uc.y; cout*= 1.-kl[16]*.2*exp(-100.*(uc.x-.2-.6*kp[16])*(uc.x-.2-.6*kp[16]))-kl[17]*.2*exp(-100.*(uc.x-.2-.6*kp[17])*(uc.x-.2-.6*kp[17]))-kl[18]*.2*exp(-100.*(uc.x-.2-.6*kp[18])*(uc.x-.2-.6*kp[18]))-kl[19]*.2*exp(-100.*(uc.x-.2-.6*kp[19])*(uc.x-.2-.6*kp[19])); }`; var src_colp = header+` const int N = 30; 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 = 4; //8; in vec2 u; out vec4 cc; uniform vec2 res; uniform vec2 L; uniform float t; // frame number uniform highp sampler2D img; uniform highp sampler2D img2; uniform highp sampler2D imgp; uniform highp sampler2D img2p; uniform highp sampler2D pal; uniform float rand[Nrand]; uniform vec2 mouse; uniform vec3 dxy; uniform vec3 rc; uniform float kl[N]; 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)); return vec2(rand[ii],rand[i2]); } float ddot ( in vec2 x, in vec2 y ) { return x.x+y.x + x.y*y.y; } 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.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 ) { float lum = rand[45]; float sqr = rand[46]; sqr=1.-rc.z*(1.-sqr); float horiz = rand[48]; float eclipa = rand[67]; float eclipt = rand[68]; float cres = rand[69]; float esc = rand[88]; float x0 = (1.+eclipa*cos(eclipt+t*0.02))/2.; float y0 = (1.+eclipa*sin(eclipt+t*0.02))/2.; float sin1 = rand[42]; vec2 uv = (u+dxy.xy-vec2(0.5))*(1.+dxy.z)+vec2(0.5); // screen space vec2 uc = -rc.xy + u*rc.z; // world space float RR0,r2; if (esc>0.) { vec4 lpo = laplacian(imgp,uc+kl[28]*.5/res,0.); vec2 uc0 = uc + 2.*kl[6]*0.06*lpo.yw; //+dxy.xy-vec2(0.5))*(1.+dxy.z)+vec2(0.5); // mouse in screen space vec2 mmouse = uc0; // + mouse; r2 = (uc.x-uc0.x)*(uc.x-uc0.x)*L.x*L.x+(uc.y-uc0.y)*(uc.y-uc0.y)*L.y*L.y; RR0 = .2*L.y; float lam = sqrt(r2)/RR0; vec2 u2 = uc + (uc-mmouse)*clamp(0.3*1./(1.-lam),-100.,100.); u2 = (u2+rc.xy)/rc.z; uv = (u2+dxy.xy-vec2(0.5))*(1.+dxy.z)+vec2(0.5); // screen space uc = -rc.xy + u2*rc.z; // world space } float fx = .5+(fract(uc.x*res.x)-.5)*1.43; float fy = .5+(fract(uc.y*res.y)-.5)*1.43; fx += horiz*(.5-fx); float fxn = (fx-.5)*.7 + .5; //properly normalized to [0,1] float fyn = (fy-.5)*.7 + .5; float sss = 1.; cc = texture(img,uc); // in [0,1] vec4 cco = texture(imgp,uc); vec4 cc2 = texture(img2,uc); vec4 cco2 = texture(img2p,uc); vec4 ccx = texture(img,uc+1.*vec2(1./res.x,0.)); vec4 ccy = texture(img,uc+1.*vec2(0.,1./res.y)); 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.; float aa2 = (cc2.x+256.*cc2.y)/256.; float bb2 = (cc2.z+256.*cc2.w)/256.; float hyp = sqrt(.01 + (ccx.z/256.+ccx.w-bb)*(ccx.z/256.+ccx.w-bb) + (ccy.z/256.+ccy.w-bb)*(ccy.z/256.+ccy.w-bb)); float ct = (ccx.z/256.+ccx.w-bb)/hyp; float st = (ccy.z/256.+ccy.w-bb)/hyp; float fx2 = x0+(fx-x0)*ct+(fy-y0)*st; float fy2 = y0-(fx-x0)*st+(fy-y0)*ct; float r22 = (fx2-x0)*(fx2-x0)+(fy2-y0)*(fy2-y0)-0.2; float rxmy = abs((fx-.5)*ct+(fy-.5)*st)-0.1;//*ff.x; hyp = sqrt(.01 + (ccx.z/256.+ccx.w-bbo)*(ccx.z/256.+ccx.w-bbo) + (ccy.z/256.+ccy.w-bbo)*(ccy.z/256.+ccy.w-bbo)); float cto = (ccx.z/256.+ccx.w-bbo)/hyp; float sto = (ccy.z/256.+ccy.w-bbo)/hyp; float rx = abs(fx-x0); float ry = abs(fy-y0); vec2 dx = floor(3.*vec2(kl[22],kl[23]))/res; vec4 ccu = texture(img,uc+dx); vec4 ccd = texture(img,uc-dx); float rxn = abs(fxn-.5); float ryn = abs(fyn-.5); // add curvature vec2 duc = 3.*(1.-rand[45])*(1.-rand[46])*vec2((kl[21]-.5)*fxn*(1.-fxn)*((fyn-.5)*(fyn-.5)), (kl[22]-.5)*fyn*(1.-fyn)*((fxn-.5)*(fxn-.5))); uc+=duc/res; vec2 uc2 = uc; uc2.x*=1.+sin1*(40.*kl[14]-1.); uc2.y*=1.+(1.-sin1)*(40.*kl[15]-1.); vec3 ff = .5*fbm(-(.3+.4*kl[11])*uc2+kl[16]+t/16.*vec2(kl[16]-.5,kl[17]-.5)+fbm((.3+.5*kl[12])*uc2,.7).yz,0.5); vec3 f2 = fbm(uc2+fbm(-0.6*uc2,0.7).yz,0.5); r2 = 1.1*sqrt((fx-.5)*(fx-.5)+(fy-.5)*(fy-.5))-.42*(1.-(1.-lum)*(1.-horiz)*(.2-.3*aa*aa)); float drr = clamp((min(abs(rx-rx),abs(rx+ry))-.1*ff.x)*20.,0.,1.); // rounded squares float drrmix = clamp(mix(1.-aa-ff.y-bb,3.*(bb+aa-ff.x),rand[40]),0.,1.); drrmix*=4.*(1.-drrmix); drr += .7*(1.-drr); vec4 lp = laplacian(img,uc,0.9*ff.x*aa); vec4 lp2= laplacian(img2,uc,0.9*ff.x*aa2); aao=0.12*(lp.x+lp.y*256.); bbo=0.12*(lp.z+lp.w*256.); float aao2=0.12*(lp2[0]+lp2[1]*256.); float bbo2=0.12*(lp2[2]+lp2[3]*256.); ff.z *= 1. + 3.*uc.x*(1.-uc.x); ff.y *= 1. + 3.*uc.x*(1.-uc.x); float px = 20.*bb*aa+1.4*(aa)*ff.x+1.4*(bb)*f2.x; float pxo = 20.*bbo*aao+1.4*(aao)*ff.x+1.4*(bbo)*f2.x; vec4 cc_hsl = texture(pal,vec2(5.*px*px,kl[5]*uc.y+ff.z*bb)); vec4 cco_hsl = texture(pal,vec2(5.*pxo*pxo,kl[5]*uc.y+ff.z*bbo)); vec4 cc2_hsl = texture(pal,vec2(1.-2.*bb2*aa2-0.4*(aa2)*ff.x-0.4*(bb2)*f2.x,1.-ff.y*bb)); vec4 cco2_hsl = texture(pal,vec2(1.-2.*bbo2*aao2-0.4*(aao2)*ff.x-0.4*(bbo2)*f2.x,1.-ff.y*bbo)); cc_hsl.z = pow(cc_hsl.z,1.7); cco_hsl.z = pow(cco_hsl.z,1.4); cc_hsl.rgb -= (.1+.7*kl[13])*(cc_hsl.rgb-cco_hsl.rgb); cc_hsl.x += .15*drrmix; cc_hsl.x *= 1.+(cc_hsl.x-1.)*kl[7]; // colour modulation cc_hsl.x += 0.1*((fx-.5)*aa2+(fy-.5)*bb2); cc_hsl.x = fract(cc_hsl.x); cc_hsl.z *= 0.9+3.*bb+kl[4]*aa*aa2+kl[2]*bb2/(1.+bb2)+kl[3]*aa*bb; // multiply lightness by particle number cc_hsl.y *= (1.15-.1*ff.x*ff.x*bb); //*(1.-f2.x*f2.x); // multiply sat by 1-particle number cc_hsl.y = pow(cc_hsl.y,.7); cc_hsl.z*=1.4 - 0.3*rand[45]-2.*kl[4]*uc.x*(2.-3.*uc.x)*(x0-rx)*(y0-ry); cc_hsl=clamp(cc_hsl,0.01,1.); // hsl to rgb: 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)); cc = vec4(pow(rgb.r,(kl[9]-.1*lum-.4*bbo2)*.6),pow(rgb.g,(kl[11]-.1*lum-.3*aao2)*.6),pow(rgb.b,(kl[10]-.1*lum-.1*aa*bb)*.6),1.); cc.rgb=clamp(cc.rgb,0.01,1.); cc.rgb *= cc.rgb*(3.-2.*cc.rgb); cc.rgb *= .6+.4*cc.rgb*(3.-2.*cc.rgb); cc.xyz*=exp(-.3*abs(st*cto-sto*ct)); vec4 ccoo = vec4(cc.bgr,1.); cc = mix(cc,ccoo,clamp(20.*(0.1+0.3*ff.x*ff.x)*0.03*(aao*aao*bbo*bbo),0.001,0.99)); r2 += lum*((2.*kl[7]-1.)*r2*r2*r2-r2); // very trippy r2 *= 1.+rand[46]*(r2-1.); // round squares r2+=1.; r2*= 4.*r2*r2-6.*r2+3.; r2-=1.3; cc.rgb = 1.-cc.rgb; // = kl[19]*(1.-cc.rgb) + (1.-kl[19])*cc.rgb; drr *= (1.-rand[47]) + rand[47]*r2*.5; // rand[47] = rcorr vec3 cc_bg = vec3(rand[39],rand[40],rand[41]); cc_bg *= 1.-.05*drr*(rx+ry-.67+.3*f2.y)*(1.+cc.rgb)*(1.+lum); cc_bg *= .7+.3*sqrt(rc.z); //rc.z; aa = sin(10.*fx*aao*kl[27]); bb = sin(10.*fy*bbo*kl[28]); fx2 += kl[3]*(fx-fx2); fy2 += kl[4]*(fy-fy2); RR0 = .8-kl[2]*.4; //.7; //.95/2.; float rfac = 1. + (kl[29]-.5)*(-.2+.4*clamp(0.5+(1.-2.*cres)*(RR0*RR0-(fx2-aa*x0)*(fx2-aa*x0)-(fy2-bb*y0)*(fy2-bb*y0))/(0.01*0.05*(1.+9.*eclipa/0.02)), .5-.25*cres, 1.)); cc.r *= rfac*(1.-2.*kl[19])+2.*kl[19]; cc.g *= kl[19] + rfac*(1.-kl[19]); cc.b *= rfac; cc.rgb = mix(cc.rgb, cc_bg, clamp(clamp(1.-rc.z,.6,1.)*drr*r2,-0.5,1.)); //.-r2)); // glow: cc.rgb *= 1.+0.2*(1.-lum)*(1.-sqr)*(-0.7+pow(max(.32,(fxn-.5)*(fxn-.5)+(fyn-.5)*(fyn-.5)),2.)); cc=clamp(cc,0.001,.999); }`;