{"commands":[{"name":"bindFramebuffer","commandArguments":[36160,{"__SPECTOR_Object_TAG":{"id":3,"typeName":"WebGLFramebuffer"}}]},{"name":"drawElements","commandArguments":[4,6,5123,0],"BlendState":{"BLEND":true,"BLEND_COLOR":[0,0,0,0],"BLEND_DST_ALPHA":"ONE_MINUS_SRC_ALPHA","BLEND_DST_RGB":"ONE_MINUS_SRC_ALPHA","BLEND_EQUATION_ALPHA":"FUNC_ADD","BLEND_EQUATION_RGB":"FUNC_ADD","BLEND_SRC_ALPHA":"ONE","BLEND_SRC_RGB":"SRC_ALPHA"},"CullState":{"CULL_FACE":true,"CULL_FACE_MODE":"BACK"},"DrawCall":{"attributes":[{"name":"position","arraySize":3,"divisor":0},{"name":"uv","arraySize":2,"divisor":0}],"frameBuffer":{"colorAttachments":[{"texture":{"__SPECTOR_Object_TAG":{"id":4,"typeName":"WebGLTexture"}}}],"frameBuffer":{"__SPECTOR_Object_TAG":{"id":3,"typeName":"WebGLFramebuffer"}}},"programStatus":{"program":{"__SPECTOR_Object_TAG":{"id":0,"typeName":"WebGLProgram"}}},"shaders":[{"shaderType":"VERTEX_SHADER","source":"#version 300 es\n#define attribute in\n#define varying out\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nattribute vec3 position;\nattribute vec2 uv;\nvarying vec2 vUv;\nvoid main() {\nvUv = uv;\ngl_Position = vec4(position, 1.);\n}"},{"shaderType":"FRAGMENT_SHADER","source":"#version 300 es\n#define varying in\nlayout(location = 0) out highp vec4 pc_fragColor;\n#define gl_FragColor pc_fragColor\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nvec4 LinearTransferOETF( in vec4 value ) {\nreturn value;\n}\nvec4 linearToOutputTexel( vec4 value ) {\nreturn LinearTransferOETF( vec4( value.rgb * mat3( 1.0000,-0.0000,-0.0000,-0.0000,1.0000,0.0000,0.0000,0.0000,1.0000 ), value.a ) );\n}\nuniform vec3 uColor1;\nvarying vec2 vUv;\nvoid main() {\nvec2 uv = vUv;\nvec3 color = vec3(0.0);\ncolor = uColor1;\ngl_FragColor = vec4(color, 1.0);\ngl_FragColor = linearToOutputTexel( gl_FragColor );\n}"}],"uniforms":[{"name":"uColor1","type":"FLOAT_VEC3","value":[0,0,0.00392156862745098]}]}},{"name":"drawElementsInstanced","commandArguments":[4,36,5123,0,848],"BlendState":{"BLEND":true,"BLEND_COLOR":[0,0,0,0],"BLEND_DST_ALPHA":"ONE_MINUS_SRC_ALPHA","BLEND_DST_RGB":"ONE_MINUS_SRC_ALPHA","BLEND_EQUATION_ALPHA":"FUNC_ADD","BLEND_EQUATION_RGB":"FUNC_ADD","BLEND_SRC_ALPHA":"ONE","BLEND_SRC_RGB":"SRC_ALPHA"},"CullState":{"CULL_FACE":true,"CULL_FACE_MODE":"BACK"},"DrawCall":{"attributes":[{"name":"position","arraySize":3,"divisor":0},{"name":"uv","arraySize":2,"divisor":0},{"name":"randomVertex","arraySize":4,"divisor":1},{"name":"randomFragment","arraySize":4,"divisor":1},{"name":"randomSimulation","arraySize":4,"divisor":1},{"name":"randomScale","arraySize":4,"divisor":1}],"frameBuffer":{"colorAttachments":[{"texture":{"__SPECTOR_Object_TAG":{"id":4,"typeName":"WebGLTexture"}}}],"frameBuffer":{"__SPECTOR_Object_TAG":{"id":3,"typeName":"WebGLFramebuffer"}}},"programStatus":{"program":{"__SPECTOR_Object_TAG":{"id":1,"typeName":"WebGLProgram"}}},"shaders":[{"shaderType":"VERTEX_SHADER","source":"#version 300 es\n#define attribute in\n#define varying out\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec4 randomVertex;\nattribute vec4 randomFragment;\nattribute vec4 randomSimulation;\nattribute vec4 randomScale;\nuniform float uTime;\nuniform vec3 uBoundingBox;\nuniform vec3 uGeometryMinScale;\nuniform vec3 uGeometryMaxScale;\nvarying vec2 vUv;\nvarying vec4 vRandom;\nvarying float vLife;\nvarying float vScaleGrad;\nvarying vec2 vScreenSpaceUV;\nfloat map(float value, float min1, float max1, float min2, float max2) {\nreturn min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\nfloat cmap(float value, float min1, float max1, float min2, float max2) {\nreturn clamp(map(value, min1, max1, min2, max2), min2, max2);\n}\nfloat easeInOutQuad(float x) {\nfloat inValue = 2.0 * x  *x;\nfloat outValue = 1.0- pow(-2.0 * x + 2.0,2.0) / 2.0;\nfloat inStep = step(inValue,0.5) * inValue;\nfloat outStep = step(0.5 , outValue ) * outValue;\nreturn inStep + outStep;\n}\nvoid main(){\nvec3 localPos = position * mix(uGeometryMinScale, uGeometryMaxScale, randomScale.xxz);\nvec3 pos = randomVertex.xyz * uBoundingBox;\nvec3 norm = normal;\nvScaleGrad = position.z + 0.5;\nfloat time = uTime * 0.1 * (randomSimulation.x + 0.5);\ntime += randomVertex.z;\nfloat life = easeInOutQuad(mod(time, 1.0));\nvLife = life;\npos.z = cmap(life, 0.0, 1.0, -uBoundingBox.z, 20.0);\npos += localPos;\nvUv = uv;\nvRandom = randomFragment;\nvec4 worldPosition = modelViewMatrix * vec4(pos, 1.0);\nvec4 finalPosition = projectionMatrix * worldPosition;\nvScreenSpaceUV = finalPosition.xy / finalPosition.w;\nvScreenSpaceUV = vScreenSpaceUV * 0.5 + vec2(0.5);\ngl_Position = finalPosition;\n}"},{"shaderType":"FRAGMENT_SHADER","source":"#version 300 es\n#define varying in\nlayout(location = 0) out highp vec4 pc_fragColor;\n#define gl_FragColor pc_fragColor\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nvec4 LinearTransferOETF( in vec4 value ) {\nreturn value;\n}\nvec4 linearToOutputTexel( vec4 value ) {\nreturn LinearTransferOETF( vec4( value.rgb * mat3( 1.0000,-0.0000,-0.0000,-0.0000,1.0000,0.0000,0.0000,0.0000,1.0000 ), value.a ) );\n}\nuniform float uGlobalAlpha;\nuniform vec3 uColor;\nuniform float uTrail;\nuniform float uBrightness;\nuniform float uGlowIntensity;\nvarying vec2 vUv;\nvarying vec4 vRandom;\nvarying vec3 vColor;\nvarying float vLife;\nvarying float vScaleGrad;\nvarying vec2 vScreenSpaceUV;\nfloat map(float value, float min1, float max1, float min2, float max2) {\nreturn min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\nfloat cmap(float value, float min1, float max1, float min2, float max2) {\nreturn clamp(map(value, min1, max1, min2, max2), min2, max2);\n}\nvoid main() {\nvec3 color = vec3(0.0);\ncolor = uColor * uBrightness;\nfloat alpha = cmap(vLife, 0.0, 0.2, 0.0, 1.0);\nfloat trail = pow(vScaleGrad, uTrail);\nalpha *= trail;\nfloat edgeSoftness = 0.01;\nfloat glowFactor = smoothstep(0.0, edgeSoftness, min(vUv.x, vUv.y)) * smoothstep(0.0, edgeSoftness, min(1.0 - vUv.x, 1.0 - vUv.y));\ncolor += glowFactor * uGlowIntensity * trail;\nalpha = clamp(alpha, 0.0, 1.0);\ngl_FragColor = vec4(color, alpha);\ngl_FragColor.a *= uGlobalAlpha;\ngl_FragColor = linearToOutputTexel( gl_FragColor );\n}"}],"uniforms":[{"name":"modelViewMatrix","type":"FLOAT_MAT4","value":[1,0,0,0,0,1,0,0,0,0,1,0,0,0,-13,1]},{"name":"projectionMatrix","type":"FLOAT_MAT4","value":[0.5372153520584106,0,0,0,0,1.191753625869751,0,0,0,0,-1.0000020265579224,-1,0,0,-0.002000001957640052,0]},{"name":"uTime","type":"FLOAT","value":13.416954040527344},{"name":"uBoundingBox","type":"FLOAT_VEC3","value":[30,30,80]},{"name":"uGeometryMinScale","type":"FLOAT_VEC3","value":[0.009999999776482582,0.009999999776482582,3.700000047683716]},{"name":"uGeometryMaxScale","type":"FLOAT_VEC3","value":[0.07000000029802322,0.07000000029802322,22.829999923706055]},{"name":"uGlobalAlpha","type":"FLOAT","value":0.05000000074505806},{"name":"uColor","type":"FLOAT_VEC3","value":[0.9019607843137255,0.12156862745098039,0.9568627450980393]},{"name":"uTrail","type":"FLOAT","value":2},{"name":"uBrightness","type":"FLOAT","value":6},{"name":"uGlowIntensity","type":"FLOAT","value":4}]}},{"name":"bindFramebuffer","commandArguments":[36160,{"__SPECTOR_Object_TAG":{"id":4,"typeName":"WebGLFramebuffer"}}]},{"name":"bindTexture","commandArguments":[3553,{"__SPECTOR_Object_TAG":{"id":4,"typeName":"WebGLTexture"}}]},{"name":"drawArrays","commandArguments":[4,0,3],"BlendState":{"BLEND":false,"BLEND_COLOR":[0,0,0,0],"BLEND_DST_ALPHA":"ONE_MINUS_SRC_ALPHA","BLEND_DST_RGB":"ONE_MINUS_SRC_ALPHA","BLEND_EQUATION_ALPHA":"FUNC_ADD","BLEND_EQUATION_RGB":"FUNC_ADD","BLEND_SRC_ALPHA":"ONE","BLEND_SRC_RGB":"SRC_ALPHA"},"CullState":{"CULL_FACE":true,"CULL_FACE_MODE":"BACK"},"DrawCall":{"attributes":[{"name":"position","arraySize":3,"divisor":0}],"frameBuffer":{"colorAttachments":[{"texture":{"__SPECTOR_Object_TAG":{"id":5,"typeName":"WebGLTexture"}}}],"frameBuffer":{"__SPECTOR_Object_TAG":{"id":4,"typeName":"WebGLFramebuffer"}}},"programStatus":{"program":{"__SPECTOR_Object_TAG":{"id":2,"typeName":"WebGLProgram"}}},"shaders":[{"shaderType":"VERTEX_SHADER","source":"#version 300 es\n#define attribute in\n#define varying out\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nattribute vec3 position;\nattribute vec2 uv;\nuniform float aspect;\nvarying vec2 vUv;\nuniform vec2 e0Offset;\nvarying float e0VActive;\nvarying vec2 e0VUvR;\nvarying vec2 e0VUvB;\nvoid e0MainSupport(const in vec2 uv){vec2 shift=e0Offset*vec2(1.0,aspect);e0VActive=(shift.x!=0.0||shift.y!=0.0)?1.0:0.0;e0VUvR=uv+shift;e0VUvB=uv-shift;}\nvoid main(){vUv=position.xy*0.5+0.5;e0MainSupport(vUv); gl_Position=vec4(position.xy,1.0,1.0);}"},{"shaderType":"FRAGMENT_SHADER","source":"#version 300 es\n#define varying in\nlayout(location = 0) out highp vec4 pc_fragColor;\n#define gl_FragColor pc_fragColor\n#define texture2D texture\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\n#define UV vUv\nvec4 LinearTransferOETF( in vec4 value ) {\nreturn value;\n}\nvec4 linearToOutputTexel( vec4 value ) {\nreturn LinearTransferOETF( vec4( value.rgb * mat3( 1.0000,-0.0000,-0.0000,-0.0000,1.0000,0.0000,0.0000,0.0000,1.0000 ), value.a ) );\n}\nuniform mediump sampler2D inputBuffer;\nvarying vec2 vUv;\nuniform float e0BlendOpacity;\nvarying float e0VActive;\nvarying vec2 e0VUvR;\nvarying vec2 e0VUvB;\nvoid e0MainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 ra=inputColor.ra;vec2 ba=inputColor.ba;\nif(e0VActive>0.0){ra=texture2D(inputBuffer,e0VUvR).ra;ba=texture2D(inputBuffer,e0VUvB).ba;}\noutputColor=vec4(ra.x,inputColor.g,ba.x,max(max(ra.y,ba.y),inputColor.a));}\nvec4 blend23(const in vec4 dst,const in vec4 src,const in float opacity){return mix(dst,src,opacity);}\nvoid main(){ vec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);e0MainImage(color0, UV, color1);\ncolor0 = blend23(color0, color1, e0BlendOpacity); color0.a=clamp(color0.a,0.0,1.0);gl_FragColor=color0;\ngl_FragColor = linearToOutputTexel( gl_FragColor );\n}"}],"uniforms":[{"name":"aspect","type":"FLOAT","value":2.218390703201294},{"name":"e0Offset","type":"FLOAT_VEC2","value":[0.0010000000474974513,0.0010000000474974513]},{"name":"e0BlendOpacity","type":"FLOAT","value":1},{"name":"inputBuffer","type":"SAMPLER_2D"}]}},{"name":"bindFramebuffer","commandArguments":[36160,null]},{"name":"bindTexture","commandArguments":[3553,{"__SPECTOR_Object_TAG":{"id":5,"typeName":"WebGLTexture"}}]},{"name":"drawArrays","commandArguments":[4,0,3],"BlendState":{"BLEND":false,"BLEND_COLOR":[0,0,0,0],"BLEND_DST_ALPHA":"ONE_MINUS_SRC_ALPHA","BLEND_DST_RGB":"ONE_MINUS_SRC_ALPHA","BLEND_EQUATION_ALPHA":"FUNC_ADD","BLEND_EQUATION_RGB":"FUNC_ADD","BLEND_SRC_ALPHA":"ONE","BLEND_SRC_RGB":"SRC_ALPHA"},"CullState":{"CULL_FACE":true,"CULL_FACE_MODE":"BACK"},"DrawCall":{"attributes":[{"name":"position","arraySize":3,"divisor":0}],"frameBuffer":null,"programStatus":{"program":{"__SPECTOR_Object_TAG":{"id":3,"typeName":"WebGLProgram"}}},"shaders":[{"shaderType":"VERTEX_SHADER","source":"#version 300 es\n#define attribute in\n#define varying out\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\nattribute vec3 position;\nvarying vec2 vUv;\nvoid main(){vUv=position.xy*0.5+0.5; gl_Position=vec4(position.xy,1.0,1.0);}"},{"shaderType":"FRAGMENT_SHADER","source":"#version 300 es\n#define varying in\nlayout(location = 0) out highp vec4 pc_fragColor;\n#define gl_FragColor pc_fragColor\n#define texture2D texture\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\n#define UV vUv\nvec4 sRGBTransferOETF( in vec4 value ) {\nreturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 linearToOutputTexel( vec4 value ) {\nreturn sRGBTransferOETF( vec4( value.rgb * mat3( 1.0000,-0.0000,-0.0000,-0.0000,1.0000,0.0000,0.0000,0.0000,1.0000 ), value.a ) );\n}\nuniform mediump sampler2D inputBuffer;\nvarying vec2 vUv;\nuniform float e0BlendOpacity;\nuniform float e0Intensity;\nfloat e0Sat( float t ) {\nreturn clamp( t, 0.0, 1.0 );\n}\nfloat e0Linterp( float t ) {\nreturn e0Sat( 1.0 - abs( 2.0*t - 1.0 ) );\n}\nfloat e0Remap( float t, float a, float b ) {\nreturn e0Sat( (t - a) / (b - a) );\n}\nvec3 e0Spectrum_offset( float t ) {\nvec3 ret;\nfloat lo = step(t,0.5);\nfloat hi = 1.0-lo;\nfloat w = e0Linterp( e0Remap( t, 1.0/6.0, 5.0/6.0 ) );\nret = vec3(lo,1.0,hi) * vec3(1.0-w, w, 1.0-w);\nreturn pow( ret, vec3(1.0/2.2) );\n}\nvec2 e0BarrelDistortion(vec2 coord, float amt) {\nvec2 cc = coord - vec2(0.5);\nreturn coord + cc * amt * -0.05;\n}\nconst int num_iter = 16;\nvoid e0MainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {\nvec3 sumcol = vec3(0.0);\nvec3 sumw = vec3(0.0);\nfor ( int i=0; i<num_iter;++i ) {\nfloat t = float(i) * (1.0 / float(num_iter));\nvec3 w = e0Spectrum_offset( t );\nsumw += w;\nsumcol += w * texture2D( inputBuffer, e0BarrelDistortion(uv, e0Intensity * 0.1 * t)).rgb;\n}\nvec3 color = sumcol / sumw;\noutputColor = vec4(color, inputColor.a);\n}\nuniform float e1BlendOpacity;\nuniform float e1Intensity;\nuniform float e1Time;\nvoid e1MainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {\nvec3 color = inputColor.rgb;\nfloat strength = 16.0 * e1Intensity;\nfloat t = e1Time ;\nvec2 gUV = uv * 1.5;\nfloat x = (gUV.x + 4.0 ) * (gUV.y + 4.0 ) * (t);\nvec3 grain = vec3(mod((mod(x, 13.0) + 1.0) * (mod(x, 123.0) + 1.0), 0.01)-0.005) * strength;\ncolor = color + grain;\noutputColor = vec4(color, inputColor.a + grain.x);\n}\nvec4 blend23(const in vec4 dst,const in vec4 src,const in float opacity){return mix(dst,src,opacity);}\nvoid main(){ vec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);e0MainImage(color0, UV, color1);\ncolor0 = blend23(color0, color1, e0BlendOpacity);\ne1MainImage(color0, UV, color1);\ncolor0 = blend23(color0, color1, e1BlendOpacity); color0.a=clamp(color0.a,0.0,1.0);gl_FragColor=color0;\ngl_FragColor = linearToOutputTexel( gl_FragColor );\n}"}],"uniforms":[{"name":"e0BlendOpacity","type":"FLOAT","value":1},{"name":"e0Intensity","type":"FLOAT","value":30},{"name":"e1BlendOpacity","type":"FLOAT","value":1},{"name":"e1Intensity","type":"FLOAT","value":0.05000000074505806},{"name":"e1Time","type":"FLOAT","value":1000.18798828125},{"name":"inputBuffer","type":"SAMPLER_2D"}]}}],"viewerSettings":{"speed":1,"scale":1,"seed":1337,"clear":0.08,"count":0,"parallax":0}}