0x122cdf09…f8b5sent to0x99a9b7c1…b069·#17,012,019·view on Etherscan
e.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,On.fb.read.targetTexture),n.activeTexture(n.TEXTURE1),n.bindTexture(n.TEXTURE_2D,zn.fb.read.targetTexture),n.activeTexture(n.TEXTURE2),n.bindTexture(n.TEXTURE_2D,In.fb.read.targetTexture),On.renderer.bindUniform("u_framebuffer",0),On.renderer.bindUniform("u_forces",1),On.renderer.bindUniform("u_noiseClouds",2),On.renderer.bindUniform("u_sunPos",an.sunPos),On.renderer.bindUniform("u_sunRad",an.sunRad),On.renderer.bindUniform("u_res",[On.fb.width,On.fb.height]),On.renderer.bindUniform("u_rf0",an.rf0),On.renderer.bindUniform("u_rf1",an.rf1),On.renderer.bindUniform("u_ruv",[123.45*an.rf0,123.45*an.rf1]),On.renderer.render(On.fb.width,On.fb.height),On.fb.swap()},Nn=c(),Gn={},Vn=1/an.mapSize,qn=e=>{const r=an.numParticles,t=new Float32Array(2*r),o=new Float32Array(2*r),a=new Float32Array(4*r);for(let n=0;n<2*r;n+=2){let e=Nn.random_num(-Math.PI,Math.PI),r=Math.pow(Nn.random_dec(),.25)*an.sunRad;t[n]=an.sunPos[0]+Math.cos(e)*r,t[n+1]=an.sunPos[1]+Math.sin(e)*r,o[n]=2*Nn.random_dec()-1+1e-4,o[n+1]=2*Nn.random_dec()-1+1e-4,a[2*n]=5*Nn.random_dec(),a[2*n+1]=20*Nn.random_dec()+3,a[2*n+2]=Nn.random_dec(),a[2*n+3]=.1*Math.pow(Nn.random_num(.2,1),5)}Gn.renderer=s(e,{vert:n("#version 300 es\n#define GLSLIFY 1\n\nlayout(location=0) in vec2 a_position;\nlayout(location=1) in vec2 a_velocity;\nlayout(location=2) in vec4 a_extras;\n\nout vec2 v_position;\nout vec2 v_velocity;\nout vec4 v_extras;\nout vec3 v_color;\n\nuniform sampler2D u_particlemap;\nuniform sampler2D u_dvmap;\nuniform sampler2D u_sunTex;\nuniform sampler2D u_forceTex;\n\nuniform vec2 u_sunPos;\nuniform float u_sunRad;\n\nuniform float u_renderPer;\nuniform vec2 u_res;\n\nuniform float u_frame;\nuniform float u_haziness;\nuniform float u_activity;\nuniform float u_intensity;\nuniform float u_flareIntensity;\nuniform float u_rand;\nuniform vec2 u_invRes;\nuniform float u_rf0;\nuniform float u_rf1;\n\nconst float dt = 0.0002;\nfloat u_speedMin = 0.01;\n\n#define PI 3.14159265359\n#define TAU 6.28318530718\n\nvec3 getNormal( vec4 sdf ){\n float x = dot( vec2( 1.0, 0.0 ), sdf.yz );\n float y = dot( vec2( 0.0, 1.0 ), sdf.yz );\n float z = 1.0 - ( sdf.w - abs( sdf.x ) )/sdf.w;\n vec3 n = normalize( vec3( sqrt( abs( x ) ) * sign( x ) * ( 1.0 - z ), sqrt( abs( y ) ) * sign( y ) * ( 1.0 - z ), z ) );\n return n;\n}\n\n// Grab from https://www.shadertoy.com/view/4djSRW\n#define MOD3 vec3(.1031,.11369,.13787)\nfloat hash12(vec2 p) {\n vec3 p3 = fract(vec3(p.xyx) * .1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\nvec2 hash22(vec2 p) {\n\tvec3 p3 = fract(vec3(p.xyx) * vec3(.1031, .1030, .0973));\n p3 += dot(p3, p3.yzx+33.33);\n return fract((p3.xx+p3.yz)*p3.zy);\n}\n\nvec4 derivative( vec4 state, inout float density, inout float densityMult, inout vec4 sunData, in float speedMax ){\n vec2 uv = state.xy;\n\n vec4 dv = texture( u_dvmap, uv );\n density = dv.x;\n vec2 avgVelocity = dv.zw / max( density, 1.0 );\n\n float sunDist = sunData.x;\n vec2 sunGrad = normalize( sunData.yz );\n float sunGradMag = ( 1.0 / ( sunDist ) );\n\n vec4 forceData = texture( u_forceTex, uv );\n float forceDist = forceData.z;\n vec2 forceGrad = normalize( forceData.xy );\n float forceGradMag = ( 1.0 / ( forceDist ) );\n\n vec3 normal = getNormal( sunData );\n\n vec4 extras = a_extras;\n float agePer = extras.x/extras.y;\n float rf0 = extras.z;\n\n float dm = smoothstep( 100.0, 1200.0, u_sunRad ) * 0.2 + 0.05;\n float sv1 = sin( forceGrad.y * 15.7 * sin( forceGrad.x * ( ( mix( u_rf0, rf0, u_renderPer * u_renderPer ) + 0.2 ) * 25.0 ) ) );\n float sv2 = sin( forceGrad.y * ( u_rf1 + 0.5 ) * 3.3 );\n vec2 vel0 = forceGrad * forceGradMag * ( sv1 ) * u_intensity * u_sunRad;\n vec2 vel1 = sunGrad * sunGradMag * u_intensity * u_sunRad * 0.1;\n vec2 customVel = mix( vel0 + vel1 * 0.25, -vel1 * 0.15, agePer ) * u_flareIntensity;\n\n float attract = 0.06 * dm;\n float repel = 0.12 * dm;\n float align = 0.5 * dm;\n float leading = 0.5;\n densityMult = 0.1 * dm;\n\n vec2 xy = state.xy + leading * dt * state.zw;\n\n vec3 dvm = texture( u_dvmap, xy ).xzw;\n xy = state.xy + dt * 2.0 * leading * dvm.yz / dvm.x;\n\n float dE = texture( u_dvmap, state.xy + vec2( u_invRes.x, 0 ) ).x;\n float dW = texture( u_dvmap, state.xy + vec2( -u_invRes.x, 0 ) ).x;\n float dN = texture( u_dvmap, state.xy + vec2( 0, u_invRes.y ) ).x;\n float dS = texture( u_dvmap, state.xy + vec2( 0, -u_invRes.y ) ).x;\n vec2 densityGrad = vec2( dE - dW, dN - dS ) / u_invRes;\n\n vec4 avgPosValues = texture( u_particlemap, xy );\n float density1= texture( u_dvmap, xy ).x;\n\n vec2 avgPos = vec2(\n state.x < 0.5 ? avgPosValues.x : avgPosValues.z,\n state.y < 0.5 ? avgPosValues.y : avgPosValues.w\n ) / max( density1, 1e-8 );\n\n // The magic numbers!\n float repulsion = 1.4 * repel;\n float follow = 5000.0 * align;\n float cohesion = 1700000.0 * attract;\n float velEnforce = 100.0 * ( 1.5 - u_activity );\n\n float vmag = length( state.zw );\n \n vec2 randLoc = state.xy * 1. + u_rand * 100.0;\n vec2 rand = hash22(randLoc) - .5;\n\n vec2 v = customVel + 10000.0 * rand * ( 0.3 + u_haziness * 0.5 );\n return vec4( state.zw, v );\n}\n\nvoid main() {\n // get extras\n vec4 extras = a_extras;\n float age = extras.x;\n float life = extras.y;\n float rf0 = extras.z;\n\n float densityMult = 0.01;\n float density = 0.0;\n float speedMax = smoothstep( 50.0, 1000.0, u_sunRad ) * 15.0;\n vec4 state = vec4( a_position / u_res, a_velocity );\n \n vec4 sunData = texture( u_sunTex, state.xy );\n state += dt * derivative( state, density, densityMult, sunData, speedMax );\n vec2 uv = state.xy;\n vec2 pos = state.xy * u_res;\n vec2 vel = state.zw;\n\n // limit speed\n float speed = length( vel );\n float maxSpeed = speedMax * ( smoothstep( 100.0, 500.0, u_sunRad ) * 0.8 + 0.2 ) + rf0 * 10.0;\n if( speed > maxSpeed ){\n vel = normalize( vel ) * maxSpeed;\n } else if( speed < u_speedMin ){\n vel = normalize( vel ) * u_speedMin;\n }\n \n int oob = 0;\n float b = 0.0;\n if( pos.y < b || pos.y > u_res.y - b ) oob = 1;\n if( pos.x < b || pos.x > u_res.x - b ) oob = 1;\n if( age < 0.0 || age > life ) oob = 1;\n if( sunData.x < 0.0 ) oob = 1;\n\n if( oob == 1 ){\n float angle = hash12( pos * 0.01 ) * 0.5 + hash12( pos * 0.05 ) * 0.5 * TAU * 5.0;\n float radius = u_sunRad + u_sunRad * ( rf0 * 0.015 );\n vec2 dir = vec2( cos( angle ), sin( angle ) );\n vec2 newPos = u_sunPos + dir * radius;\n pos = newPos;\n vel = dir * 0.001;\n }\n\n v_position = pos;\n v_velocity = vel * 0.9975;\n\n if( u_frame < 5.0 ) {\n v_velocity = a_velocity;\n }\n \n vec2 position = a_position / u_res * 2.0 - 1.0;\n v_extras = a_extras;\n if( oob == 1 ){\n v_extras.x = 0.0;\n }\n v_extras.x += 0.0333;\n\n vec2 velDir = normalize( v_velocity.xy );\n float angle = atan( velDir.y, velDir.x );\n v_color = vec3( 1.0 );\n\n float fadeOut = u_renderPer;\n float ps = max( extras.w, 0.1 ) * u_flareIntensity * fadeOut;\n\n gl_PointSize = max( 1.0, ps );\n gl_Position = vec4( position, 0.0, 1.0 );\n}"),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\nin vec3 v_color;\nout vec4 color;\n\nuniform float u_renderPer;\n\nvoid main() {\n vec2 uv = gl_PointCoord.xy - .5;\n color = vec4( v_color, 1.0 );\n}"),attributes:{a_extras:{data:a,size:4}},transformFeedbacks:{a_position:{data:t,size:2,usage:e.STREAM_COPY,varying:"v_position"},a_velocity:{data:o,size:2,usage:e.STREAM_COPY,varying:"v_velocity"},a_extras:{data:a,size:4,usage:e.STREAM_COPY,varying:"v_extras"}},count:r,mode:e.POINTS}),Gn.fb=d(e,{width:an.height,height:an.height,type:an.fbType,internalFormat:an.fbFormat,singular:!0})};let Hn=0;const Yn=(n,e)=>{Gn.renderer.bindVAOs(),Gn.renderer.bindTransformFeedbacks(),n.bindFramebuffer(n.FRAMEBUFFER,Gn.fb.read.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,vn.blurTexture),n.activeTexture(n.TEXTURE1),n.bindTexture(n.TEXTURE_2D,bn.blurTexture),n.activeTexture(n.TEXTURE2),n.bindTexture(n.TEXTURE_2D,On.fb.read.targetTexture),n.activeTexture(n.TEXTURE3),n.bindTexture(n.TEXTURE_2D,zn.fb.read.targetTexture),Gn.renderer.bindUniform("u_particlemap",0),Gn.renderer.bindUniform("u_dvmap",1),Gn.renderer.bindUniform("u_sunTex",2),Gn.renderer.bindUniform("u_forceTex",3),Gn.renderer.bindUniform("u_frame",Hn++),Gn.renderer.bindUniform("u_renderPer",e),Gn.renderer.bindUniform("u_rand",Nn.random_dec()),Gn.renderer.bindUniform("u_invRes",[Vn,Vn]),Gn.renderer.bindUniform("u_res",[Gn.fb.width,Gn.fb.height]),Gn.renderer.bindUniform("u_sunPos",an.sunPos),Gn.renderer.bindUniform("u_sunRad",an.sunRad),Gn.renderer.bindUniform("u_haziness",an.cloudiness+an.cityHaze),Gn.renderer.bindUniform("u_activity",an.solarActivity),Gn.renderer.bindUniform("u_intensity",an.solarIntensity),Gn.renderer.bindUniform("u_flareIntensity",an.flareIntensity),Gn.renderer.bindUniform("u_rf0",an.rf0),Gn.renderer.bindUniform("u_rf1",an.rf1),n.clear(n.DEPTH_BUFFER_BIT),n.clear(n.DEPTH_BUFFER_BIT|n.COLOR_BUFFER_BIT),n.enable(n.BLEND),n.blendEquationSeparate(n.FUNC_ADD,n.MAX),n.blendFuncSeparate(n.ONE,n.ONE,n.ONE,n.ONE),Gn.renderer.render(Gn.fb.width,Gn.fb.height),n.disable(n.BLEND),Gn.fb.swap()};const Wn=c(),Kn=new Float32Array([-1,-1,3,-1,-1,3]),jn=new Float32Array([0,0,2,0,0,2]),Jn={},Qn=new Float32Array(4*(an.numStars*an.numStars)).fill(0);let Zn=an.height,$n=an.height;for(let n=0;n<an.numStars*an.numStars;n++){const e=4*n;let r=Wn.random_num(0,Zn),t=Wn.random_num(0,$n);an.environmentId>0&&(t=Wn.random_num(an.groundLevel*$n,$n)),Qn[e]=r,Qn[e+1]=t,Qn[e+2]=5*Math.pow(Wn.random_dec(),12)+.5,Qn[e+3]=0}const ne=e=>{Jn.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D u_starsTex;\nuniform int u_res;\nuniform float u_invRes;\n\nout vec4 color;\n\nvec3 sdgCircle( in vec2 p, in float r ) {\n float d = length(p);\n return vec3( d-r, p/d );\n}\n\nvec3 sdgMin( in vec3 a, in vec3 b ){\n return (a.x<b.x)?a:b;\n}\n\nvoid main() {\n vec3 mySdg = vec3( 100000.0, 0.0, 0.0 ); \n float myRadius = 100000.0;\n\n\tfloat dres \t\t= u_invRes * 0.5;\n \tfor( int x=0; x<u_res; x++ ){\n\t\tfloat xp = float( x ) * u_invRes + dres;\n\t\tfor( int y=0; y<u_res; y++ ){\n\t\t\tfloat yp \t\t= float( y ) * u_invRes + dres;\n\n\t\t\tvec2 uv\t\t = vec2( xp, yp );\n\t\t\tvec4 data \t\t= texture( u_starsTex, uv, 0.0 );\n\t\t\tvec2 p \t\t = data.xy;\n\t\t\tfloat r\t\t = data.z; \n\t\t\t\n\t\t\tvec2 dir \t\t= gl_FragCoord.xy - p;\n\t\t\tvec3 sdg = sdgCircle( dir, r );\n float dist\t\t= length( dir );\n\n mySdg = sdgMin( sdg, mySdg );\n mySdg.yz = normalize( mySdg.yz );\n\n if( dist < r ){\n myRadius = r;\n }\n\t\t}\n\t}\n\n vec4 sdfData = vec4( mySdg, myRadius );\n\n color = sdfData;\n}"),attributes:{position:{data:Kn,size:2},uv:{data:jn,size:2}},count:3}),Jn.fb=d(e,{width:an.height,height:an.height,type:an.fbType,internalFormat:an.fbFormat,tiling:e.REPEAT}),Jn.starsTexture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,Jn.starsTexture),e.texImage2D(e.TEXTURE_2D,0,e.RGBA32F,an.numStars,an.numStars,0,e.RGBA,e.FLOAT,Qn),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)},ee=n=>{Jn.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,Jn.fb.write.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,Jn.fb.read.targetTexture),n.activeTexture(n.TEXTURE1),n.bindTexture(n.TEXTURE_2D,Jn.starsTexture),Jn.renderer.bindUniform("u_framebuffer",0),Jn.renderer.bindUniform("u_starsTex",1),Jn.renderer.bindUniform("u_res",an.numStars),Jn.renderer.bindUniform("u_invRes",1/parseFloat(an.numStars)),Jn.renderer.render(Jn.fb.width,Jn.fb.height),Jn.fb.swap()};const re=new Float32Array([-1,-1,3,-1,-1,3]),te=new Float32Array([0,0,2,0,0,2]),oe={},ae=e=>{oe.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\nin vec2 v_uv;\nout vec4 color;\n\nuniform vec2 u_res;\nuniform sampler2D u_stars;\n\nuniform float u_cityHaze;\nuniform float u_rf0;\nuniform float u_rf1;\n\nvoid main() {\n vec2 frag = gl_FragCoord.xy;\n vec2 uv = frag / u_res;\n vec4 data = texture( u_stars, uv );\n float sd = data.x;\n float sr = data.w;\n color.xyz = vec3( ( 1.0 - uv.y ) * u_cityHaze * 0.2 );\n color.xyz += vec3( smoothstep( 0.0, -sr, sd ) * 0.3 );\n}\n"),attributes:{position:{data:re,size:2},uv:{data:te,size:2}},count:3}),oe.fb=d(e,{width:an.height,height:an.height,type:an.fbType,internalFormat:an.fbFormat})},ie=n=>{oe.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,oe.fb.write.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,oe.fb.read.targetTexture),n.activeTexture(n.TEXTURE1),n.bindTexture(n.TEXTURE_2D,Jn.fb.read.targetTexture),oe.renderer.bindUniform("u_framebuffer",0),oe.renderer.bindUniform("u_stars",1),oe.renderer.bindUniform("u_res",[an.height,an.height]),oe.renderer.bindUniform("u_cityHaze",an.cityHaze),oe.renderer.bindUniform("u_rf0",an.rf0),oe.renderer.bindUniform("u_rf1",an.rf1),oe.renderer.render(oe.fb.width,oe.fb.height),oe.fb.swap()};const se=c(),de=new Float32Array([-1,-1,3,-1,-1,3]),ue=new Float32Array([0,0,2,0,0,2]);let fe=an.numPlanets,ce=an.eventId,le=an.compId,me=an.sunPos[0],ve=an.sunPos[1],_e=an.sunRad,pe=an.sunSign,be=an.height,ge="const vec3 planets["+fe+"] = vec3["+fe+"](";const xe={},he=e=>{for(let n=0;n<fe;n++){let e=be/2+.01,r=be/2,t=100*Math.pow(se.random_dec(),4)+5;if(0==ce)r=-1e4;else if(1==ce)0==n?(r=ve,t=1.02*_e):(r=ve+se.random_num(1*_e,8*_e)*Math.sign(se.random_dec()-.5),t=_e*(.1*Math.pow(se.random_dec(),6)+.05));else if(2==ce)if(7==le)t=se.random_num(200,300);else if(0==n){let n=se.random_num(.3*_e,.5*_e)*Math.sign(se.random_dec()-.5)*2;r=ve+n,t=_e}else r=ve+se.random_num(_e,5*_e)*Math.sign(se.random_dec()-.5),t=_e*se.random_num(.03,.1);else 3==ce?0==n?(r=ve,t=_e*se.random_num(.5,.8)):(r=ve+se.random_num(_e,5*_e)*Math.sign(se.random_dec()-.5),t=_e*se.random_num(.03,.1)):4==ce?(t=_e*(.25*Math.pow(se.random_dec(),6)+.005)*3,0==n?se.random_bool(.5)?(t=se.random_num(.05*_e,.2*_e),r=ve+(_e-t)*Math.sign(se.random_dec()-.5)):(t=se.random_num(.025*_e,.2*_e),r=ve+(_e+t+se.random_num(-100,100))*Math.sign(se.random_dec()-.5)):r=ve+se.random_num(1*_e,8*_e)*Math.sign(se.random_dec()-.5)):5==ce&&(4==le?(r=ve-se.random_num(.3*_e,3*_e)*pe,t=se.random_num(5,20)):5==le?(e=me-se.random_num(.5*_e,2*_e)*pe,t=se.random_num(2,10)):6==le?(r=ve+se.random_num(.5*-_e,.5*_e),t=_e*(.1*Math.pow(se.random_dec(),6)+.01)):(r=ve+se.random_num(1*_e,16*_e)*Math.sign(se.random_dec()-.5),n>0&&(t=_e*(.1*Math.pow(se.random_dec(),6)+.05))));ce>0&&((r<.1*be||r>.9*be)&&(r=se.random_num(.2*be,.8*be)),(e<.2*be||e>.8*be)&&(e=se.random_num(.3*be,.7*be))),ge+="vec3("+e+","+r+","+t+")",ge+=n<fe-1?", ":");"}xe.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\n\nuniform vec2 u_res;\nuniform int u_numPlanets;\n\nout vec4 color;\n\n#define PI 3.14159265359\n#define TAU 6.28318530718\n\n%%planets%%\n\nvec3 sdgCircle( in vec2 p, in float r ) \n{\n float d = length(p);\n return vec3( d-r, p/d );\n}\n\nvec3 sdgMin( in vec3 a, in vec3 b )\n{\n return (a.x<b.x)?a:b;\n}\n\nvoid main() {\n \tfloat myDist \t= 100000.0;\n vec2 myGrad = vec2( 0.0, 0.0 );\n vec3 mySdg = vec3( 100000.0, 0.0, 0.0 ); \n float myRadius = 1.0;\n\n for( int i=0; i<u_numPlanets; i++ ){\n vec3 planet = planets[i];\n vec2 p = planet.xy;\n float r = planet.z;\n vec2 dir = gl_FragCoord.xy - p;\n vec3 sdg = sdgCircle( dir, r );\n float dist = length( dir );\n mySdg = sdgMin( sdg, mySdg );\n\n if( dist < r ){\n myRadius = r;\n }\n }\n\n vec4 sdfData = vec4( mySdg.x, mySdg.yz, myRadius );\n\n color = sdfData;\n}").replace("%%planets%%",ge),attributes:{position:{data:de,size:2},uv:{data:ue,size:2}},count:3}),xe.fb=d(e,{width:an.height,height:an.height,type:an.fbType,internalFormat:an.fbFormat})},ye=n=>{xe.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,xe.fb.write.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,xe.fb.read.targetTexture),xe.renderer.bindUniform("u_framebuffer",0),xe.renderer.bindUniform("u_numPlanets",fe),xe.renderer.bindUniform("u_numBeads",55),xe.renderer.bindUniform("u_res",[xe.fb.width,xe.fb.height]),xe.renderer.render(xe.fb.width,xe.fb.height),xe.fb.swap()};const Te=c(),Ee=new Float32Array([-1,-1,3,-1,-1,3]),Re=new Float32Array([0,0,2,0,0,2]);let Ue=an.sunPos[0],Fe=an.sunPos[1],we=an.sunRad,ze=parseInt(we/2);0==an.bailyBeads&&(ze=1);let Ae="const vec3 beads["+ze+"] = vec3["+ze+"](";const Pe={},Se=e=>{let r=Te.random_num(0,6.283),t=5*Math.pow(Te.random_dec(),2)+1.5;for(let n=0;n<ze;n++){let e=(1-Math.pow(Te.random_dec(),.5))*Math.sign(Te.random_dec()-.5)*t,o=Math.sin(r+e)*we*1.02,a=Math.cos(r+e)*we*1.02,i=Ue+a,s=Fe+o,d=we*(.02*Math.pow(Te.random_dec(),3)+.002);Ae+="vec3("+i+","+s+","+d+")",Ae+=n<ze-1?", ":");"}Pe.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\n\nuniform vec2 u_res;\nuniform int u_numBeads;\n\nout vec4 color;\n\n%%beads%%\n\nvec3 sdgCircle( in vec2 p, in float r ) {\n float d = length(p);\n return vec3( d-r, p/d );\n}\n\nvec3 sdgMin( in vec3 a, in vec3 b ){\n return (a.x<b.x)?a:b;\n}\n\nvoid main() {\n \tfloat myDist = 100000.0;\n vec2 myGrad = vec2( 0.0, 0.0 );\n vec3 mySdg = vec3( 100000.0, 0.0, 0.0 ); \n float myRadius = 1.0;\n\n for( int i=0; i<u_numBeads; i++ ){\n vec3 bead = beads[i];\n vec2 p = bead.xy;\n float r = bead.z;\n vec2 dir = gl_FragCoord.xy - p;\n vec3 sdg = sdgCircle( dir, r );\n float dist = length( dir );\n mySdg = sdgMin( sdg, mySdg );\n\n if( dist < r ){\n myRadius = r;\n }\n }\n\n vec4 sdfData = vec4( mySdg.x, mySdg.yz, myRadius );\n\n color = sdfData;\n}").replace("%%beads%%",Ae),attributes:{position:{data:Ee,size:2},uv:{data:Re,size:2}},count:3}),Pe.fb=d(e,{width:an.height,height:an.height,type:an.fbType,internalFormat:an.fbFormat})},De=n=>{Pe.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,Pe.fb.write.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,Pe.fb.read.targetTexture),Pe.renderer.bindUniform("u_framebuffer",0),Pe.renderer.bindUniform("u_numBeads",ze),Pe.renderer.bindUniform("u_res",[Pe.fb.width,Pe.fb.height]),Pe.renderer.render(Pe.fb.width,Pe.fb.height),Pe.fb.swap()},Ie=new Float32Array([-1,-1,3,-1,-1,3]),Me=new Float32Array([0,0,2,0,0,2]),Ce={};let Be=Math.min(Math.max(an.sunRad-50,0)/1100,1);const Le=e=>{Ce.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\nin vec2 v_uv;\nout vec4 color;\n\nuniform vec2 u_res;\nuniform float u_renderPer;\n\nuniform sampler2D u_pointCloud;\nuniform sampler2D u_sunTex;\nuniform sampler2D u_planetsTex;\nuniform sampler2D u_beadsTex;\nuniform sampler2D u_sky;\nuniform sampler2D u_noiseClouds;\n\nuniform vec2 u_sunPos;\nuniform float u_sunRad;\nuniform float u_sunRadPer;\nuniform int u_bailyBeads;\nuniform float u_cityHaze;\nuniform float u_cloudiness;\nuniform float u_flareIntensity;\nuniform int u_environmentId;\nuniform float u_groundLevel;\nuniform float u_rf0;\nuniform float u_rf1;\nuniform float u_atmos;\nuniform vec3 u_multi;\n\n#define PI 3.14159265\n#define TAU 6.28318530718\n\nvec3 getNormal( vec4 sdf ){\n float x = dot( vec2( 1.0, 0.0 ), sdf.yz );\n float y = dot( vec2( 0.0, 1.0 ), sdf.yz );\n float z = 1.0 - ( sdf.w - abs( sdf.x ) )/sdf.w;\n vec3 n = normalize( vec3( x * ( 1.0 - z ), y * ( 1.0 - z ), z ) );\n return n;\n}\n\nfloat linear( in float minVal, in float maxVal, in float val ){\n float v = clamp( ( val - minVal ) / ( maxVal - minVal ), 0.0, 1.0 );\n return v;\n}\n\nvoid main() {\n vec2 frag = gl_FragCoord.xy;\n vec2 uv = frag / u_res;\n\n float haze = u_cityHaze;\n float cloudy = u_cloudiness * 0.5;\n\n vec4 sunData = texture( u_sunTex, uv );\n float sd = sunData.x;\n float surf = sunData.w;\n float sr = u_sunRad;\n float sunRadPer = u_sunRadPer; // small sun = 0.0, huge sun = 1.0;\n float sunSide = smoothstep( -0.001, 0.001, sd );\n\n // GET SKY\n float skyTex = texture( u_sky, uv ).x;\n\n // GET PLANETS TEX\n vec4 planets = texture( u_planetsTex, uv );\n float planetDist = planets.x;\n float planetRad = planets.w;\n vec3 planetN = getNormal( planets );\n float planetRadPer = smoothstep( 5.0, 800.0, planetRad ) * 0.8 + 0.2;\n\n // GET NOISE CLOUDS\n vec4 clouds = texture( u_noiseClouds, uv );\n float cn0 = clouds.x;\n float cn1 = clouds.y;\n float cn2 = clouds.z;\n float cn3 = clouds.w; \n\n // set initial color\n float cd = skyTex * smoothstep( 0.0, 1.0, sd );\n cd -= clouds.x * u_cloudiness * 0.2;\n \n // SUN PARTICLES\n float particles = min( texture( u_pointCloud, uv ).x, 1.0 );\n cd += particles * 0.5 + pow( particles, 10.0 ) * cn1 * sunRadPer * 2.0;\n cd = clamp( cd, 0.0, 1.0 );\n\n // SUN SURFACE\n float sdPer = 1.0 - ( -sd / sr );\n float sun = surf;\n sun += pow( sdPer, 2.0 ) * 0.125;\n sun += pow( sdPer, 15.0 ) * 0.35 * sunRadPer; // brighten sun edge at high radii\n sun += u_cloudiness * 0.25 + u_flareIntensity * 0.05;\n sun = mix( sun, cd, sunSide );\n\n // SUN CORONA\n float cg0 = linear( sr * 5.0, -sr * 0.5, sd );\n float cg1 = linear( sr * 0.5, -sr * 0.5, sd );\n float cg2 = linear( max( cn1, cn2 ) * sr * 0.07, 0.0, sd );\n float ss0 = 1.0 - linear( 0.0, sr * 18.0, sd );\n float ss1 = 1.0 - linear( 0.0, sr * 5.0, sd );\n float ss2 = 1.0 - linear( 0.0, sr * 0.4, sd );\n float ss3 = 1.0 - linear( 0.0, sr * 0.1, sd );\n float corona = ss0 * ss0 * 0.35 + 0.1;\n corona += ss1 * ss1 * 0.15;\n corona += ss2 * ss2 * 0.15;\n corona += ss3 * ss3 * 0.15;\n corona += pow( ss3 * ss3 * cn1 * cn2 * 2.0, 2.0 );\n corona += cg2 * ( 1.0 - sunRadPer ) * 0.25;\n corona += smoothstep( cn3 * cn2 * sr * 0.1, -sr * 0.025, sd ) * sunRadPer * 0.2;\n\n // RENDER SUN AND CORONA\n cd += sun * u_multi.y * ( 1.0 - sunSide ) + corona * u_multi.z * sunSide;\n\n \n // Baily's Beads\n float beadsCd = 0.0;\n if( u_bailyBeads == 1 ){\n vec4 beads = texture( u_beadsTex, uv );\n float beadDist = beads.x;\n float beadRad = beads.w;\n beadsCd = pow( smoothstep( beadRad * 6.0, -beadRad, beadDist ), 15.0 ) * 2.0;\n cd += beadsCd;\n }\n \n // render planets\n {\n float distPer = smoothstep( sr * -0.15, sr * 0.15, sd );\n vec2 dirToSun = u_sunPos - frag;\n float distToSun = length( vec2( dirToSun ) );\n float planetPer = smoothstep( 800.0, 50.0, planetDist ) * 0.25 * ( 1.0 - planetRadPer ) + 0.1;\n float rimGlow = smoothstep( sr * 20.0, 0.0, distToSun + sr );\n float planetEdge = smoothstep( 1.0, -4.0, planetDist );\n float pc = smoothstep( -planetRad, planetRad * 0.05, planetDist );\n float pb = pow( pc, 2.0 ) * 0.2;\n pb += pow( pc, 4.0 ) * 0.2;\n pb += pow( pc, 11.0 ) * 0.3;\n