From 0b5065bc972902cfe12d8d472e192b4b7f73568e Mon Sep 17 00:00:00 2001 From: Joshua Seigler Date: Fri, 12 Oct 2018 14:03:43 -0400 Subject: [PATCH] :zap: Dither clouds --- app/assets/textures/clouds-dithered.png | Bin 0 -> 17051 bytes app/assets/textures/clouds.jpg | Bin 18514 -> 0 bytes app/js/components/Clouds.js | 17 ++++++++++++----- app/js/components/Light.js | 4 ++-- app/js/core/Webgl.js | 2 -- app/js/core/props.js | 2 +- app/main.js | 2 +- 7 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 app/assets/textures/clouds-dithered.png delete mode 100644 app/assets/textures/clouds.jpg diff --git a/app/assets/textures/clouds-dithered.png b/app/assets/textures/clouds-dithered.png new file mode 100644 index 0000000000000000000000000000000000000000..7baaf25c98b8e7df2a4dd5a6eec510329187ee64 GIT binary patch literal 17051 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�KDw@X3y@L3OmWXkjs; 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 diff --git a/app/js/components/Clouds.js b/app/js/components/Clouds.js index c7eda7a..4b1b664 100644 --- a/app/js/components/Clouds.js +++ b/app/js/components/Clouds.js @@ -11,6 +11,11 @@ class Clouds extends THREE.Object3D { this.cloudTexture.wrapS = this.cloudTexture.wrapT = THREE.RepeatWrapping; this.cloudTexture.repeat.set(3, 3); + this.cloudShadow = loader.load('textures/clouds-dithered.png'); + this.cloudShadow.wrapS = this.cloudShadow.wrapT = THREE.RepeatWrapping; + this.cloudShadow.magFilter = THREE.NearestFilter; + this.cloudShadow.repeat.set(3, 3); + this.material = new THREE.MeshBasicMaterial({ map: this.cloudTexture, transparent: true, @@ -21,12 +26,12 @@ class Clouds extends THREE.Object3D { mesh.customDepthMaterial = new THREE.MeshDepthMaterial({ depthPacking: THREE.RGBADepthPacking, - map: this.cloudTexture, - alphaTest: 0.3 + map: this.cloudShadow, + alphaTest: 0.25 }); mesh.rotation.x = -Math.PI/2; - mesh.position.y = 10; + mesh.position.y = 15; mesh.castShadow = true; this.add(mesh); @@ -35,8 +40,10 @@ class Clouds extends THREE.Object3D { } onUpdate(time) { - this.cloudTexture.offset.x = (time / 1000) % 200; - this.cloudTexture.offset.y = (time / 5000) % 400; + this.cloudTexture.offset.x = (props.cloudSpeed / 1000 * time) % 200; + this.cloudTexture.offset.y = (props.cloudSpeed / 5000 * time) % 400; + this.cloudShadow.offset.x = (props.cloudSpeed / 1000 * time) % 200; + this.cloudShadow.offset.y = (props.cloudSpeed / 5000 * time) % 400; } } diff --git a/app/js/components/Light.js b/app/js/components/Light.js index 791592d..be72129 100644 --- a/app/js/components/Light.js +++ b/app/js/components/Light.js @@ -10,8 +10,8 @@ class Lighting extends THREE.Object3D { dirLight.position.multiplyScalar( 20 ); dirLight.castShadow = true; - dirLight.shadow.mapSize.width = 1024; - dirLight.shadow.mapSize.height = 1024; + dirLight.shadow.mapSize.width = 2048; + dirLight.shadow.mapSize.height = 2048; dirLight.shadow.radius = 2; let d = 100; diff --git a/app/js/core/Webgl.js b/app/js/core/Webgl.js index 4ddc4ac..571b142 100644 --- a/app/js/core/Webgl.js +++ b/app/js/core/Webgl.js @@ -46,8 +46,6 @@ export default class Webgl { initPostprocessing() { if (!this.usePostprocessing) return; this._composer = new THREE.EffectComposer(this._renderer); - let ssaoShader = THREE.SSAOShader; - ssaoShader.uniforms.onlyAO = true; this._passes.forEach((effect, i) => { if (i == this._passes.length - 1) { effect.renderToScreen = true; diff --git a/app/js/core/props.js b/app/js/core/props.js index d750f2b..ad0235a 100644 --- a/app/js/core/props.js +++ b/app/js/core/props.js @@ -1,5 +1,5 @@ const props = { - rotation: 0.01, + cloudSpeed: 0.5, }; module.exports = props; diff --git a/app/main.js b/app/main.js index eed92c3..2dded4d 100644 --- a/app/main.js +++ b/app/main.js @@ -16,7 +16,7 @@ loop.add(webgl.onUpdate); // ## // GUI const gui = new dat.GUI(); -gui.add(props, 'rotation', 0.01, 1); +gui.add(props, 'cloudSpeed', -1, 1); gui.close(); webgl.add(new Ground());