0xe4f517a4…f7b9sent to0x99a9b7c1…b069·#16,562,342·view on Etherscan
ght,THREE.RGBAFormat,THREE.FloatType);for(let l=0;l<this.count4;l+=4)this.textureMain.image.data[l+0]=0,this.textureMain.image.data[l+1]=0,this.textureMain.image.data[l+2]=0,this.textureMain.image.data[l+3]=0;this.textureMain.needsUpdate=!0}setX(s,t){this.textureMain.image.data[t*4+0]=s,this.textureMain.needsUpdate=!0}setY(s,t){this.textureMain.image.data[t*4+1]=s,this.textureMain.needsUpdate=!0}setZ(s,t){this.textureMain.image.data[t*4+2]=s,this.textureMain.needsUpdate=!0}};var Zs=`precision highp float;
#define M_PI 3.1415
#define HALF_PI 1.5707
uniform float sizePlanes;uniform sampler2D tDataMain;uniform sampler2D tPattern;uniform float ugenhash;uniform float uLineWidth;uniform float uLineWidthRandomAdd;uniform float uLineWidthRandomPower;uniform float uSegmentLengthMin;uniform float uSegmentLengthMax;uniform float uSegmentLengthPower;uniform float uRotationType;uniform float uRotationDir;uniform vec2 uHueRand;uniform vec2 uSaturationRand;uniform vec2 uLuminosityRand;uniform float uColorAdjustementValue;uniform float uColorAdjustementScale;uniform float uDontUsePattern;uniform float uVisibleThreshold;uniform float uCountLinesStep;uniform float uAnimTime;attribute float uid;attribute vec2 uvDataTexture;attribute vec2 side;attribute vec2 uv;varying vec2 vUv;varying vec3 vColor;varying float isVisible;varying float vUid;varying float vUidBase;varying float vModColor1;varying float vModColor2;vec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec3 permute(vec3 x){return mod289(((x*34.0)+1.0)*x);}float snoise(vec2 v){const vec4 C=vec4(0.211324,0.36602,-0.57735,0.024390);vec2 i=floor(v+dot(v,C.yy));vec2 x0=v-i+dot(i,C.xx);vec2 i1;i1=(x0.x>x0.y)?vec2(1.0,0.0):vec2(0.0,1.0);vec4 x12=x0.xyxy+C.xxzz;x12.xy-=i1;i=mod(i,289.0);vec3 p=permute(permute(i.y+vec3(0.0,i1.y,1.0))+i.x+vec3(0.0,i1.x,1.0));vec3 m=max(0.5-vec3(dot(x0,x0),dot(x12.xy,x12.xy),dot(x12.zw,x12.zw)),0.0);m=m*m;m=m*m;vec3 x=2.0*fract(p*C.www)-1.0;vec3 h=abs(x)-0.5;vec3 ox=floor(x+0.5);vec3 a0=x-ox;m*=1.79284-0.85373*(a0*a0+h*h);vec3 g;g.x=a0.x*x0.x+h.x*x0.y;g.yz=a0.yz*x12.xz+h.yz*x12.yw;return 130.0*dot(m,g);}float vhash(vec3 p){p=fract(p*0.3183099+.1);p*=17.0;return fract(p.x*p.y*p.z*(p.x+p.y+p.z));}float vnoise(in vec3 x){vec3 i=floor(x);vec3 f=fract(x);f=f*f*(3.0-2.0*f);return mix(mix(mix(vhash(i+vec3(0,0,0)),vhash(i+vec3(1,0,0)),f.x),mix(vhash(i+vec3(0,1,0)),vhash(i+vec3(1,1,0)),f.x),f.y),mix(mix(vhash(i+vec3(0,0,1)),vhash(i+vec3(1,0,1)),f.x),mix(vhash(i+vec3(0,1,1)),vhash(i+vec3(1,1,1)),f.x),f.y),f.z);}float hash12(vec2 p){vec3 p3=fract(vec3(p.xyx)*.1031);p3+=dot(p3,p3.yzx+33.33);return fract((p3.x+p3.y)*p3.z);}mat3 matrixFromEuler(vec3 euler){mat3 m;float a=cos(euler.x);float b=sin(euler.x);float c=cos(euler.y);float d=sin(euler.y);float e=cos(euler.z);float f=sin(euler.z);float ae=a*e;float af=a*f;float be=b*e;float bf=b*f;m[0][0]=c*e;m[0][1]=-c*f;m[0][2]=d;m[1][0]=af+be*d;m[1][1]=ae-bf*d;m[1][2]=-b*c;m[2][0]=bf-ae*d;m[2][1]=be+af*d;m[2][2]=a*c;return m;}float canBeVisible2(vec3 p1,vec3 p2){float dx=p2.x-p1.x;float dy=p2.y-p1.y;float a=atan(dy,dx);float dist=sqrt(dx*dx+dy*dy);float acc=dist/4.;float x=p1.x;float y=p1.y;for(int i=0;i<4;i++){vec3 p=texture2D(tPattern,vec2(x,y)).rgb;if(((p.r+p.g+p.b)/3.)<uVisibleThreshold){return 0.;}x+=cos(a)*acc;y+=sin(a)*acc;}return 1.;}float mapToPower(float value,float minValue,float maxValue,float power){float valueSign=sign(value);value=(value-minValue)/(maxValue-minValue);value=valueSign>0.?value:value-1.;value=pow(value*valueSign,abs(power));value=valueSign>0.?value:1.-value;return value*(maxValue-minValue)+minValue;}float randByPower(float minValue,float maxValue,float power,float id){if(minValue==maxValue){return minValue;}float value=hash12(vec2(id,ugenhash+uCountLinesStep*.1))*(maxValue-minValue)+minValue;return mapToPower(value,minValue,maxValue,power);}
#import utils/hsl2rgb
float fxrand(float id){return hash12(vec2(id,ugenhash+uCountLinesStep*.1));}float _fxrandInc=0.;float fxrandInc(float id){_fxrandInc+=.1;return hash12(vec2(id+_fxrandInc,ugenhash+uCountLinesStep*.1+_fxrandInc));}
#import easing/cubic
void main(){vUv=uv;float id=uid+uCountLinesStep;vec4 dataMain=texture2D(tDataMain,uvDataTexture);vec4 dataMain2=dataMain.xyzw;dataMain2.x+=fxrand(id);dataMain2.x=mod(dataMain2.x,1.);dataMain2.y+=fxrand(id+.1);dataMain2.y=mod(dataMain2.y,1.);dataMain2.x=(dataMain2.x*1.-.5)*2.;dataMain2.y=(dataMain2.y*1.-.5)*2.;float rotation=0.;float randAnim=sin(uAnimTime*10.);float canAdd=0.;float rotationType=uRotationType;if(rotationType==0.){if(fxrandInc(id)<.88){rotation=fxrandInc(id)*M_PI*2.;canAdd=1.;}else{rotation=uRotationDir;}}else if(rotationType==1.){if(fxrandInc(id)<.75){rotation=fxrandInc(id)*M_PI*2.;canAdd=1.;}else{if(fxrandInc(id)<.5){rotation=0.;}else{rotation=M_PI*.5;}}}else if(rotationType==2.){if(fxrandInc(id)<.3){rotation=fxrandInc(id)*M_PI*2.;canAdd=1.;}else{if(fxrandInc(id)<.5){rotation=0.;}else{rotation=M_PI*.5;}}}else if(rotationType==3.){if(fxrandInc(id)<.7){rotation=fxrandInc(id)*M_PI*2.;canAdd=1.;}else{rotation=uRotationDir;}}rotation+=randAnim*canAdd;float sizePlanesY=randByPower(uSegmentLengthMin,uSegmentLengthMax,uSegmentLengthPower,id);float sizePlanesY2=sizePlanesY;float scaleLine=(1./2048.)*2.;vec3 posBase=vec3(0.);posBase.x+=side.x*sizePlanes*.5*scaleLine*(uLineWidth+randByPower(0.,uLineWidth*uLineWidthRandomAdd,uLineWidthRandomPower,id));posBase.y+=side.y*sizePlanesY2*.5*scaleLine;mat3 rotationMatrix=matrixFromEuler(vec3(0.,0.,rotation));vec3 p1=vec3(0.);p1.y=1.*sizePlanesY*.5*scaleLine;p1*=rotationMatrix;p1+=(dataMain2.xyz*.5+.5);vec3 p2=vec3(0.);p2.y=-1.*sizePlanesY*.5*scaleLine;p2*=rotationMatrix;p2+=(dataMain2.xyz*.5+.5);if(uDontUsePattern==1.){isVisible=1.;}else{isVisible=canBeVisible2(p1,p2);}posBase.xyz*=rotationMatrix;float hue=randByPower(uHueRand.x,uHueRand.y,1.,id);float saturation=randByPower(uSaturationRand.x,uSaturationRand.y,1.,id);float luminosity=randByPower(uLuminosityRand.x,uLuminosityRand.y,1.,id);vColor=vec3(hue,saturation,luminosity);posBase+=vec3(dataMain2.x,dataMain2.y,0.);vec4 pos=vec4(posBase,1.);vModColor1=vnoise(vec3((dataMain2.x)*uColorAdjustementScale,(dataMain2.y)*uColorAdjustementScale,0.))*uColorAdjustementValue;vModColor2=vnoise(vec3((dataMain2.x)*uColorAdjustementScale,(dataMain2.y)*uColorAdjustementScale,0.))*uColorAdjustementValue;float percentModColor=snoise(vec2((dataMain2.x)*.6,(dataMain2.y)*.6));vModColor1*=(.5+percentModColor*.5);vModColor2*=(.5+percentModColor*.5);gl_Position=pos;vUid=id;vUidBase=uid;}`;var Js=`precision highp float;
#ifndef PI
#define PI 3.141592653589793
#endif
uniform float uAlpha;uniform float uCountLines;uniform vec3 uColor;uniform float uModSatPercentBased;uniform float uModLumPercentBased;uniform float uCountToAdd;varying vec2 vUv;varying vec3 vColor;varying float isVisible;varying float vUid;varying float vModColor1;varying float vModColor2;varying float vUidBase;
#import utils/hsl2rgb
#import easing/cubic
#import easing/exponential
void main(){if(isVisible==0.){discard;}if(vUidBase>uCountToAdd){discard;}if(vUid>uCountLines){discard;}float hue=uColor.r+vColor.r;float colorB=vColor.b;float lum=uColor.b+colorB-vModColor2*.4-uModLumPercentBased*cubicIn(vUv.y);vec3 color=hsl2rgb(hue,(uColor.g+vColor.g)-vModColor1*.2+uModSatPercentBased*exponentialOut(vUv.y),lum);vec4 dest=vec4(color,uAlpha);gl_FragColor=dest;}`;var fe=T(Zs),xe=T(Js),A=class extends THREE.RawShaderMaterial{constructor({size:s=10,vs:t=fe,fs:e=xe,uniforms:a={}}={}){a={...a,...{sizePlanes:{type:"f",value:s},tDataMain:{type:"t",value:null}}};let i=`precision highp float;
`,m=`precision highp float;
`;super({uniforms:a,vertexShader:i+t,fragmentShader:m+e,side:THREE.DoubleSide,type:"LinesMaterial",transparent:!0})}setBlending(s=!0){this.blending=s?THREE.AdditiveBlending:THREE.NormalBlending}init(s){this.uniforms.tDataMain.value=s.textureMain}onUpdate=()=>{this.uniforms.tDataMain.value=this.simulations.main.getTexture()};update(){this.onUpdate()}};var n0=class extends THREE.BufferGeometry{constructor(s){super(),this.data=s,this.count=this.data.count,this.init()}init(){let s=this.count<<1,t=this.count<<2,e=0,a=0,l=0,i=0,m=0,c=0,h=new Float32Array(t),d=new Float32Array(t*2);for(let b=0;b<t;b++){let H=b;for(let I=0;I<4;I++)h[e]=H,d[a+0]=m/(this.data.width-1),d[a+1]=c/(this.data.height-1),e+=1,a+=2;m+=1,m>this.data.width-1&&(m=0,c+=1)}e=0,a=0;let g=1,_=1,u=new Float32Array(t*2),v=new Float32Array(t*2);for(let b=0;b<s;b++)u[i+0]=-1*g,u[i+1]=-1*_,v[i+0]=0,v[i+1]=0,u[i+2]=-1*g,u[i+3]=1*_,v[i+2]=0,v[i+3]=1,u[i+4]=1*g,u[i+5]=-1*_,v[i+4]=1,v[i+5]=0,u[i+6]=1*g,u[i+7]=1*_,v[i+6]=1,v[i+7]=1,i+=8;a=0;let w=new Uint32Array(t*3);for(let b=0;b<this.count;b++)w[l+0]=a,w[l+1]=w[l+4]=a+1,w[l+2]=w[l+3]=a+2,w[l+5]=a+3,a+=4,l+=12;this.setAttribute("uid",new THREE.BufferAttribute(h,1)),this.setAttribute("uvDataTexture",new THREE.BufferAttribute(d,2)),this.setAttribute("side",new THREE.BufferAttribute(u,2)),this.setAttribute("uv",new THREE.BufferAttribute(v,2)),this.setIndex(new THREE.BufferAttribute(w,1))}};var o0=class{constructor(s,t){this.idx=s,this.data=t,this._x=0,this._y=0}reset(){this.x=0,this.y=0,this.alpha=0}setScale(s){this.scaleX=s,this.scaleY=s}set x(s){this._x=s,this.data.setX(this._x,this.idx)}get x(){return this._x}set y(s){this._y=s,this.data.setY(this._y,this.idx)}get y(){return this._y}};var c0=class extends THREE.Mesh{constructor(s,{material:t=new A,helpers:e=!0}={}){let a=new n0(s);if(super(a,t),t.init(s),this.helpers=e,this.helpers){this.lines=[],this.linesBuffer=[];for(let l=0;l<s.count;l++)this.lines.push(new o0(l,s));this.idxLine=0}this.frustumCulled=!1}get(){if(!this.helpers)throw new Error("Property 'helpers' set to false. Switch to true to be able to target lines through objects.");if(this.lines.length==0){let s=this.lines;this.lines=this.linesBuffer,this.linesBuffer=s}if(this.lines.length<=0)throw new Error("No more line available.");return this.lines.pop()}release(s){s.reset(),this.linesBuffer.push(s)}};var Ks=function(r){let s=os(r,!1);return{h:s[0]*360,s:s[1]*100,l:s[2]*100}};var h0=class{constructor(s,t){this._width=s,this._height=t,this._createEngine()}_createEngine(){let s=n.linesWidthHeight,t=n.linesWidthHeight;this.countLines=s*t,this._linesData=new l0(s,t,{autoFill:!1}),this._createMaterial(),this._linesHolder=new c0(this._linesData,{material:this._material,helpers:!0}),this._generateRands()}_createMaterial(){this._material=new A({size:1,uniforms:{tPattern:{type:"t",value:this._texturePattern},uResolution:{type:"v2",value:new THREE.