0xa0154806…bb3asent to0xaf40b660…0f2f·#18,609,589·view on Etherscan
"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);
}`;