From 84a02419a7b8f44f846808b46e8045b3ecddec6b Mon Sep 17 00:00:00 2001 From: Rezmason Date: Sat, 30 May 2020 09:11:26 -0700 Subject: [PATCH 1/4] Created an advanced demo, using floating point FBOs, GPU compute, MSDFs, a bloom implementation, and noisy color mapping to recreate the code rain effect seen in The Matrix. Added thumbnail to example/img. --- example/assets/matrix_glyphs_msdf.png | Bin 0 -> 83280 bytes example/assets/matrix_palette.png | Bin 0 -> 4842 bytes example/img/matrix_code.png | Bin 0 -> 45920 bytes example/matrix_code.js | 400 ++++++++++++++++++++++++++ 4 files changed, 400 insertions(+) create mode 100644 example/assets/matrix_glyphs_msdf.png create mode 100644 example/assets/matrix_palette.png create mode 100644 example/img/matrix_code.png create mode 100644 example/matrix_code.js diff --git a/example/assets/matrix_glyphs_msdf.png b/example/assets/matrix_glyphs_msdf.png new file mode 100644 index 0000000000000000000000000000000000000000..9f472399717d6e5f84307cbe577393f02768b959 GIT binary patch literal 83280 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 literal 0 HcmV?d00001 diff --git a/example/assets/matrix_palette.png b/example/assets/matrix_palette.png new file mode 100644 index 0000000000000000000000000000000000000000..7860f060965560a143f7823803298d95c61e7fd8 GIT binary patch literal 4842 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 XJGq5XZc4Y-zb(v+t&IxzoecdS^VT}; literal 0 HcmV?d00001 diff --git a/example/img/matrix_code.png b/example/img/matrix_code.png new file mode 100644 index 0000000000000000000000000000000000000000..e887a4b11e1330e32021a9147829572856b5ece9 GIT binary patch literal 45920 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 M07*qoM6N<$f(liVN&o-= literal 0 HcmV?d00001 diff --git a/example/matrix_code.js b/example/matrix_code.js new file mode 100644 index 00000000..343f2f15 --- /dev/null +++ b/example/matrix_code.js @@ -0,0 +1,400 @@ +/* + tags: advanced, fbo, gpgpu, msdf, mrt + +

This example is an implementation of the green code seen in The Matrix film and video game franchise.

+ +

This is a simplified version of the Matrix effect found here.

+ +

This example demonstrates five concepts: +

    +
  • Drawing to floating point frame buffer objects, or 'FBO's, for performing computation and post-processing
  • +
  • GPU-side computation, with a fragment shader updating two alternating FBOs
  • +
  • Rendering crisp "vector" graphics, with a multiple-channel signed distance field (or 'MSDF')
  • +
  • Creating a blur/bloom effect from a texture pyramid
  • +
  • Color mapping with noise, to hide banding
  • +
+

+ +*/ + +const numColumns = 60 +const glyphTextureColumns = 8 +const glyphSequenceLength = 57 +const msdfURL = "assets/matrix_glyphs_msdf.png" +const paletteURL = "assets/matrix_palette.png" + +document.body.style = "background-color: black;" +document.addEventListener('touchmove', e => e.preventDefault(), { passive: false }) +const canvas = document.body.appendChild(document.createElement('canvas')) +const fit = require('canvas-fit') +window.addEventListener('resize', fit(canvas), false) + +const regl = require('../regl')({ + canvas, + extensions: [ + 'OES_texture_half_float', + 'OES_texture_half_float_linear', + ], + optionalExtensions: [ + // These extensions are also needed, but Safari misreports that they are missing + 'EXT_color_buffer_half_float', + 'WEBGL_color_buffer_float', + 'OES_standard_derivatives' + ], +}) + +// These two framebuffers are used to compute the raining code. +// they take turns being the source and destination of the "compute" shader. +// The half float data type is crucial! It lets us store almost any real number, +// whereas the default type limits us to integers between 0 and 255. + +// These FBOs are smaller than the screen, because their pixels correspond +// with glyphs in the final image, and the glyphs are much larger than a pixel. +const state = (Array(2)).fill().map(() => + regl.framebuffer({ + color: regl.texture({ + radius: numColumns, + type: 'half float' + }), + depthStencil: false + })) + +const makePassTexture = () => regl.texture({ + type: 'half float', + min: 'linear', + mag: 'linear' +}) + +const makePassFBO = () => regl.framebuffer({ color: makePassTexture() }) +const makePyramid = height => Array(height).fill().map(makePassFBO) +// A pyramid is just an array of FBOs, where each FBO is half the width +// and half the height of the FBO below it. +const resizePyramid = (pyramid, vw, vh, scale) => pyramid.forEach( + (fbo, index) => fbo.resize( + Math.floor(vw * scale / Math.pow(2, index)), + Math.floor(vh * scale / Math.pow(2, index)) + ) +) +const pyramidUniforms = pyramid => { + const uniforms = {} + for (let i = 0; i < pyramid.length; i++) { + uniforms[`tex_${i}`] = pyramid[i] + } + return uniforms +} + +const pyramidHeight = 5 +const renderedFBO = makePassFBO() +const highPassPyramid = makePyramid(pyramidHeight) +const horizontalBlurPyramid = makePyramid(pyramidHeight) +const verticalBlurPyramid = makePyramid(pyramidHeight) +const bloomedFBO = makePassFBO() + +const updateRain = regl({ + frag: ` + precision highp float; + + #define PI 3.14159265359 + #define SQRT_2 1.4142135623730951 + #define SQRT_5 2.23606797749979 + + uniform float glyphSequenceLength; + uniform float numColumns; + uniform float glyphTextureColumns; + uniform float time; + uniform sampler2D lastState; + + highp float rand( const in vec2 uv ) { + const highp float a = 12.9898, b = 78.233, c = 43758.5453; + highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); + return fract(sin(sn) * c); + } + + void main() { + + vec2 uv = gl_FragCoord.xy / numColumns; + + float columnTimeOffset = rand(vec2(gl_FragCoord.x, 0.0)); + float columnSpeedOffset = rand(vec2(gl_FragCoord.x + 0.1, 0.0)); + + vec4 data = texture2D( lastState, uv ); + + if (length(data) == 0.) { + data.rba = vec3(rand(uv), 0., 0.); + data.g = rand(uv); + } + + float columnTime = (columnTimeOffset * 1000.0 + time * 0.5) * (0.5 + columnSpeedOffset * 0.5) + (sin(time * columnSpeedOffset) * 0.2); + float glyphTime = gl_FragCoord.y * 0.01 + columnTime; + + float value = 1.0 - fract((glyphTime + 0.3 * sin(SQRT_2 * glyphTime) + 0.2 * sin(SQRT_5 * glyphTime))); + + float brightness = 3.0 * log(value * 1.25); + + float glyphCycleSpeed = 0.0; + if (brightness > 0.0) glyphCycleSpeed = pow(1.0 - brightness, 4.0); + + float glyphCycle = data.g; + glyphCycle = fract(glyphCycle + 0.005 * glyphCycleSpeed); + + float symbol = floor(glyphSequenceLength * glyphCycle); + float symbolX = mod(symbol, glyphTextureColumns); + float symbolY = ((glyphTextureColumns - 1.0) - (symbol - symbolX) / glyphTextureColumns); + + gl_FragColor = vec4( + brightness, + glyphCycle, + symbolY * glyphTextureColumns + symbolX, + 1. + ); + } + `, + + uniforms: { + glyphSequenceLength, + time: regl.context('time'), + }, + + framebuffer: ({tick}) => state[(tick + 1) % 2] // The crucial state FBO alternator +}) + + +// We render the code into an FBO using MSDFs: https://github.com/Chlumsky/msdfgen +const renderRain = regl({ + vert: ` + attribute vec2 aPosition; + uniform float width; + uniform float height; + varying vec2 vUV; + void main() { + vUV = aPosition / 2.0 + 0.5; + vec2 size = width > height ? vec2(width / height, 1.) : vec2(1., height / width); + gl_Position = vec4( size * aPosition, 0.0, 1.0 ); + } + `, + + frag:` + #ifdef GL_OES_standard_derivatives + #extension GL_OES_standard_derivatives: enable + #endif + precision lowp float; + + uniform sampler2D glyphMSDF; + uniform sampler2D lastState; + uniform float numColumns; + uniform float glyphTextureColumns; + + varying vec2 vUV; + + float median3(vec3 i) { + return max(min(i.r, i.g), min(max(i.r, i.g), i.b)); + } + + void main() { + // Unpack the values from the font texture + vec4 glyph = texture2D(lastState, vUV); + float brightness = max(0., glyph.r); + float symbolIndex = glyph.b; + + // resolve UV to MSDF texture coord + vec2 symbolUV = vec2(mod(symbolIndex, glyphTextureColumns), floor(symbolIndex / glyphTextureColumns)); + vec2 glyphUV = fract(vUV * numColumns); + vec2 msdfUV = (glyphUV + symbolUV) / glyphTextureColumns; + + // MSDF + vec3 dist = texture2D(glyphMSDF, msdfUV).rgb; + float sigDist = median3(dist) - 0.5; + float alpha = clamp(sigDist/fwidth(sigDist) + 0.5, 0.0, 1.0); + + gl_FragColor = vec4(vec3(brightness * alpha), 1.0); + } + `, + + uniforms: { + glyphMSDF: regl.prop("glyphMSDF"), + width: regl.context('viewportHeight'), + height: regl.context('viewportWidth'), + }, + + framebuffer: renderedFBO +}) + +// Next a bloom is applied, aka an added high-pass blur. + +// The high pass restricts the blur to bright things in our source texture. +const highPass = regl({ + frag: ` + precision mediump float; + varying vec2 vUV; + uniform sampler2D tex; + uniform float threshold; + void main() { + float value = texture2D(tex, vUV).r; + if (value < threshold) { + value = 0.; + } + gl_FragColor = vec4(vec3(value), 1.0); + } + `, + uniforms: { + tex: regl.prop("tex"), + threshold: 0.3 + }, + framebuffer: regl.prop("fbo") +}) + +// A 2D gaussian blur is just a 1D blur done horizontally, then done vertically. +// The FBO pyramid's levels represent separate levels of detail; +// by blurring them all, this 3x1 blur approximates a more complex gaussian. +const blur = regl({ + frag: ` + precision mediump float; + varying vec2 vUV; + uniform sampler2D tex; + uniform vec2 direction; + uniform float width, height; + void main() { + vec2 size = width > height ? vec2(width / height, 1.) : vec2(1., height / width); + gl_FragColor = + texture2D(tex, vUV) * 0.442 + + ( + texture2D(tex, vUV + direction / max(width, height) * size) + + texture2D(tex, vUV - direction / max(width, height) * size) + ) * 0.279; + } + `, + uniforms: { + tex: regl.prop("tex"), + direction: regl.prop("direction"), + height: regl.context('viewportWidth'), + width: regl.context('viewportHeight'), + }, + framebuffer: regl.prop("fbo") +}) + +// The pyramid of textures gets flattened onto the source texture. +const combineBloom = regl({ + frag: ` + precision mediump float; + varying vec2 vUV; + ${verticalBlurPyramid.map((_, index) => `uniform sampler2D tex_${index};`).join("\n")} + uniform sampler2D tex; + void main() { + vec4 total = vec4(0.); + ${verticalBlurPyramid.map((_, index) => `total += texture2D(tex_${index}, vUV);`).join("\n")} + gl_FragColor = total + texture2D(tex, vUV); + } + `, + uniforms: Object.assign({ tex: regl.prop("tex") }, pyramidUniforms(verticalBlurPyramid)), + framebuffer: regl.prop("fbo") +}) + +// Finally, the values are mapped to colors in a palette texture. +// A little noise is introduced, to hide the banding that appears +// in subtle gradients. The noise is also time-driven, so its grain +// won't persist across subsequent frames. This is a safe trick +// in screen space. + +const colorizeByPalette = regl({ + frag: ` + precision mediump float; + #define PI 3.14159265359 + + uniform sampler2D tex; + uniform sampler2D palette; + uniform float ditherMagnitude; + uniform float time; + varying vec2 vUV; + + highp float rand( const in vec2 uv, const in float t ) { + const highp float a = 12.9898, b = 78.233, c = 43758.5453; + highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); + return fract(sin(sn) * c + t); + } + + void main() { + float value = texture2D( tex, vUV ).r - rand( gl_FragCoord.xy, time ) * ditherMagnitude; + gl_FragColor = texture2D(palette, vec2(value, 0.)); + } + `, + + uniforms: { + ditherMagnitude: 0.05, + palette: regl.prop("palette"), + tex: bloomedFBO, + time: regl.context('time') + } +}) + +// All this takes place in a full screen quad. +const setupQuad = regl({ + vert: ` + precision mediump float; + attribute vec2 aPosition; + varying vec2 vUV; + void main() { + vUV = 0.5 * (aPosition + 1.0); + gl_Position = vec4(aPosition, 0, 1); + }`, + + attributes: { + aPosition: [ -4, -4, 4, -4, 0, 4 ] + }, + + uniforms: { + lastState: ({tick}) => state[tick % 2], + numColumns, + glyphTextureColumns, + }, + + depth: { enable: false }, + count: 3 +}) + +require('resl')({ + manifest: { + glyphMSDF: { + type: 'image', + src: msdfURL, + parser: data => regl.texture({ + data, + mag: 'linear', + min: 'linear', + flipY: true + }) + }, + palette: { + type: 'image', + src: paletteURL, + parser: data => regl.texture({ + data, + mag: 'linear', + min: 'linear' + }) + } + }, + onDone: resources => { + setupQuad({}, updateRain) + regl.frame(({viewportWidth, viewportHeight}) => { + // All the FBOs except the compute FBOs need to be sized to the window. + renderedFBO.resize(viewportWidth, viewportHeight) + bloomedFBO.resize(viewportWidth, viewportHeight) + // The blur pyramids can be lower resolution than the screen. + const bloomScale = 0.5 + resizePyramid(highPassPyramid, viewportWidth, viewportHeight, bloomScale) + resizePyramid(horizontalBlurPyramid, viewportWidth, viewportHeight, bloomScale) + resizePyramid(verticalBlurPyramid, viewportWidth, viewportHeight, bloomScale) + + // And here is the full draw sequence. + setupQuad(() => { + updateRain() + renderRain(resources) + highPassPyramid.forEach(fbo => highPass({fbo, tex: renderedFBO})) + horizontalBlurPyramid.forEach((fbo, index) => blur({ fbo, tex: highPassPyramid[index], direction: [1, 0]})) + verticalBlurPyramid.forEach((fbo, index) => blur({ fbo, tex: horizontalBlurPyramid[index], direction: [0, 1]})) + combineBloom({tex: renderedFBO, fbo: bloomedFBO}) + colorizeByPalette(resources) + }) + }) + } +}) From 6abc7012672de149c1a58af9f720c7a32623c412 Mon Sep 17 00:00:00 2001 From: Rezmason Date: Sat, 30 May 2020 10:06:55 -0700 Subject: [PATCH 2/4] Small fixes to the gallery builder. Added a screenshot for dynamic-resize example. --- bin/build-gallery.js | 22 ++++++++++++++++++---- example/img/dynamic-resize.png | Bin 0 -> 10407 bytes 2 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 example/img/dynamic-resize.png diff --git a/bin/build-gallery.js b/bin/build-gallery.js index 9d17b472..3cc4f27f 100644 --- a/bin/build-gallery.js +++ b/bin/build-gallery.js @@ -60,6 +60,11 @@ p a:hover { font-size: 1.0em; } +#exList li { + list-style-type: disc; + margin-left: 1em; +} + #exList > li > a { text-decoration: none; color: #000; @@ -83,6 +88,7 @@ p a:hover { #exList > li { padding-top: 50px; padding-bottom: 50px; + margin-left: 0; overflow: auto; list-style-type: none; @@ -328,7 +334,11 @@ function generateGallery (files) { ` - fs.writeFile('www/gallery.html', html) + fs.writeFile('www/gallery.html', html, function(err){ + if (err) { + throw err + } + }) } mkdirp('www/gallery', function (err) { @@ -346,6 +356,9 @@ mkdirp('www/gallery', function (err) { if (err) { throw err } files.forEach(function (file, _, i) { + + console.log(file); + var currentFileStats = fs.statSync(file) var targetFile = jsName(file).replace('.js', '.min.js') var targetFileStats = fs.existsSync(targetFile) && fs.statSync(targetFile) @@ -362,6 +375,7 @@ mkdirp('www/gallery', function (err) { b.transform(es2020) b.bundle(function (err, bundle) { if (err) { + console.log ("Problem with", file); throw err } console.log('bundled', file) @@ -390,13 +404,13 @@ function minifyAndGenPage (file, bundle) { }) closureCompiler.run(function (exitCode, stdOut, stdErr) { + console.log('minified ', minFile) + console.log('stdout: ', stdOut) + console.log('stderr: ', stdErr) fs.readFile(minFile, function (err, data) { if (err) { throw err } - console.log('minified ', minFile) - console.log('stdout: ', stdOut) - console.log('stderr: ', stdErr) writePage(file, data) }) }) diff --git a/example/img/dynamic-resize.png b/example/img/dynamic-resize.png new file mode 100644 index 0000000000000000000000000000000000000000..a788cfc0ecd23bae39a67891a2555e00f36b9f0e GIT binary patch literal 10407 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 o`ED{Lfgm%$9OnO@SkxuijCZk%)lTjB-=F>Tw2U Date: Sat, 30 May 2020 10:31:37 -0700 Subject: [PATCH 3/4] Removing an unnecessary log --- bin/build-gallery.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/bin/build-gallery.js b/bin/build-gallery.js index 3cc4f27f..1e6347f7 100644 --- a/bin/build-gallery.js +++ b/bin/build-gallery.js @@ -356,9 +356,6 @@ mkdirp('www/gallery', function (err) { if (err) { throw err } files.forEach(function (file, _, i) { - - console.log(file); - var currentFileStats = fs.statSync(file) var targetFile = jsName(file).replace('.js', '.min.js') var targetFileStats = fs.existsSync(targetFile) && fs.statSync(targetFile) From cc112196f39806dff69359f857e81ca462d66110 Mon Sep 17 00:00:00 2001 From: Rezmason Date: Sat, 30 May 2020 10:45:07 -0700 Subject: [PATCH 4/4] Running standard --- bin/build-gallery.js | 4 +-- example/matrix_code.js | 57 +++++++++++++++++++++--------------------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/bin/build-gallery.js b/bin/build-gallery.js index 1e6347f7..644251e0 100644 --- a/bin/build-gallery.js +++ b/bin/build-gallery.js @@ -334,7 +334,7 @@ function generateGallery (files) { ` - fs.writeFile('www/gallery.html', html, function(err){ + fs.writeFile('www/gallery.html', html, function (err) { if (err) { throw err } @@ -372,7 +372,7 @@ mkdirp('www/gallery', function (err) { b.transform(es2020) b.bundle(function (err, bundle) { if (err) { - console.log ("Problem with", file); + console.log('Problem with', file) throw err } console.log('bundled', file) diff --git a/example/matrix_code.js b/example/matrix_code.js index 343f2f15..f8503b3e 100644 --- a/example/matrix_code.js +++ b/example/matrix_code.js @@ -20,10 +20,10 @@ const numColumns = 60 const glyphTextureColumns = 8 const glyphSequenceLength = 57 -const msdfURL = "assets/matrix_glyphs_msdf.png" -const paletteURL = "assets/matrix_palette.png" +const msdfURL = 'assets/matrix_glyphs_msdf.png' +const paletteURL = 'assets/matrix_palette.png' -document.body.style = "background-color: black;" +document.body.style = 'background-color: black;' document.addEventListener('touchmove', e => e.preventDefault(), { passive: false }) const canvas = document.body.appendChild(document.createElement('canvas')) const fit = require('canvas-fit') @@ -33,14 +33,14 @@ const regl = require('../regl')({ canvas, extensions: [ 'OES_texture_half_float', - 'OES_texture_half_float_linear', + 'OES_texture_half_float_linear' ], optionalExtensions: [ // These extensions are also needed, but Safari misreports that they are missing 'EXT_color_buffer_half_float', 'WEBGL_color_buffer_float', 'OES_standard_derivatives' - ], + ] }) // These two framebuffers are used to compute the raining code. @@ -152,13 +152,12 @@ const updateRain = regl({ uniforms: { glyphSequenceLength, - time: regl.context('time'), + time: regl.context('time') }, - framebuffer: ({tick}) => state[(tick + 1) % 2] // The crucial state FBO alternator + framebuffer: ({ tick }) => state[(tick + 1) % 2] // The crucial state FBO alternator }) - // We render the code into an FBO using MSDFs: https://github.com/Chlumsky/msdfgen const renderRain = regl({ vert: ` @@ -173,7 +172,7 @@ const renderRain = regl({ } `, - frag:` + frag: ` #ifdef GL_OES_standard_derivatives #extension GL_OES_standard_derivatives: enable #endif @@ -211,9 +210,9 @@ const renderRain = regl({ `, uniforms: { - glyphMSDF: regl.prop("glyphMSDF"), + glyphMSDF: regl.prop('glyphMSDF'), width: regl.context('viewportHeight'), - height: regl.context('viewportWidth'), + height: regl.context('viewportWidth') }, framebuffer: renderedFBO @@ -237,10 +236,10 @@ const highPass = regl({ } `, uniforms: { - tex: regl.prop("tex"), + tex: regl.prop('tex'), threshold: 0.3 }, - framebuffer: regl.prop("fbo") + framebuffer: regl.prop('fbo') }) // A 2D gaussian blur is just a 1D blur done horizontally, then done vertically. @@ -264,12 +263,12 @@ const blur = regl({ } `, uniforms: { - tex: regl.prop("tex"), - direction: regl.prop("direction"), + tex: regl.prop('tex'), + direction: regl.prop('direction'), height: regl.context('viewportWidth'), - width: regl.context('viewportHeight'), + width: regl.context('viewportHeight') }, - framebuffer: regl.prop("fbo") + framebuffer: regl.prop('fbo') }) // The pyramid of textures gets flattened onto the source texture. @@ -277,16 +276,16 @@ const combineBloom = regl({ frag: ` precision mediump float; varying vec2 vUV; - ${verticalBlurPyramid.map((_, index) => `uniform sampler2D tex_${index};`).join("\n")} + ${verticalBlurPyramid.map((_, index) => `uniform sampler2D tex_${index};`).join('\n')} uniform sampler2D tex; void main() { vec4 total = vec4(0.); - ${verticalBlurPyramid.map((_, index) => `total += texture2D(tex_${index}, vUV);`).join("\n")} + ${verticalBlurPyramid.map((_, index) => `total += texture2D(tex_${index}, vUV);`).join('\n')} gl_FragColor = total + texture2D(tex, vUV); } `, - uniforms: Object.assign({ tex: regl.prop("tex") }, pyramidUniforms(verticalBlurPyramid)), - framebuffer: regl.prop("fbo") + uniforms: Object.assign({ tex: regl.prop('tex') }, pyramidUniforms(verticalBlurPyramid)), + framebuffer: regl.prop('fbo') }) // Finally, the values are mapped to colors in a palette texture. @@ -320,7 +319,7 @@ const colorizeByPalette = regl({ uniforms: { ditherMagnitude: 0.05, - palette: regl.prop("palette"), + palette: regl.prop('palette'), tex: bloomedFBO, time: regl.context('time') } @@ -342,9 +341,9 @@ const setupQuad = regl({ }, uniforms: { - lastState: ({tick}) => state[tick % 2], + lastState: ({ tick }) => state[tick % 2], numColumns, - glyphTextureColumns, + glyphTextureColumns }, depth: { enable: false }, @@ -375,7 +374,7 @@ require('resl')({ }, onDone: resources => { setupQuad({}, updateRain) - regl.frame(({viewportWidth, viewportHeight}) => { + regl.frame(({ viewportWidth, viewportHeight }) => { // All the FBOs except the compute FBOs need to be sized to the window. renderedFBO.resize(viewportWidth, viewportHeight) bloomedFBO.resize(viewportWidth, viewportHeight) @@ -389,10 +388,10 @@ require('resl')({ setupQuad(() => { updateRain() renderRain(resources) - highPassPyramid.forEach(fbo => highPass({fbo, tex: renderedFBO})) - horizontalBlurPyramid.forEach((fbo, index) => blur({ fbo, tex: highPassPyramid[index], direction: [1, 0]})) - verticalBlurPyramid.forEach((fbo, index) => blur({ fbo, tex: horizontalBlurPyramid[index], direction: [0, 1]})) - combineBloom({tex: renderedFBO, fbo: bloomedFBO}) + highPassPyramid.forEach(fbo => highPass({ fbo, tex: renderedFBO })) + horizontalBlurPyramid.forEach((fbo, index) => blur({ fbo, tex: highPassPyramid[index], direction: [1, 0] })) + verticalBlurPyramid.forEach((fbo, index) => blur({ fbo, tex: horizontalBlurPyramid[index], direction: [0, 1] })) + combineBloom({ tex: renderedFBO, fbo: bloomedFBO }) colorizeByPalette(resources) }) })