0xa0154806…bb3asent to0x99a9b7c1…b069·#16,494,671·view on Etherscan
//"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.);
}`;