From 8721b90d843be4ddef1d4a087d615bd01e7464a2 Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Fri, 12 Oct 2018 02:13:57 -0400 Subject: [PATCH] :zap: Fast moving clouds with transparency and shadows --- app/assets/textures/clouds.jpg | Bin 0 -> 18514 bytes app/assets/textures/clouds.png | Bin 0 -> 84139 bytes app/js/components/Bean.js | 8 ++- app/js/components/Clouds.js | 43 ++++++++++++++ app/js/components/Light.js | 6 +- app/js/core/Loop.js | 4 +- app/js/core/Webgl.js | 26 +++------ app/js/shaders/PCSS-frag.glsl | 84 --------------------------- app/js/shaders/depthShader-frag.glsl | 16 +++++ app/js/shaders/depthShader-vert.glsl | 6 ++ app/main.js | 6 +- 11 files changed, 88 insertions(+), 111 deletions(-) create mode 100644 app/assets/textures/clouds.jpg create mode 100644 app/assets/textures/clouds.png create mode 100644 app/js/components/Clouds.js delete mode 100644 app/js/shaders/PCSS-frag.glsl create mode 100644 app/js/shaders/depthShader-frag.glsl create mode 100644 app/js/shaders/depthShader-vert.glsl diff --git a/app/assets/textures/clouds.jpg b/app/assets/textures/clouds.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3698e847ebd44f60965c9a9fdffc1a3bf49b979 GIT binary patch literal 18514 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�KDw@X3y@L3OmWXkjs; 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 literal 0 HcmV?d00001 diff --git a/app/assets/textures/clouds.png b/app/assets/textures/clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..d1202e9d7f931020c136a906c8a08f51c50e9799 GIT binary patch literal 84139 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�UuR%_{zO<{7lC6qr8V`cOe}zphfS8+yy; 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Ÿ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 0) { listener = this._listeners[i]; if (listener) { - listener.apply(this, null); + listener.apply(this, [this._time]); } } this._idRAF = requestAnimationFrame(this._binds.update); diff --git a/app/js/core/Webgl.js b/app/js/core/Webgl.js index be664ca..4ddc4ac 100644 --- a/app/js/core/Webgl.js +++ b/app/js/core/Webgl.js @@ -10,30 +10,15 @@ export default class Webgl { this.camera = new THREE.PerspectiveCamera(50, w / h, 0.1, 1000); this.camera.position.z = 10; - // // overwrite shadowmap code - // let shader = THREE.ShaderChunk.shadowmap_pars_fragment; - // shader = shader.replace( - // '#ifdef USE_SHADOWMAP', - // '#ifdef USE_SHADOWMAP\n' + PCSS - // ); - // shader = shader.replace( - // '#if defined( SHADOWMAP_TYPE_PCF )', - // ` - // return PCSS( shadowMap, shadowCoord ); - - // #if defined( SHADOWMAP_TYPE_PCF )` - // ); - // THREE.ShaderChunk.shadowmap_pars_fragment = shader; - this._renderer = new THREE.WebGLRenderer({ antialias: true, }); - this._renderer.setPixelRatio(window.devicePixelRatio); this._renderer.gammaInput = true; this._renderer.gammaOutput = true; this._renderer.shadowMap.enabled = true; - this._renderer.shadowMap.type = THREE.BasicShadowMap; + // this._renderer.shadowMap.type = THREE.BasicShadowMap; + this._renderer.shadowMap.type = THREE.PCFSoftShadowMap; this.dom = this._renderer.domElement; @@ -91,9 +76,12 @@ export default class Webgl { this.camera.aspect = w / h; this.camera.updateProjectionMatrix(); - this._renderer.setSize(w, h); if (this.usePostprocessing) { - this._composer.setSize(w, h); + this._renderer.setSize(w, h); + this._renderer.setPixelRatio(window.devicePixelRatio / 2); + this._composer.setSize(w/2, h/2); + } else { + this._renderer.setSize(w, h); } } } diff --git a/app/js/shaders/PCSS-frag.glsl b/app/js/shaders/PCSS-frag.glsl deleted file mode 100644 index aa8e0bb..0000000 --- a/app/js/shaders/PCSS-frag.glsl +++ /dev/null @@ -1,84 +0,0 @@ -#define LIGHT_WORLD_SIZE 0.005 -#define LIGHT_FRUSTUM_WIDTH 3.75 -#define LIGHT_SIZE_UV (LIGHT_WORLD_SIZE / LIGHT_FRUSTUM_WIDTH) -#define NEAR_PLANE 9.5 - -#define NUM_SAMPLES 17 -#define NUM_RINGS 11 -#define BLOCKER_SEARCH_NUM_SAMPLES NUM_SAMPLES -#define PCF_NUM_SAMPLES NUM_SAMPLES - -vec2 poissonDisk[NUM_SAMPLES]; - -void initPoissonSamples( const in vec2 randomSeed ) { - float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES ); - float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES ); - - // jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/ - float angle = rand( randomSeed ) * PI2; - float radius = INV_NUM_SAMPLES; - float radiusStep = radius; - - for( int i = 0; i < NUM_SAMPLES; i ++ ) { - poissonDisk[i] = vec2( cos( angle ), sin( angle ) ) * pow( radius, 0.75 ); - radius += radiusStep; - angle += ANGLE_STEP; - } -} - -float penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation - return (zReceiver - zBlocker) / zBlocker; -} - -float findBlocker( sampler2D shadowMap, const in vec2 uv, const in float zReceiver ) { - // This uses similar triangles to compute what - // area of the shadow map we should search - float searchRadius = LIGHT_SIZE_UV * ( zReceiver - NEAR_PLANE ) / zReceiver; - float blockerDepthSum = 0.0; - int numBlockers = 0; - - for( int i = 0; i < BLOCKER_SEARCH_NUM_SAMPLES; i++ ) { - float shadowMapDepth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[i] * searchRadius)); - if ( shadowMapDepth < zReceiver ) { - blockerDepthSum += shadowMapDepth; - numBlockers ++; - } - } - - if( numBlockers == 0 ) return -1.0; - - return blockerDepthSum / float( numBlockers ); -} - -float PCF_Filter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius ) { - float sum = 0.0; - for( int i = 0; i < PCF_NUM_SAMPLES; i ++ ) { - float depth = unpackRGBAToDepth( texture2D( shadowMap, uv + poissonDisk[ i ] * filterRadius ) ); - if( zReceiver <= depth ) sum += 1.0; - } - for( int i = 0; i < PCF_NUM_SAMPLES; i ++ ) { - float depth = unpackRGBAToDepth( texture2D( shadowMap, uv + -poissonDisk[ i ].yx * filterRadius ) ); - if( zReceiver <= depth ) sum += 1.0; - } - return sum / ( 2.0 * float( PCF_NUM_SAMPLES ) ); -} - -float PCSS ( sampler2D shadowMap, vec4 coords ) { - vec2 uv = coords.xy; - float zReceiver = coords.z; // Assumed to be eye-space z in this code - - initPoissonSamples( uv ); - // STEP 1: blocker search - float avgBlockerDepth = findBlocker( shadowMap, uv, zReceiver ); - - //There are no occluders so early out (this saves filtering) - if( avgBlockerDepth == -1.0 ) return 1.0; - - // STEP 2: penumbra size - float penumbraRatio = penumbraSize( zReceiver, avgBlockerDepth ); - float filterRadius = penumbraRatio * LIGHT_SIZE_UV * NEAR_PLANE / zReceiver; - - // STEP 3: filtering - //return avgBlockerDepth; - return PCF_Filter( shadowMap, uv, zReceiver, filterRadius ); -} diff --git a/app/js/shaders/depthShader-frag.glsl b/app/js/shaders/depthShader-frag.glsl new file mode 100644 index 0000000..6313683 --- /dev/null +++ b/app/js/shaders/depthShader-frag.glsl @@ -0,0 +1,16 @@ +uniform sampler2D texture; +varying vec2 vUV; + +vec4 pack_depth(const in float depth) { + const vec4 bit_shift = vec4(256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0); + const vec4 bit_mask = vec4(0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0); + vec4 res = fract(depth * bit_shift); + res -= res.xxyz * bit_mask; + return res; +} + +void main() { + vec4 pixel = texture2D(texture, vUV); + if (pixel.a < 0.5) discard; + gl_FragData[0] = pack_depth(gl_FragCoord.z); +} diff --git a/app/js/shaders/depthShader-vert.glsl b/app/js/shaders/depthShader-vert.glsl new file mode 100644 index 0000000..c9e3c75 --- /dev/null +++ b/app/js/shaders/depthShader-vert.glsl @@ -0,0 +1,6 @@ +varying vec2 vUV; + +void main() { + vUV = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); +} diff --git a/app/main.js b/app/main.js index 1fa0f13..eed92c3 100644 --- a/app/main.js +++ b/app/main.js @@ -3,8 +3,8 @@ import loop from 'js/core/Loop'; import props from 'js/core/props'; import Bean from 'js/components/Bean'; import Ground from 'js/components/Ground'; +import Clouds from 'js/components/Clouds'; import Light from 'js/components/Light'; -import { createLight, createHemisphereLight } from 'js/components/Light'; // ## // INIT @@ -21,6 +21,10 @@ gui.close(); webgl.add(new Ground()); +const clouds = new Clouds(); +webgl.add(clouds); +loop.add(clouds.onUpdate); + const light = new Light(); webgl.add(light); loop.add(light.onUpdate);