![]() | Ethereum |
![]() | Ethereum |
区块17193361 |
区块 | 17193361 |
区块确认 | |
ETH 价格 | $1,703 / ETH当前价值 |
已使用的气体 | 21,152,582 wei |
气体价格 | 77.527452013 gwei |
交易类型 | EIP-1559 |
随机数 | 501 |
区块 | 17193361 |
区块确认 | |
ETH 价格 | $1,703 / ETH当前价值 |
已使用的气体 | 21,152,582 wei |
气体价格 | 77.527452013 gwei |
交易类型 | EIP-1559 |
随机数 | 501 |
# | 名称 | 类型 | 数据 |
---|---|---|---|
0 | _projectId | uint256 | 50 |
1 | _script | string | THREE.GPUComputationRenderer=function(e,o,n){this.variables=[],this.currentTextureIndex=0;var i=new THREE.Scene,r=new THREE.Camera;r.position.z=1;var t={passThruTexture:{value:null}},a=c("uniform sampler2D passThruTexture;\n\nvoid main() {\n\n\tvec2 uv = gl_FragCoord.xy / resolution.xy;\n\n\tgl_FragColor = texture2D( passThruTexture, uv );\n\n}\n",t),s=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),a);function l(n){n.defines.resolution="vec2( "+e.toFixed(1)+", "+o.toFixed(1)+" )"}function c(e,o){o=o||{};var n=new THREE.ShaderMaterial({uniforms:o,vertexShader:"void main()\t{\n\n\tgl_Position = vec4( position, 1.0 );\n\n}\n",fragmentShader:e});return l(n),n}i.add(s),this.addVariable=function(e,o,n){var i={name:e,initialValueTexture:n,material:this.createShaderMaterial(o),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter};return this.variables.push(i),i},this.setVariableDependencies=function(e,o){e.dependencies=o},this.init=function(){if(!n.extensions.get("OES_texture_float")&&!n.capabilities.isWebGL2)return"No OES_texture_float support for float textures.";if(0===n.capabilities.maxVertexTextures)return"No support for vertex shader textures.";for(var i=0;i<this.variables.length;i++){var r=this.variables[i];r.renderTargets[0]=this.createRenderTarget(e,o,r.wrapS,r.wrapT,r.minFilter,r.magFilter),r.renderTargets[1]=this.createRenderTarget(e,o,r.wrapS,r.wrapT,r.minFilter,r.magFilter),this.renderTexture(r.initialValueTexture,r.renderTargets[0]),this.renderTexture(r.initialValueTexture,r.renderTargets[1]);var t=r.material,a=t.uniforms;if(null!==r.dependencies)for(var s=0;s<r.dependencies.length;s++){var l=r.dependencies[s];if(l.name!==r.name){for(var c=!1,d=0;d<this.variables.length;d++)if(l.name===this.variables[d].name){c=!0;break}if(!c)return"Variable dependency not found. Variable="+r.name+", dependency="+l.name}a[l.name]={value:null},t.fragmentShader="\nuniform sampler2D "+l.name+";\n"+t.fragmentShader}}return this.currentTextureIndex=0,null},this.compute=function(){for(var e=this.currentTextureIndex,o=0===this.currentTextureIndex?1:0,n=0,i=this.variables.length;n<i;n++){var r=this.variables[n];if(null!==r.dependencies)for(var t=r.material.uniforms,a=0,s=r.dependencies.length;a<s;a++){var l=r.dependencies[a];t[l.name].value=l.renderTargets[e].texture}this.doRenderTarget(r.material,r.renderTargets[o])}this.currentTextureIndex=o},this.getCurrentRenderTarget=function(e){return e.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(e){return e.renderTargets[0===this.currentTextureIndex?1:0]},this.addResolutionDefine=l,this.createShaderMaterial=c,this.createRenderTarget=function(n,i,r,t,a,s){return n=n||e,i=i||o,r=r||THREE.ClampToEdgeWrapping,t=t||THREE.ClampToEdgeWrapping,a=a||THREE.NearestFilter,s=s||THREE.NearestFilter,new THREE.WebGLRenderTarget(n,i,{wrapS:r,wrapT:t,minFilter:a,magFilter:s,format:THREE.RGBAFormat,type:/(iPad|iPhone|iPod)/g.test(navigator.userAgent)?THREE.HalfFloatType:THREE.FloatType,stencilBuffer:!1,depthBuffer:!1})},this.createTexture=function(){var n=new Float32Array(e*o*4);return new THREE.DataTexture(n,e,o,THREE.RGBAFormat,THREE.FloatType)},this.renderTexture=function(e,o){t.passThruTexture.value=e,this.doRenderTarget(a,o),t.passThruTexture.value=null},this.doRenderTarget=function(e,o){var t=n.getRenderTarget();s.material=e,n.setRenderTarget(o),n.render(i,r),s.material=a,n.setRenderTarget(t)}};let render_vertex="\n varying vec2 vUv;\n void main() \n {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n\n",render_fragment="\n\n varying vec2 vUv;\n\n uniform sampler2D reaction_diffusion;\n uniform vec3 substance_color;\n uniform vec3 background_color;\n uniform vec3 middle_color;\n uniform vec3 c4_color;\n uniform vec3 c5_color;\n uniform vec4 randomRect;\n uniform vec3 circle;\n uniform sampler2D noiseTexture;\n\n void main() {\n vec4 texColor = texture2D(reaction_diffusion, vUv);\n float h = texColor.g;\n\n vec3 colorA = background_color;\n vec3 colorB = middle_color;\n vec3 colorC = substance_color;\n vec3 colorD = c4_color;\n vec3 colorE = c5_color;\n\n float baseEdge0 = 0.0;\n float baseEdge1 = 0.075;\n float baseEdge2 = 0.175;\n float baseEdge3 = 0.275;\n float baseEdge4 = 0.375;\n\n float noiseValue = texture2D(noiseTexture, vUv).r;\n float edgeVariation = noiseValue * 0.1;\n\n float edge0 = baseEdge0 + edgeVariation;\n float edge1 = baseEdge1 + edgeVariation;\n float edge2 = baseEdge2 + edgeVariation;\n float edge3 = baseEdge3 + edgeVariation;\n float edge4 = baseEdge4 + edgeVariation;\n\n vec3 finalColor;\n\n if (h < edge1) {\n float t = clamp((h - edge0) / (edge1 - edge0), 0.0, 1.0);\n finalColor = mix(colorA, colorB, t);\n } else if (h < edge2) {\n float t = clamp((h - edge1) / (edge2 - edge1), 0.0, 1.0);\n finalColor = mix(colorB, colorC, t);\n } else if (h < edge3) {\n float t = clamp((h - edge2) / (edge3 - edge2), 0.0, 1.0);\n finalColor = mix(colorC, colorD, t);\n } else if (h < edge4) {\n float t = clamp((h - edge3) / (edge4 - edge3), 0.0, 1.0);\n finalColor = mix(colorD, colorE, t);\n } else {\n finalColor = colorE;\n }\n\n gl_FragColor = vec4(finalColor, 1.0);\n }\n\n",reaction_diffusion_fragment="\n\n uniform sampler2D environment;\n\n uniform float feed;\n uniform float kill;\n uniform float diffusion_scale;\n\n uniform float feed_variation;\n uniform float kill_variation;\n uniform bool isRect;\n uniform float diffusion_scale_variation;\n\n uniform float anisotropy;\n uniform bool separate_fields;\n\n uniform float feed_modifier;\n uniform float kill_modifier;\n\n uniform vec2 mouse_pos;\n uniform vec2 point_pos0;\n uniform vec2 point_pos1;\n uniform vec2 point_pos2;\n uniform vec2 point_pos3;\n uniform vec2 point_pos4;\n uniform vec2 point_pos5;\n uniform vec2 point_pos6;\n uniform vec2 point_pos7;\n uniform vec2 point_pos8;\n uniform vec2 point_pos9;\n uniform vec2 point_posR;\n uniform bool mouse_down;\n\n uniform bool reset;\n uniform bool add;\n\n uniform vec4 randomRect;\n uniform vec4 randomCirc;\n\n uniform vec2 randomRectPos;\n uniform vec2 randomRectSize;\n uniform vec2 randomCircPos;\n uniform vec2 randomCircSize;\n uniform float borderSize;\n\n uniform vec2 rect_top_left;\n uniform vec2 rect_bottom_right;\n\n uniform sampler2D ca_state;\n uniform float caThreshold;\n uniform float ca_factor;\n \n\n #define p2(v) v * v\n #define PI 3.14159265358979323846\n\n \n #define R 10.0\n #define borderWidth 20.0\n #define rectBorderWidth 2.0\n\n #define s(x, y) texture2D(reaction_diffusion, (gl_FragCoord.xy + vec2(x, y)) / resolution).xy\n\n vec2 anisotropicDiffusion(vec2 angles, float a1, vec2 center)\n {\n vec2\n v00 = s(-1, 1), v10 = s(0, 1), v20 = s(1, 1),\n v01 = s(-1, 0), v21 = s(1, 0),\n v02 = s(-1,-1), v12 = s(0,-1), v22 = s(1,-1);\n\n vec2 cos_t = cos(angles);\n vec2 sin_t = sin(angles);\n\n vec2 cos2_t = p2(cos_t);\n vec2 sin2_t = p2(sin_t);\n\n float a2 = 1.0 - a1;\n\n vec2 d = 4.0 * (a2 - a1) * p2(cos_t * sin_t);\n vec2 h = 8.0 * (a1 * cos2_t + a2 * sin2_t);\n vec2 v = 8.0 * (a2 * cos2_t + a1 * sin2_t);\n\n return ((1.0 - d) * (v00 + v22) + (1.0 + d) * (v20 + v02) + h * (v01 + v21) + v * (v10 + v12) - 20.0 * center) / 6.0;\n }\n\n float random (vec2 st) {\n return fract(sin(dot(st.xy,\n vec2(12.9898,78.233)))*\n 43758.5453123);\n }\n bool insideCircle(vec2 point, vec2 center, float radius) {\n return distance(point, center) <= radius;\n }\n\n\n void main() {\n vec4 env = texture2D(environment, (gl_FragCoord.xy / resolution).xy);\n vec2 st = gl_FragCoord.xy/resolution;\n vec3 ca_color = texture2D(ca_state, st).rgb;\n float ca_intensity = dot(ca_color, vec3(0.299, 0.587, 0.114));\n float caValue = texture2D(ca_state, (gl_FragCoord.xy / resolution)).r;\n\n\n float rnd = random( st );\n float pct = 0.0;\n\n vec2 randomRectPosA = randomRectPos * resolution;\n vec2 randomRectSizeA = randomRectSize * resolution;\n\n vec2 randomCircPosA = randomCircPos * resolution;\n vec2 randomCircSizeA = randomCircSize * resolution;\n\n pct = distance(st,vec2(0.5));\n\n float DS = diffusion_scale + env[2] * diffusion_scale_variation;\n vec2 angles = (1.0 + vec2(env[3], separate_fields ? env[0] : env[3])) * PI;\n float caInfluence = float(caValue > caThreshold);\n float F = feed + env[0] * feed_variation;\n float K = kill + env[1] * kill_variation;\n\n \n bool insideRectangle = (gl_FragCoord.x > randomRectPosA.x && gl_FragCoord.x < randomRectPosA.x + randomRectSizeA.x) &&\n (gl_FragCoord.y > randomRectPosA.y && gl_FragCoord.y < randomRectPosA.y + randomRectSizeA.y);\n\n bool insideCircle = insideCircle(gl_FragCoord.xy, randomCircPosA, randomCircSizeA.x); \n\n if (insideRectangle) {\n K += 0.003;\n }\n\n if (insideCircle) {\n K += 0.002;\n }\n\n vec2 old = s(0, 0);\n\n vec2 reaction = vec2(-1.0, 1.0) * old[0] * old[1] * old[1] * (1.0 + caInfluence * ca_factor);\n vec2 dissipation = vec2(F * (1.0 - old[0]), -old[1] * (K + F));\n vec2 diffusion = anisotropicDiffusion(angles, anisotropy, old) * DS * vec2(1.0, 0.5);\n float dt = 1.0 / (4.0 * DS);\n gl_FragColor.xy = old + (reaction + dissipation + diffusion) * dt;\n float edgeDistX = min(gl_FragCoord.x, resolution.x - gl_FragCoord.x);\n float edgeDistY = min(gl_FragCoord.y, resolution.y - gl_FragCoord.y);\n float edgeDist = min(edgeDistX, edgeDistY);\n if (edgeDist <= borderSize) {\n gl_FragColor.x = 0.0;\n gl_FragColor.y = 0.0;\n }\n\n if (mouse_down) {\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, mouse_pos), 0.0) / R;\n }\n\n if (reset) {\n gl_FragColor = vec4(0.0);\n }\n\n if(add)\n {\n vec2 pointPositions[10];\n pointPositions[0] = point_pos1;\n pointPositions[1] = point_pos2;\n pointPositions[2] = point_pos3;\n pointPositions[3] = point_pos4;\n pointPositions[4] = point_pos5;\n pointPositions[5] = point_pos6;\n pointPositions[6] = point_pos7;\n pointPositions[7] = point_pos8;\n pointPositions[8] = point_pos9;\n pointPositions[9] = point_pos0;\n\n for (int i = 0; i < 10; i++) {\n vec2 pointPos = pointPositions[i];\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, pointPos), 0.0) / R;\n }\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, point_posR), 0.0) / R;\n\n }\n }\n\n";const width=window.innerWidth,height=window.innerHeight,actual_width=Math.round(width),actual_height=Math.round(height),simulation_width=Math.round(actual_width/1.75),simulation_height=Math.round(actual_height/1.75),aspectRatio=window.innerWidth/window.innerHeight;class Random{constructor(){this.useA=!1;let e=function(e){let o=parseInt(e.substring(0,8),16),n=parseInt(e.substring(8,16),16),i=parseInt(e.substring(16,24),16),r=parseInt(e.substring(24,32),16);return function(){o|=0,n|=0,i|=0,r|=0;let e=(o+n|0)+r|0;return r=r+1|0,o=n^n>>>9,n=i+(i<<3)|0,i=i<<21|i>>>11,i=i+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substring(2,34)),this.prngB=new e(tokenData.hash.substring(34,66));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,o){return e+(o-e)*this.random_dec()}random_int(e,o){return Math.floor(this.random_num(e,o+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}class SimplexNoise{constructor(e){this.grad3=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],this.p=[];for(let o=0;o<256;o++)this.p[o]=Math.floor(256*e.random_dec());this.perm=new Array(512);for(let e=0;e<512;e++)this.perm[e]=this.p[255&e]}dot(e,o,n,i){return e[0]*o+e[1]*n+e[2]*i}noise3d(e,o,n){const i=1/6;let r,t,a,s,l,c,d,f,u,m,_=(e+o+n)*(1/3),g=Math.floor(e+_),h=Math.floor(o+_),v=Math.floor(n+_),p=(g+h+v)*i,R=e-(g-p),b=o-(h-p),T=n-(v-p);R>=b?b>=T?(l=1,c=0,d=0,f=1,u=1,m=0):R>=T?(l=1,c=0,d=0,f=1,u=0,m=1):(l=0,c=0,d=1,f=1,u=0,m=1):b<T?(l=0,c=0,d=1,f=0,u=1,m=1):R<T?(l=0,c=1,d=0,f=0,u=1,m=1):(l=0,c=1,d=0,f=1,u=1,m=0);let F=R-l+i,E=b-c+i,x=T-d+i,C=R-f+2*i,w=b-u+2*i,y=T-m+2*i,S=R-1+.5,k=b-1+.5,H=T-1+.5,D=255&g,A=255&h,V=255&v,B=this.perm[D+this.perm[A+this.perm[V]]]%12,P=this.perm[D+l+this.perm[A+c+this.perm[V+d]]]%12,M=this.perm[D+f+this.perm[A+u+this.perm[V+m]]]%12,W=this.perm[D+1+this.perm[A+1+this.perm[V+1]]]%12,I=.6-R*R-b*b-T*T;I<0?r=0:(I*=I,r=I*I*this.dot(this.grad3[B],R,b,T));let z=.6-F*F-E*E-x*x;z<0?t=0:(z*=z,t=z*z*this.dot(this.grad3[P],F,E,x));let K=.6-C*C-w*w-y*y;K<0?a=0:(K*=K,a=K*K*this.dot(this.grad3[M],C,w,y));let U=.6-S*S-k*k-H*H;return U<0?s=0:(U*=U,s=U*U*this.dot(this.grad3[W],S,k,H)),32*(r+t+a+s)}}let R=new Random;function getRandomArbitrary(e,o){return R.random_dec()*(o-e)+e}let randomRect,randomCirc,diffScaleArray=[.25,.375,.5],diffScale=selectFromArray(diffScaleArray),diffScaleVar=selectFromArray([diffScale-.125,diffScale-.125]),diffScaleArrayWide=[.5,.625,.75,.875,1],diffScaleWide=selectFromArray(diffScaleArrayWide),diffScaleVarWide=selectFromArray([0,diffScale-.125]),feedVar=getRandomArbitrary(0,.01),killVar=getRandomArbitrary(0,.01);function selectFromArray(e){return e[Math.floor(R.random_dec()*e.length)]}function selectNumberFromArray(e){return Math.floor(R.random_dec()*e.length)}function getRandomBool(e){return R.random_dec()<e}function hexToRgb(e){const o=parseInt(e.slice(1),16);return[parseInt(o>>16&255),parseInt(o>>8&255),parseInt(255&o)]}function getRandomBoolean(){return R.random_dec()>=.5}let palettes={Candy:{background:"#E23DB3",accent:"#E23DB3",substance:"#FFC234",c4:"#FFFF99",c5:"#FFFFFF"},Color2:{background:"#AE2029",accent:"#AE2029",substance:"#98D82D",c4:"#98D82D",c5:"#98D82D"},Color3:{background:"#F17401",accent:"#F17401",substance:"#EBFF32",c4:"#EBFF32",c5:"#EBFF32"},Color4:{background:"#FF3C75",accent:"#FF3C75",substance:"#FD97C4",c4:"#FD97C4",c5:"#FD97C4"},Color5:{background:"#000000",accent:"#000000",substance:"#FFFFFF",c4:"#FFFFFF",c5:"#FFFFFF"},Color6:{background:"#F17401",accent:"#F17401",substance:"#EBFF32",c4:"#EBFF32",c5:"#EBFF32"},Yayoi:{background:"#D03A20",accent:"#D03A20",substance:"#FFFFFF",c4:"#FFFFFF",c5:"#FFFFFF"},Gabee:{background:"#ffffff",accent:"#f5f5f0",substance:"#f2f2f2",c4:"#f2f2f2",c5:"#ffffff"},CMKY:{background:"#ffffff",accent:(getRandomBoolean(),"#00ffff"),substance:"#ff00ff",c4:"#ffff00",c5:"#ffffff"},RGB:{background:"#000000",accent:(getRandomBoolean(),"#00FF00"),substance:"#FF0000",c4:"#0000FF",c5:"#FFFFFF"},"30Rack":{background:"#b42024",accent:getRandomBoolean()?"#b42024":"#000000",substance:"#b42024",c4:"#df2126",c5:"#df2126"},Mohun:{background:"#FFFFF1",accent:(getRandomBoolean(),"#C7AFF0"),substance:"#AFCDF0",c4:"#5BC2AC",c5:"#DE87B7"},Q:{background:"#ffffff",accent:"#ffffff",substance:"#e00000",c4:"#ffffff",c5:"#ffffff"},Skeleton:{background:"#000000",accent:"#ffffff",substance:"#000000",c4:"#000000",c5:"#000000"}};const defaultPallette={background:"#FF0000",accent:"#00FF00",substance:"#0000FF"},traitColorKeys=Object.keys(palettes),randomColorIndex=R.random_int(0,traitColorKeys.length-1),randomColorKey=traitColorKeys[randomColorIndex],randomColorTrait=palettes[randomColorKey],selectedColor={...defaultPallette,...randomColorTrait};console.log("palettes:",randomColorKey,"Settings object:",selectedColor),console.log(`Substance Color: ${selectedColor.substance}`),console.log(`Middle Color: ${selectedColor.accent}`),console.log(`Background Color:${selectedColor.background}`);let main_trait={Zebra:{diffusion_scale:diffScaleWide,diffusion_scale_variation:diffScaleVarWide,feed:.05,feed_variation:0,warped:getRandomBool(.2),kill:.061,kill_variation:0,feed_modifier:-.015,kill_modifier:-.001,anisotropy:selectFromArray([.25,.75]),environment_noise_scale:750,separate_fields:!0,substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64},Fingerprint:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.037,feed_variation:0,warped:getRandomBool(.2),kill:.06,feed_modifier:.009,kill_modifier:.003,kill_modifier:0,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64},"Dots and Dashes":{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.034,feed_variation:0,warped:getRandomBool(.2),kill:.0618,kill_variation:0,feed_modifier:-.004,kill_modifier:.0012,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64},Yayoi:{diffusion_scale:diffScaleWide,diffusion_scale_variation:diffScaleVarWide,feed:.03,feed_variation:0,warped:getRandomBool(.2),kill:.063,kill_variation:0,feed_modifier:0,kill_modifier:-.0065,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:0,light_height:8e3,simulation_iterations_per_frame:64},Spillage:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.035,feed_variation:.006,kill:.06,kill_variation:.006,feed_modifier:-.005,kill_modifier:-.0035,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64},Coral:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.046,feed_variation:0,warped:getRandomBool(.2),kill:.063,kill_variation:0,feed_modifier:-.009,kill_modifier:-.003,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:64,light_height:8e3,simulation_iterations_per_frame:64},"Squiggle Maze":{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.03,feed_variation:0,warped:getRandomBool(.2),kill:.0565,kill_variation:0,feed_modifier:0,kill_modifier:.0065,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64}};const defaultSettings={anisotropy:.8,simulation_iterations_per_frame:64,environment_noise_scale:250,substance_color:[0,0,0],middle_color:[0,255,255],background_color:[255,255,255],c4_color:[0,255,255],background_color:[255,255,255],feed_modifier:0,kill_modifier:0,specular_color:[0,0,0],separate_fields:!1,warped:!1,diffusion_scale:.625,diffusion_scale_variation:.375,feed:.042,feed_variation:.001,kill:.06,kill_variation:.001},traitKeys=Object.keys(main_trait),randomIndex=Math.floor(R.random_dec()*traitKeys.length),randomKey=traitKeys[randomIndex],randomTrait=main_trait[randomKey],settings={...defaultSettings,...randomTrait};console.log("Trait name:",randomKey,"Settings object:",settings);const scene=new THREE.Scene,camera=new THREE.Camera;camera.position.z=1;const renderer=new THREE.WebGLRenderer;renderer.setPixelRatio(window.devicePixelRatio),renderer.setSize(width,height),document.body.appendChild(renderer.domElement);let light_pos=new THREE.Vector2(simulation_width,simulation_height),light_enabled=!1,mouse_down=!1,light_move=!1,brush_move=!1;const getRandomInt=(e,o)=>Math.floor(R.random_dec()*(e-o+1)+o),getRandomColor=()=>(16777215*R.random_dec()<<0).toString(16).padStart(6,"0");let elapsedTime=0,frameCounter=0;const updateFrequency=1;function getRandomFloat(e,o){return R.random_dec()*(o-e)+e}let isRect=R.random_choice([1,2,3,4]);switch(isRect){case 1:default:randomRect=new THREE.Vector4(.5*R.random_dec(),0,.2,1),randomCirc=new THREE.Vector4(0,0,0,0);break;case 2:randomRect=new THREE.Vector4(0,0,0,0),randomCirc=new THREE.Vector4(.5,.5,.4,.4);break;case 3:randomRect=new THREE.Vector4(0,0,0,0),randomCirc=new THREE.Vector4(0,0,0,0);break;case 4:randomRect=new THREE.Vector4(.5*R.random_dec(),0,.2,1),randomCirc=new THREE.Vector4(.5,.5,.4,.4)}const borderSizes=[10,50],borderSize=R.random_choice(borderSizes);let caEnabled=R.random_dec>.95;const ca_factor=!0===caEnabled?.8:0,caWidth=Math.floor(simulation_width/20),caHeight=Math.floor(simulation_height/20),caData=new Uint8Array(caWidth*caHeight*3);for(let e=0;e<caData.length;e+=3){let o=R.random_dec()<.8?0:255;caData[e]=o,caData[e+1]=o,caData[e+2]=o}const caTexture=new THREE.DataTexture(caData,caWidth,caHeight,THREE.RGBFormat);caTexture.magFilter=THREE.NearestFilter,caTexture.minFilter=THREE.NearestFilter,caTexture.wrapS=THREE.ClampToEdgeWrapping,caTexture.wrapT=THREE.ClampToEdgeWrapping,caTexture.needsUpdate=!0;const material=new THREE.ShaderMaterial({vertexShader:render_vertex,fragmentShader:render_fragment,uniforms:{reaction_diffusion:{value:null},substance_color:{value:(new THREE.Vector3).fromArray(settings.substance_color).divideScalar(255)},middle_color:{value:(new THREE.Vector3).fromArray(settings.middle_color).divideScalar(255)},background_color:{value:(new THREE.Vector3).fromArray(settings.background_color).divideScalar(255)},c4_color:{value:(new THREE.Vector3).fromArray(settings.c4_color).divideScalar(255)},c5_color:{value:(new THREE.Vector3).fromArray(settings.c5_color).divideScalar(255)},time:{value:0},noise_texture:{value:null},isRect:{value:isRect},randomRect:{value:randomRect},randomCirc:{value:randomCirc},ca_state:{value:caTexture}},defines:{frag2sim:"vec2("+simulation_width/actual_width+", "+simulation_height/actual_height+")",simulation_resolution:"vec2("+simulation_width+", "+simulation_height+")"}});scene.add(new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),material));const gpu_compute=new THREE.GPUComputationRenderer(simulation_width,simulation_height,renderer),reaction_diffusion=gpu_compute.createTexture(),reaction_diffusion_variable=gpu_compute.addVariable("reaction_diffusion",reaction_diffusion_fragment,reaction_diffusion);reaction_diffusion_variable.wrapS=THREE.ClampToEdgeWrapping,reaction_diffusion_variable.wrapT=THREE.ClampToEdgeWrapping,gpu_compute.setVariableDependencies(reaction_diffusion_variable,[reaction_diffusion_variable]);const reaction_diffusion_uniforms=reaction_diffusion_variable.material.uniforms;reaction_diffusion_uniforms.mouse_pos={value:new THREE.Vector2(-100,-100)};for(let e=0;e<10;e++)reaction_diffusion_uniforms[`point_pos${e}`]={value:new THREE.Vector2(getRandomInt(50,simulation_width-50),getRandomInt(50,simulation_height-50))};function updateCA(){const e=new Uint8Array(caWidth*caHeight*3),o=[1],n=[2,3];for(let i=0;i<caHeight;i++)for(let r=0;r<caWidth;r++){let t=3*(i*caWidth+r),a=0;for(let e=-1;e<=1;e++)for(let o=-1;o<=1;o++){if(0===o&&0===e)continue;255===caData[3*((i+e+caHeight)%caHeight*caWidth+(r+o+caWidth)%caWidth)]&&a++}let s=caData[t],l=a==o[0]||1==s&&n.includes(a)?1:0;l=255!==s||2!==a&&3!==a?0===s&&3===a?255:0:255,e[t]=l,e[t+1]=l,e[t+2]=l}caData.set(e),caTexture.needsUpdate=!0}reaction_diffusion_uniforms.mouse_down={value:!1},reaction_diffusion_uniforms.feed={value:settings.feed},reaction_diffusion_uniforms.kill={value:settings.kill},reaction_diffusion_uniforms.diffusion_scale={value:settings.diffusion_scale},reaction_diffusion_uniforms.feed_variation={value:settings.feed_variation},reaction_diffusion_uniforms.kill_variation={value:settings.kill_variation},reaction_diffusion_uniforms.feed_modifier={value:settings.feed_modifier},reaction_diffusion_uniforms.kill_modifier={value:settings.kill_modifier},reaction_diffusion_uniforms.diffusion_scale_variation={value:settings.diffusion_scale_variation},reaction_diffusion_uniforms.anisotropy={value:settings.anisotropy},reaction_diffusion_uniforms.reset={value:!1},reaction_diffusion_uniforms.add={value:!1},reaction_diffusion_uniforms.separate_fields={value:settings.separate_fields},reaction_diffusion_uniforms.warped={value:settings.warped},reaction_diffusion_uniforms.ca_factor={value:ca_factor},reaction_diffusion_uniforms.ca_state={value:caTexture},reaction_diffusion_uniforms.caThreshold={value:.6},reaction_diffusion_uniforms.borderSize={value:borderSize},reaction_diffusion_uniforms.randomRectPos={value:new THREE.Vector2(randomRect.x,randomRect.y)},reaction_diffusion_uniforms.randomRectSize={value:new THREE.Vector2(randomRect.z,randomRect.w)},reaction_diffusion_uniforms.randomCircPos={value:new THREE.Vector2(randomCirc.x,randomCirc.y)},reaction_diffusion_uniforms.randomCircSize={value:new THREE.Vector2(randomCirc.z,randomCirc.w)};const caDuration=3e4,maxUpdateFrequency=10;let startTime=Date.now();function animate(){if(requestAnimationFrame(animate),frameCounter++,caEnabled){let n=Date.now()-startTime;if(n<3e4){let i=Math.floor((o=1)+(n-(e=0))*(10-o)/(3e4-e));frameCounter%i==0&&updateCA()}else caEnabled=!1}var e,o;render()}function render(e){if(simulateReactionDiffusion(settings.simulation_iterations_per_frame),material.uniforms.reaction_diffusion.value=gpu_compute.getCurrentRenderTarget(reaction_diffusion_variable).texture,elapsedTime+=.01,material.uniforms.time.value=elapsedTime,reaction_diffusion_uniforms.u_time={value:.001*e},renderer.render(scene,camera),!0===render.save_image){render.save_image=!1;const e=document.getElementById("save-link");e.download=render.savename,e.href=renderer.domElement.toDataURL(),e.click()}renderer.info.render.frame>=2e3&&renderer.info.render.frame<5e3?reaction_diffusion_uniforms.add={value:!0}:reaction_diffusion_uniforms.add={value:!1}}function simulateReactionDiffusion(e){for(let o=0;o<e;o++)gpu_compute.compute()}function createEnvironment(e=!0){if(!e&&void 0!==createEnvironment.prev_scale&&createEnvironment.prev_scale===Settings.environment_noise_scale)return;createEnvironment.prev_scale=settings.environment_noise_scale;const o=new SimplexNoise(R),n=Array.from({length:4},(()=>1e3*R.random_dec())),i=1/settings.environment_noise_scale,r=simulation_width/2,t=simulation_height/2,a=(Math.sqrt(r**2+t**2),new Float32Array(simulation_width*simulation_height*4));for(let e=0;e<simulation_height;e++)for(let r=0;r<simulation_width;r++)for(let t=0;t<4;t++)a[4*(e*simulation_width+r)+t]=o.noise3d((r+.5)*i,(e+.5)*(!0===settings.warped?1:i),n[t]);reaction_diffusion_uniforms.environment={value:new THREE.DataTexture(a,simulation_width,simulation_height,THREE.RGBAFormat,THREE.FloatType)},reaction_diffusion_uniforms.environment.value.magFilter=THREE.LinearFilter,reaction_diffusion_uniforms.environment.value.minFilter=THREE.LinearFilter;const s=new THREE.DataTexture(a,simulation_width,simulation_height,THREE.RGBAFormat,THREE.FloatType);s.magFilter=THREE.LinearFilter,s.minFilter=THREE.LinearFilter,material.uniforms.noise_texture.value=s}function updateMousePos(e){let o=e.clientX*(simulation_width/width),n=simulation_height-e.clientY*(simulation_height/height);reaction_diffusion_uniforms.mouse_pos.value.fromArray([o,n])}function onMove(e){updateMousePos(e),reaction_diffusion_uniforms.mouse_down.value=mouse_down&&(brush_move=!0)}function onUp(){mouse_down=brush_move=!1,reaction_diffusion_uniforms.mouse_down.value=!1}function onDown(){mouse_down=!0}function handleTouchEvent(e,o){1===e.touches.length&&(e.preventDefault(),o(e.touches[0]))}createEnvironment(),gpu_compute.init(),animate(),console.log(`Diffusion Scale: ${settings.diffusion_scale}`),console.log(`Diffusion Scale Variation: ${settings.diffusion_scale_variation}`),console.log(`Feed Variation: ${settings.feed_variation}`),console.log(`Kill Variation: ${settings.kill_variation}`),console.log(`Separate Fields: ${settings.separate_fields}`),console.log(`Anisotropy: ${settings.anisotropy}`),console.log(`Warped: ${settings.warped}`),renderer.domElement.onmousedown=onDown,renderer.domElement.onmouseup=renderer.domElement.onmouseleave=onUp,renderer.domElement.onmousemove=onMove; |
# | 名称 | 类型 | 数据 |
---|---|---|---|
0 | _projectId | uint256 | 50 |
1 | _script | string | THREE.GPUComputationRenderer=function(e,o,n){this.variables=[],this.currentTextureIndex=0;var i=new THREE.Scene,r=new THREE.Camera;r.position.z=1;var t={passThruTexture:{value:null}},a=c("uniform sampler2D passThruTexture;\n\nvoid main() {\n\n\tvec2 uv = gl_FragCoord.xy / resolution.xy;\n\n\tgl_FragColor = texture2D( passThruTexture, uv );\n\n}\n",t),s=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),a);function l(n){n.defines.resolution="vec2( "+e.toFixed(1)+", "+o.toFixed(1)+" )"}function c(e,o){o=o||{};var n=new THREE.ShaderMaterial({uniforms:o,vertexShader:"void main()\t{\n\n\tgl_Position = vec4( position, 1.0 );\n\n}\n",fragmentShader:e});return l(n),n}i.add(s),this.addVariable=function(e,o,n){var i={name:e,initialValueTexture:n,material:this.createShaderMaterial(o),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter};return this.variables.push(i),i},this.setVariableDependencies=function(e,o){e.dependencies=o},this.init=function(){if(!n.extensions.get("OES_texture_float")&&!n.capabilities.isWebGL2)return"No OES_texture_float support for float textures.";if(0===n.capabilities.maxVertexTextures)return"No support for vertex shader textures.";for(var i=0;i<this.variables.length;i++){var r=this.variables[i];r.renderTargets[0]=this.createRenderTarget(e,o,r.wrapS,r.wrapT,r.minFilter,r.magFilter),r.renderTargets[1]=this.createRenderTarget(e,o,r.wrapS,r.wrapT,r.minFilter,r.magFilter),this.renderTexture(r.initialValueTexture,r.renderTargets[0]),this.renderTexture(r.initialValueTexture,r.renderTargets[1]);var t=r.material,a=t.uniforms;if(null!==r.dependencies)for(var s=0;s<r.dependencies.length;s++){var l=r.dependencies[s];if(l.name!==r.name){for(var c=!1,d=0;d<this.variables.length;d++)if(l.name===this.variables[d].name){c=!0;break}if(!c)return"Variable dependency not found. Variable="+r.name+", dependency="+l.name}a[l.name]={value:null},t.fragmentShader="\nuniform sampler2D "+l.name+";\n"+t.fragmentShader}}return this.currentTextureIndex=0,null},this.compute=function(){for(var e=this.currentTextureIndex,o=0===this.currentTextureIndex?1:0,n=0,i=this.variables.length;n<i;n++){var r=this.variables[n];if(null!==r.dependencies)for(var t=r.material.uniforms,a=0,s=r.dependencies.length;a<s;a++){var l=r.dependencies[a];t[l.name].value=l.renderTargets[e].texture}this.doRenderTarget(r.material,r.renderTargets[o])}this.currentTextureIndex=o},this.getCurrentRenderTarget=function(e){return e.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(e){return e.renderTargets[0===this.currentTextureIndex?1:0]},this.addResolutionDefine=l,this.createShaderMaterial=c,this.createRenderTarget=function(n,i,r,t,a,s){return n=n||e,i=i||o,r=r||THREE.ClampToEdgeWrapping,t=t||THREE.ClampToEdgeWrapping,a=a||THREE.NearestFilter,s=s||THREE.NearestFilter,new THREE.WebGLRenderTarget(n,i,{wrapS:r,wrapT:t,minFilter:a,magFilter:s,format:THREE.RGBAFormat,type:/(iPad|iPhone|iPod)/g.test(navigator.userAgent)?THREE.HalfFloatType:THREE.FloatType,stencilBuffer:!1,depthBuffer:!1})},this.createTexture=function(){var n=new Float32Array(e*o*4);return new THREE.DataTexture(n,e,o,THREE.RGBAFormat,THREE.FloatType)},this.renderTexture=function(e,o){t.passThruTexture.value=e,this.doRenderTarget(a,o),t.passThruTexture.value=null},this.doRenderTarget=function(e,o){var t=n.getRenderTarget();s.material=e,n.setRenderTarget(o),n.render(i,r),s.material=a,n.setRenderTarget(t)}};let render_vertex="\n varying vec2 vUv;\n void main() \n {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n\n",render_fragment="\n\n varying vec2 vUv;\n\n uniform sampler2D reaction_diffusion;\n uniform vec3 substance_color;\n uniform vec3 background_color;\n uniform vec3 middle_color;\n uniform vec3 c4_color;\n uniform vec3 c5_color;\n uniform vec4 randomRect;\n uniform vec3 circle;\n uniform sampler2D noiseTexture;\n\n void main() {\n vec4 texColor = texture2D(reaction_diffusion, vUv);\n float h = texColor.g;\n\n vec3 colorA = background_color;\n vec3 colorB = middle_color;\n vec3 colorC = substance_color;\n vec3 colorD = c4_color;\n vec3 colorE = c5_color;\n\n float baseEdge0 = 0.0;\n float baseEdge1 = 0.075;\n float baseEdge2 = 0.175;\n float baseEdge3 = 0.275;\n float baseEdge4 = 0.375;\n\n float noiseValue = texture2D(noiseTexture, vUv).r;\n float edgeVariation = noiseValue * 0.1;\n\n float edge0 = baseEdge0 + edgeVariation;\n float edge1 = baseEdge1 + edgeVariation;\n float edge2 = baseEdge2 + edgeVariation;\n float edge3 = baseEdge3 + edgeVariation;\n float edge4 = baseEdge4 + edgeVariation;\n\n vec3 finalColor;\n\n if (h < edge1) {\n float t = clamp((h - edge0) / (edge1 - edge0), 0.0, 1.0);\n finalColor = mix(colorA, colorB, t);\n } else if (h < edge2) {\n float t = clamp((h - edge1) / (edge2 - edge1), 0.0, 1.0);\n finalColor = mix(colorB, colorC, t);\n } else if (h < edge3) {\n float t = clamp((h - edge2) / (edge3 - edge2), 0.0, 1.0);\n finalColor = mix(colorC, colorD, t);\n } else if (h < edge4) {\n float t = clamp((h - edge3) / (edge4 - edge3), 0.0, 1.0);\n finalColor = mix(colorD, colorE, t);\n } else {\n finalColor = colorE;\n }\n\n gl_FragColor = vec4(finalColor, 1.0);\n }\n\n",reaction_diffusion_fragment="\n\n uniform sampler2D environment;\n\n uniform float feed;\n uniform float kill;\n uniform float diffusion_scale;\n\n uniform float feed_variation;\n uniform float kill_variation;\n uniform bool isRect;\n uniform float diffusion_scale_variation;\n\n uniform float anisotropy;\n uniform bool separate_fields;\n\n uniform float feed_modifier;\n uniform float kill_modifier;\n\n uniform vec2 mouse_pos;\n uniform vec2 point_pos0;\n uniform vec2 point_pos1;\n uniform vec2 point_pos2;\n uniform vec2 point_pos3;\n uniform vec2 point_pos4;\n uniform vec2 point_pos5;\n uniform vec2 point_pos6;\n uniform vec2 point_pos7;\n uniform vec2 point_pos8;\n uniform vec2 point_pos9;\n uniform vec2 point_posR;\n uniform bool mouse_down;\n\n uniform bool reset;\n uniform bool add;\n\n uniform vec4 randomRect;\n uniform vec4 randomCirc;\n\n uniform vec2 randomRectPos;\n uniform vec2 randomRectSize;\n uniform vec2 randomCircPos;\n uniform vec2 randomCircSize;\n uniform float borderSize;\n\n uniform vec2 rect_top_left;\n uniform vec2 rect_bottom_right;\n\n uniform sampler2D ca_state;\n uniform float caThreshold;\n uniform float ca_factor;\n \n\n #define p2(v) v * v\n #define PI 3.14159265358979323846\n\n \n #define R 10.0\n #define borderWidth 20.0\n #define rectBorderWidth 2.0\n\n #define s(x, y) texture2D(reaction_diffusion, (gl_FragCoord.xy + vec2(x, y)) / resolution).xy\n\n vec2 anisotropicDiffusion(vec2 angles, float a1, vec2 center)\n {\n vec2\n v00 = s(-1, 1), v10 = s(0, 1), v20 = s(1, 1),\n v01 = s(-1, 0), v21 = s(1, 0),\n v02 = s(-1,-1), v12 = s(0,-1), v22 = s(1,-1);\n\n vec2 cos_t = cos(angles);\n vec2 sin_t = sin(angles);\n\n vec2 cos2_t = p2(cos_t);\n vec2 sin2_t = p2(sin_t);\n\n float a2 = 1.0 - a1;\n\n vec2 d = 4.0 * (a2 - a1) * p2(cos_t * sin_t);\n vec2 h = 8.0 * (a1 * cos2_t + a2 * sin2_t);\n vec2 v = 8.0 * (a2 * cos2_t + a1 * sin2_t);\n\n return ((1.0 - d) * (v00 + v22) + (1.0 + d) * (v20 + v02) + h * (v01 + v21) + v * (v10 + v12) - 20.0 * center) / 6.0;\n }\n\n float random (vec2 st) {\n return fract(sin(dot(st.xy,\n vec2(12.9898,78.233)))*\n 43758.5453123);\n }\n bool insideCircle(vec2 point, vec2 center, float radius) {\n return distance(point, center) <= radius;\n }\n\n\n void main() {\n vec4 env = texture2D(environment, (gl_FragCoord.xy / resolution).xy);\n vec2 st = gl_FragCoord.xy/resolution;\n vec3 ca_color = texture2D(ca_state, st).rgb;\n float ca_intensity = dot(ca_color, vec3(0.299, 0.587, 0.114));\n float caValue = texture2D(ca_state, (gl_FragCoord.xy / resolution)).r;\n\n\n float rnd = random( st );\n float pct = 0.0;\n\n vec2 randomRectPosA = randomRectPos * resolution;\n vec2 randomRectSizeA = randomRectSize * resolution;\n\n vec2 randomCircPosA = randomCircPos * resolution;\n vec2 randomCircSizeA = randomCircSize * resolution;\n\n pct = distance(st,vec2(0.5));\n\n float DS = diffusion_scale + env[2] * diffusion_scale_variation;\n vec2 angles = (1.0 + vec2(env[3], separate_fields ? env[0] : env[3])) * PI;\n float caInfluence = float(caValue > caThreshold);\n float F = feed + env[0] * feed_variation;\n float K = kill + env[1] * kill_variation;\n\n \n bool insideRectangle = (gl_FragCoord.x > randomRectPosA.x && gl_FragCoord.x < randomRectPosA.x + randomRectSizeA.x) &&\n (gl_FragCoord.y > randomRectPosA.y && gl_FragCoord.y < randomRectPosA.y + randomRectSizeA.y);\n\n bool insideCircle = insideCircle(gl_FragCoord.xy, randomCircPosA, randomCircSizeA.x); \n\n if (insideRectangle) {\n K += 0.003;\n }\n\n if (insideCircle) {\n K += 0.002;\n }\n\n vec2 old = s(0, 0);\n\n vec2 reaction = vec2(-1.0, 1.0) * old[0] * old[1] * old[1] * (1.0 + caInfluence * ca_factor);\n vec2 dissipation = vec2(F * (1.0 - old[0]), -old[1] * (K + F));\n vec2 diffusion = anisotropicDiffusion(angles, anisotropy, old) * DS * vec2(1.0, 0.5);\n float dt = 1.0 / (4.0 * DS);\n gl_FragColor.xy = old + (reaction + dissipation + diffusion) * dt;\n float edgeDistX = min(gl_FragCoord.x, resolution.x - gl_FragCoord.x);\n float edgeDistY = min(gl_FragCoord.y, resolution.y - gl_FragCoord.y);\n float edgeDist = min(edgeDistX, edgeDistY);\n if (edgeDist <= borderSize) {\n gl_FragColor.x = 0.0;\n gl_FragColor.y = 0.0;\n }\n\n if (mouse_down) {\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, mouse_pos), 0.0) / R;\n }\n\n if (reset) {\n gl_FragColor = vec4(0.0);\n }\n\n if(add)\n {\n vec2 pointPositions[10];\n pointPositions[0] = point_pos1;\n pointPositions[1] = point_pos2;\n pointPositions[2] = point_pos3;\n pointPositions[3] = point_pos4;\n pointPositions[4] = point_pos5;\n pointPositions[5] = point_pos6;\n pointPositions[6] = point_pos7;\n pointPositions[7] = point_pos8;\n pointPositions[8] = point_pos9;\n pointPositions[9] = point_pos0;\n\n for (int i = 0; i < 10; i++) {\n vec2 pointPos = pointPositions[i];\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, pointPos), 0.0) / R;\n }\n gl_FragColor[1] += max(0.25 - old[1], 0.0) * max(R - distance(gl_FragCoord.xy, point_posR), 0.0) / R;\n\n }\n }\n\n";const width=window.innerWidth,height=window.innerHeight,actual_width=Math.round(width),actual_height=Math.round(height),simulation_width=Math.round(actual_width/1.75),simulation_height=Math.round(actual_height/1.75),aspectRatio=window.innerWidth/window.innerHeight;class Random{constructor(){this.useA=!1;let e=function(e){let o=parseInt(e.substring(0,8),16),n=parseInt(e.substring(8,16),16),i=parseInt(e.substring(16,24),16),r=parseInt(e.substring(24,32),16);return function(){o|=0,n|=0,i|=0,r|=0;let e=(o+n|0)+r|0;return r=r+1|0,o=n^n>>>9,n=i+(i<<3)|0,i=i<<21|i>>>11,i=i+e|0,(e>>>0)/4294967296}};this.prngA=new e(tokenData.hash.substring(2,34)),this.prngB=new e(tokenData.hash.substring(34,66));for(let e=0;e<1e6;e+=2)this.prngA(),this.prngB()}random_dec(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}random_num(e,o){return e+(o-e)*this.random_dec()}random_int(e,o){return Math.floor(this.random_num(e,o+1))}random_bool(e){return this.random_dec()<e}random_choice(e){return e[this.random_int(0,e.length-1)]}}class SimplexNoise{constructor(e){this.grad3=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1]],this.p=[];for(let o=0;o<256;o++)this.p[o]=Math.floor(256*e.random_dec());this.perm=new Array(512);for(let e=0;e<512;e++)this.perm[e]=this.p[255&e]}dot(e,o,n,i){return e[0]*o+e[1]*n+e[2]*i}noise3d(e,o,n){const i=1/6;let r,t,a,s,l,c,d,f,u,m,_=(e+o+n)*(1/3),g=Math.floor(e+_),h=Math.floor(o+_),v=Math.floor(n+_),p=(g+h+v)*i,R=e-(g-p),b=o-(h-p),T=n-(v-p);R>=b?b>=T?(l=1,c=0,d=0,f=1,u=1,m=0):R>=T?(l=1,c=0,d=0,f=1,u=0,m=1):(l=0,c=0,d=1,f=1,u=0,m=1):b<T?(l=0,c=0,d=1,f=0,u=1,m=1):R<T?(l=0,c=1,d=0,f=0,u=1,m=1):(l=0,c=1,d=0,f=1,u=1,m=0);let F=R-l+i,E=b-c+i,x=T-d+i,C=R-f+2*i,w=b-u+2*i,y=T-m+2*i,S=R-1+.5,k=b-1+.5,H=T-1+.5,D=255&g,A=255&h,V=255&v,B=this.perm[D+this.perm[A+this.perm[V]]]%12,P=this.perm[D+l+this.perm[A+c+this.perm[V+d]]]%12,M=this.perm[D+f+this.perm[A+u+this.perm[V+m]]]%12,W=this.perm[D+1+this.perm[A+1+this.perm[V+1]]]%12,I=.6-R*R-b*b-T*T;I<0?r=0:(I*=I,r=I*I*this.dot(this.grad3[B],R,b,T));let z=.6-F*F-E*E-x*x;z<0?t=0:(z*=z,t=z*z*this.dot(this.grad3[P],F,E,x));let K=.6-C*C-w*w-y*y;K<0?a=0:(K*=K,a=K*K*this.dot(this.grad3[M],C,w,y));let U=.6-S*S-k*k-H*H;return U<0?s=0:(U*=U,s=U*U*this.dot(this.grad3[W],S,k,H)),32*(r+t+a+s)}}let R=new Random;function getRandomArbitrary(e,o){return R.random_dec()*(o-e)+e}let randomRect,randomCirc,diffScaleArray=[.25,.375,.5],diffScale=selectFromArray(diffScaleArray),diffScaleVar=selectFromArray([diffScale-.125,diffScale-.125]),diffScaleArrayWide=[.5,.625,.75,.875,1],diffScaleWide=selectFromArray(diffScaleArrayWide),diffScaleVarWide=selectFromArray([0,diffScale-.125]),feedVar=getRandomArbitrary(0,.01),killVar=getRandomArbitrary(0,.01);function selectFromArray(e){return e[Math.floor(R.random_dec()*e.length)]}function selectNumberFromArray(e){return Math.floor(R.random_dec()*e.length)}function getRandomBool(e){return R.random_dec()<e}function hexToRgb(e){const o=parseInt(e.slice(1),16);return[parseInt(o>>16&255),parseInt(o>>8&255),parseInt(255&o)]}function getRandomBoolean(){return R.random_dec()>=.5}let palettes={Candy:{background:"#E23DB3",accent:"#E23DB3",substance:"#FFC234",c4:"#FFFF99",c5:"#FFFFFF"},Color2:{background:"#AE2029",accent:"#AE2029",substance:"#98D82D",c4:"#98D82D",c5:"#98D82D"},Color3:{background:"#F17401",accent:"#F17401",substance:"#EBFF32",c4:"#EBFF32",c5:"#EBFF32"},Color4:{background:"#FF3C75",accent:"#FF3C75",substance:"#FD97C4",c4:"#FD97C4",c5:"#FD97C4"},Color5:{background:"#000000",accent:"#000000",substance:"#FFFFFF",c4:"#FFFFFF",c5:"#FFFFFF"},Color6:{background:"#F17401",accent:"#F17401",substance:"#EBFF32",c4:"#EBFF32",c5:"#EBFF32"},Yayoi:{background:"#D03A20",accent:"#D03A20",substance:"#FFFFFF",c4:"#FFFFFF",c5:"#FFFFFF"},Gabee:{background:"#ffffff",accent:"#f5f5f0",substance:"#f2f2f2",c4:"#f2f2f2",c5:"#ffffff"},CMKY:{background:"#ffffff",accent:(getRandomBoolean(),"#00ffff"),substance:"#ff00ff",c4:"#ffff00",c5:"#ffffff"},RGB:{background:"#000000",accent:(getRandomBoolean(),"#00FF00"),substance:"#FF0000",c4:"#0000FF",c5:"#FFFFFF"},"30Rack":{background:"#b42024",accent:getRandomBoolean()?"#b42024":"#000000",substance:"#b42024",c4:"#df2126",c5:"#df2126"},Mohun:{background:"#FFFFF1",accent:(getRandomBoolean(),"#C7AFF0"),substance:"#AFCDF0",c4:"#5BC2AC",c5:"#DE87B7"},Q:{background:"#ffffff",accent:"#ffffff",substance:"#e00000",c4:"#ffffff",c5:"#ffffff"},Skeleton:{background:"#000000",accent:"#ffffff",substance:"#000000",c4:"#000000",c5:"#000000"}};const defaultPallette={background:"#FF0000",accent:"#00FF00",substance:"#0000FF"},traitColorKeys=Object.keys(palettes),randomColorIndex=R.random_int(0,traitColorKeys.length-1),randomColorKey=traitColorKeys[randomColorIndex],randomColorTrait=palettes[randomColorKey],selectedColor={...defaultPallette,...randomColorTrait};console.log("palettes:",randomColorKey,"Settings object:",selectedColor),console.log(`Substance Color: ${selectedColor.substance}`),console.log(`Middle Color: ${selectedColor.accent}`),console.log(`Background Color:${selectedColor.background}`);let main_trait={Zebra:{diffusion_scale:diffScaleWide,diffusion_scale_variation:diffScaleVarWide,feed:.05,feed_variation:0,warped:getRandomBool(.2),kill:.061,kill_variation:0,feed_modifier:-.015,kill_modifier:-.001,anisotropy:selectFromArray([.25,.75]),environment_noise_scale:750,separate_fields:!0,substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64},Fingerprint:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.037,feed_variation:0,warped:getRandomBool(.2),kill:.06,feed_modifier:.009,kill_modifier:.003,kill_modifier:0,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64},"Dots and Dashes":{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.034,feed_variation:0,warped:getRandomBool(.2),kill:.0618,kill_variation:0,feed_modifier:-.004,kill_modifier:.0012,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64},Yayoi:{diffusion_scale:diffScaleWide,diffusion_scale_variation:diffScaleVarWide,feed:.03,feed_variation:0,warped:getRandomBool(.2),kill:.063,kill_variation:0,feed_modifier:0,kill_modifier:-.0065,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:0,light_height:8e3,simulation_iterations_per_frame:64},Spillage:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.035,feed_variation:.006,kill:.06,kill_variation:.006,feed_modifier:-.005,kill_modifier:-.0035,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64},Coral:{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.046,feed_variation:0,warped:getRandomBool(.2),kill:.063,kill_variation:0,feed_modifier:-.009,kill_modifier:-.003,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:64,light_height:8e3,simulation_iterations_per_frame:64},"Squiggle Maze":{diffusion_scale:diffScale,diffusion_scale_variation:diffScaleVar,feed:.03,feed_variation:0,warped:getRandomBool(.2),kill:.0565,kill_variation:0,feed_modifier:0,kill_modifier:.0065,anisotropy:.5,environment_noise_scale:250,separate_fields:getRandomBool(.3),substance_color:hexToRgb(selectedColor.substance),middle_color:hexToRgb(selectedColor.accent),background_color:hexToRgb(selectedColor.background),c4_color:hexToRgb(selectedColor.c4),c5_color:hexToRgb(selectedColor.c5),specular_color:[0,0,0],bump:0,shininess:8,light_height:8e3,simulation_iterations_per_frame:64}};const defaultSettings={anisotropy:.8,simulation_iterations_per_frame:64,environment_noise_scale:250,substance_color:[0,0,0],middle_color:[0,255,255],background_color:[255,255,255],c4_color:[0,255,255],background_color:[255,255,255],feed_modifier:0,kill_modifier:0,specular_color:[0,0,0],separate_fields:!1,warped:!1,diffusion_scale:.625,diffusion_scale_variation:.375,feed:.042,feed_variation:.001,kill:.06,kill_variation:.001},traitKeys=Object.keys(main_trait),randomIndex=Math.floor(R.random_dec()*traitKeys.length),randomKey=traitKeys[randomIndex],randomTrait=main_trait[randomKey],settings={...defaultSettings,...randomTrait};console.log("Trait name:",randomKey,"Settings object:",settings);const scene=new THREE.Scene,camera=new THREE.Camera;camera.position.z=1;const renderer=new THREE.WebGLRenderer;renderer.setPixelRatio(window.devicePixelRatio),renderer.setSize(width,height),document.body.appendChild(renderer.domElement);let light_pos=new THREE.Vector2(simulation_width,simulation_height),light_enabled=!1,mouse_down=!1,light_move=!1,brush_move=!1;const getRandomInt=(e,o)=>Math.floor(R.random_dec()*(e-o+1)+o),getRandomColor=()=>(16777215*R.random_dec()<<0).toString(16).padStart(6,"0");let elapsedTime=0,frameCounter=0;const updateFrequency=1;function getRandomFloat(e,o){return R.random_dec()*(o-e)+e}let isRect=R.random_choice([1,2,3,4]);switch(isRect){case 1:default:randomRect=new THREE.Vector4(.5*R.random_dec(),0,.2,1),randomCirc=new THREE.Vector4(0,0,0,0);break;case 2:randomRect=new THREE.Vector4(0,0,0,0),randomCirc=new THREE.Vector4(.5,.5,.4,.4);break;case 3:randomRect=new THREE.Vector4(0,0,0,0),randomCirc=new THREE.Vector4(0,0,0,0);break;case 4:randomRect=new THREE.Vector4(.5*R.random_dec(),0,.2,1),randomCirc=new THREE.Vector4(.5,.5,.4,.4)}const borderSizes=[10,50],borderSize=R.random_choice(borderSizes);let caEnabled=R.random_dec>.95;const ca_factor=!0===caEnabled?.8:0,caWidth=Math.floor(simulation_width/20),caHeight=Math.floor(simulation_height/20),caData=new Uint8Array(caWidth*caHeight*3);for(let e=0;e<caData.length;e+=3){let o=R.random_dec()<.8?0:255;caData[e]=o,caData[e+1]=o,caData[e+2]=o}const caTexture=new THREE.DataTexture(caData,caWidth,caHeight,THREE.RGBFormat);caTexture.magFilter=THREE.NearestFilter,caTexture.minFilter=THREE.NearestFilter,caTexture.wrapS=THREE.ClampToEdgeWrapping,caTexture.wrapT=THREE.ClampToEdgeWrapping,caTexture.needsUpdate=!0;const material=new THREE.ShaderMaterial({vertexShader:render_vertex,fragmentShader:render_fragment,uniforms:{reaction_diffusion:{value:null},substance_color:{value:(new THREE.Vector3).fromArray(settings.substance_color).divideScalar(255)},middle_color:{value:(new THREE.Vector3).fromArray(settings.middle_color).divideScalar(255)},background_color:{value:(new THREE.Vector3).fromArray(settings.background_color).divideScalar(255)},c4_color:{value:(new THREE.Vector3).fromArray(settings.c4_color).divideScalar(255)},c5_color:{value:(new THREE.Vector3).fromArray(settings.c5_color).divideScalar(255)},time:{value:0},noise_texture:{value:null},isRect:{value:isRect},randomRect:{value:randomRect},randomCirc:{value:randomCirc},ca_state:{value:caTexture}},defines:{frag2sim:"vec2("+simulation_width/actual_width+", "+simulation_height/actual_height+")",simulation_resolution:"vec2("+simulation_width+", "+simulation_height+")"}});scene.add(new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),material));const gpu_compute=new THREE.GPUComputationRenderer(simulation_width,simulation_height,renderer),reaction_diffusion=gpu_compute.createTexture(),reaction_diffusion_variable=gpu_compute.addVariable("reaction_diffusion",reaction_diffusion_fragment,reaction_diffusion);reaction_diffusion_variable.wrapS=THREE.ClampToEdgeWrapping,reaction_diffusion_variable.wrapT=THREE.ClampToEdgeWrapping,gpu_compute.setVariableDependencies(reaction_diffusion_variable,[reaction_diffusion_variable]);const reaction_diffusion_uniforms=reaction_diffusion_variable.material.uniforms;reaction_diffusion_uniforms.mouse_pos={value:new THREE.Vector2(-100,-100)};for(let e=0;e<10;e++)reaction_diffusion_uniforms[`point_pos${e}`]={value:new THREE.Vector2(getRandomInt(50,simulation_width-50),getRandomInt(50,simulation_height-50))};function updateCA(){const e=new Uint8Array(caWidth*caHeight*3),o=[1],n=[2,3];for(let i=0;i<caHeight;i++)for(let r=0;r<caWidth;r++){let t=3*(i*caWidth+r),a=0;for(let e=-1;e<=1;e++)for(let o=-1;o<=1;o++){if(0===o&&0===e)continue;255===caData[3*((i+e+caHeight)%caHeight*caWidth+(r+o+caWidth)%caWidth)]&&a++}let s=caData[t],l=a==o[0]||1==s&&n.includes(a)?1:0;l=255!==s||2!==a&&3!==a?0===s&&3===a?255:0:255,e[t]=l,e[t+1]=l,e[t+2]=l}caData.set(e),caTexture.needsUpdate=!0}reaction_diffusion_uniforms.mouse_down={value:!1},reaction_diffusion_uniforms.feed={value:settings.feed},reaction_diffusion_uniforms.kill={value:settings.kill},reaction_diffusion_uniforms.diffusion_scale={value:settings.diffusion_scale},reaction_diffusion_uniforms.feed_variation={value:settings.feed_variation},reaction_diffusion_uniforms.kill_variation={value:settings.kill_variation},reaction_diffusion_uniforms.feed_modifier={value:settings.feed_modifier},reaction_diffusion_uniforms.kill_modifier={value:settings.kill_modifier},reaction_diffusion_uniforms.diffusion_scale_variation={value:settings.diffusion_scale_variation},reaction_diffusion_uniforms.anisotropy={value:settings.anisotropy},reaction_diffusion_uniforms.reset={value:!1},reaction_diffusion_uniforms.add={value:!1},reaction_diffusion_uniforms.separate_fields={value:settings.separate_fields},reaction_diffusion_uniforms.warped={value:settings.warped},reaction_diffusion_uniforms.ca_factor={value:ca_factor},reaction_diffusion_uniforms.ca_state={value:caTexture},reaction_diffusion_uniforms.caThreshold={value:.6},reaction_diffusion_uniforms.borderSize={value:borderSize},reaction_diffusion_uniforms.randomRectPos={value:new THREE.Vector2(randomRect.x,randomRect.y)},reaction_diffusion_uniforms.randomRectSize={value:new THREE.Vector2(randomRect.z,randomRect.w)},reaction_diffusion_uniforms.randomCircPos={value:new THREE.Vector2(randomCirc.x,randomCirc.y)},reaction_diffusion_uniforms.randomCircSize={value:new THREE.Vector2(randomCirc.z,randomCirc.w)};const caDuration=3e4,maxUpdateFrequency=10;let startTime=Date.now();function animate(){if(requestAnimationFrame(animate),frameCounter++,caEnabled){let n=Date.now()-startTime;if(n<3e4){let i=Math.floor((o=1)+(n-(e=0))*(10-o)/(3e4-e));frameCounter%i==0&&updateCA()}else caEnabled=!1}var e,o;render()}function render(e){if(simulateReactionDiffusion(settings.simulation_iterations_per_frame),material.uniforms.reaction_diffusion.value=gpu_compute.getCurrentRenderTarget(reaction_diffusion_variable).texture,elapsedTime+=.01,material.uniforms.time.value=elapsedTime,reaction_diffusion_uniforms.u_time={value:.001*e},renderer.render(scene,camera),!0===render.save_image){render.save_image=!1;const e=document.getElementById("save-link");e.download=render.savename,e.href=renderer.domElement.toDataURL(),e.click()}renderer.info.render.frame>=2e3&&renderer.info.render.frame<5e3?reaction_diffusion_uniforms.add={value:!0}:reaction_diffusion_uniforms.add={value:!1}}function simulateReactionDiffusion(e){for(let o=0;o<e;o++)gpu_compute.compute()}function createEnvironment(e=!0){if(!e&&void 0!==createEnvironment.prev_scale&&createEnvironment.prev_scale===Settings.environment_noise_scale)return;createEnvironment.prev_scale=settings.environment_noise_scale;const o=new SimplexNoise(R),n=Array.from({length:4},(()=>1e3*R.random_dec())),i=1/settings.environment_noise_scale,r=simulation_width/2,t=simulation_height/2,a=(Math.sqrt(r**2+t**2),new Float32Array(simulation_width*simulation_height*4));for(let e=0;e<simulation_height;e++)for(let r=0;r<simulation_width;r++)for(let t=0;t<4;t++)a[4*(e*simulation_width+r)+t]=o.noise3d((r+.5)*i,(e+.5)*(!0===settings.warped?1:i),n[t]);reaction_diffusion_uniforms.environment={value:new THREE.DataTexture(a,simulation_width,simulation_height,THREE.RGBAFormat,THREE.FloatType)},reaction_diffusion_uniforms.environment.value.magFilter=THREE.LinearFilter,reaction_diffusion_uniforms.environment.value.minFilter=THREE.LinearFilter;const s=new THREE.DataTexture(a,simulation_width,simulation_height,THREE.RGBAFormat,THREE.FloatType);s.magFilter=THREE.LinearFilter,s.minFilter=THREE.LinearFilter,material.uniforms.noise_texture.value=s}function updateMousePos(e){let o=e.clientX*(simulation_width/width),n=simulation_height-e.clientY*(simulation_height/height);reaction_diffusion_uniforms.mouse_pos.value.fromArray([o,n])}function onMove(e){updateMousePos(e),reaction_diffusion_uniforms.mouse_down.value=mouse_down&&(brush_move=!0)}function onUp(){mouse_down=brush_move=!1,reaction_diffusion_uniforms.mouse_down.value=!1}function onDown(){mouse_down=!0}function handleTouchEvent(e,o){1===e.touches.length&&(e.preventDefault(),o(e.touches[0]))}createEnvironment(),gpu_compute.init(),animate(),console.log(`Diffusion Scale: ${settings.diffusion_scale}`),console.log(`Diffusion Scale Variation: ${settings.diffusion_scale_variation}`),console.log(`Feed Variation: ${settings.feed_variation}`),console.log(`Kill Variation: ${settings.kill_variation}`),console.log(`Separate Fields: ${settings.separate_fields}`),console.log(`Anisotropy: ${settings.anisotropy}`),console.log(`Warped: ${settings.warped}`),renderer.domElement.onmousedown=onDown,renderer.domElement.onmouseup=renderer.domElement.onmouseleave=onUp,renderer.domElement.onmousemove=onMove; |