From a404744026e5ca66b09fded995c5a8be43b16e72 Mon Sep 17 00:00:00 2001 From: Mugen87 Date: Thu, 6 Oct 2022 20:44:44 +0200 Subject: [PATCH] Scene: Add background blur with PMREM. --- docs/api/en/scenes/Scene.html | 5 +++++ docs/api/zh/scenes/Scene.html | 5 +++++ examples/screenshots/webgl_tonemapping.jpg | Bin 39382 -> 27552 bytes examples/webgl_tonemapping.html | 13 ++++++++++++- src/loaders/ObjectLoader.js | 2 ++ src/renderers/WebGLRenderer.js | 2 +- .../envmap_common_pars_fragment.glsl.js | 1 + .../ShaderChunk/envmap_fragment.glsl.js | 2 +- src/renderers/shaders/UniformsLib.js | 3 ++- src/renderers/webgl/WebGLBackground.js | 6 ++++-- src/scenes/Scene.js | 5 +++++ 11 files changed, 38 insertions(+), 6 deletions(-) diff --git a/docs/api/en/scenes/Scene.html b/docs/api/en/scenes/Scene.html index 6a0cca394f4408..b00fc8f50a3c99 100644 --- a/docs/api/en/scenes/Scene.html +++ b/docs/api/en/scenes/Scene.html @@ -30,6 +30,11 @@

[property:Object background]

Can be set to a [page:Color] which sets the clear color, a [page:Texture] covering the canvas, a cubemap as a [page:CubeTexture] or an equirectangular as a [page:Texture] . Default is null.

+

[property:Float backgroundBlurriness]

+

+ Sets the blurriness of the background. Only influences environment maps assigned to [page:Scene.background]. Valid input is a float between *0* and *1*. Default is *0*. +

+

[property:Texture environment]

If not null, this texture is set as the environment map for all physical materials in the scene. diff --git a/docs/api/zh/scenes/Scene.html b/docs/api/zh/scenes/Scene.html index ba05623bc5d8cb..b98c97efa96d49 100644 --- a/docs/api/zh/scenes/Scene.html +++ b/docs/api/zh/scenes/Scene.html @@ -32,6 +32,11 @@

[property:Object background]

或是 a cubemap as a [page:CubeTexture] or an equirectangular as a [page:Texture]。默认值为null。

+

[property:Float backgroundBlurriness]

+

+ Sets the blurriness of the background. Only influences environment maps assigned to [page:Scene.background]. Valid input is a float between *0* and *1*. Default is *0*. +

+

[property:Texture environment]

若该值不为null,则该纹理贴图将会被设为场景中所有物理材质的环境贴图。 diff --git a/examples/screenshots/webgl_tonemapping.jpg b/examples/screenshots/webgl_tonemapping.jpg index 1fc0d52030221f3be90bf5ef1b7a3afc1099d8ef..49ed1ef5d51278e020fb4a6d0a46b4b4e3f6f1e1 100644 GIT binary patch delta 27069 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 delta 38973 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 diff --git a/examples/webgl_tonemapping.html b/examples/webgl_tonemapping.html index 9616fa353fbec0..f719061147f0a7 100644 --- a/examples/webgl_tonemapping.html +++ b/examples/webgl_tonemapping.html @@ -42,7 +42,8 @@ const params = { exposure: 1.0, - toneMapping: 'ACESFilmic' + toneMapping: 'ACESFilmic', + blurriness: 1 }; const toneMappingOptions = { @@ -86,6 +87,7 @@ ); scene = new THREE.Scene(); + scene.backgroundBlurriness = 1; camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.25, 20 ); camera.position.set( - 1.8, 0.6, 2.7 ); @@ -136,6 +138,15 @@ } ); + gui.add( params, 'blurriness', 0, 1 ) + + .onChange( function ( value ) { + + scene.backgroundBlurriness = value; + render(); + + } ); + updateGUI(); gui.open(); diff --git a/src/loaders/ObjectLoader.js b/src/loaders/ObjectLoader.js index 6883f98590815e..f07a0c330c10ee 100644 --- a/src/loaders/ObjectLoader.js +++ b/src/loaders/ObjectLoader.js @@ -780,6 +780,8 @@ class ObjectLoader extends Loader { } + if ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness; + break; case 'PerspectiveCamera': diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index e37f3f454babcc..11a50e98a6a513 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -337,7 +337,7 @@ function WebGLRenderer( parameters = {} ) { materials = new WebGLMaterials( _this, properties ); renderLists = new WebGLRenderLists(); renderStates = new WebGLRenderStates( extensions, capabilities ); - background = new WebGLBackground( _this, cubemaps, state, objects, _alpha, _premultipliedAlpha ); + background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, _premultipliedAlpha ); shadowMap = new WebGLShadowMap( _this, objects, capabilities ); uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state ); diff --git a/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js index cbe76d21f8c12e..6065545b21e7e3 100644 --- a/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js @@ -1,6 +1,7 @@ export default /* glsl */` #ifdef USE_ENVMAP + uniform float backgroundBlurriness; uniform float envMapIntensity; uniform float flipEnvMap; diff --git a/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js index 79454ff567aab8..06307c6be34d93 100644 --- a/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js @@ -40,7 +40,7 @@ export default /* glsl */` #elif defined( ENVMAP_TYPE_CUBE_UV ) - vec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 ); + vec4 envColor = textureCubeUV( envMap, reflectVec, backgroundBlurriness ); #else diff --git a/src/renderers/shaders/UniformsLib.js b/src/renderers/shaders/UniformsLib.js index 203fbf1792f658..94ba165ef796a5 100644 --- a/src/renderers/shaders/UniformsLib.js +++ b/src/renderers/shaders/UniformsLib.js @@ -34,7 +34,8 @@ const UniformsLib = { flipEnvMap: { value: - 1 }, reflectivity: { value: 1.0 }, // basic, lambert, phong ior: { value: 1.5 }, // physical - refractionRatio: { value: 0.98 } // basic, lambert, phong + refractionRatio: { value: 0.98 }, // basic, lambert, phong + backgroundBlurriness: { value: 0 } // background }, diff --git a/src/renderers/webgl/WebGLBackground.js b/src/renderers/webgl/WebGLBackground.js index 083bc1b5801276..673b6900211ba5 100644 --- a/src/renderers/webgl/WebGLBackground.js +++ b/src/renderers/webgl/WebGLBackground.js @@ -7,7 +7,7 @@ import { Mesh } from '../../objects/Mesh.js'; import { ShaderLib } from '../shaders/ShaderLib.js'; import { cloneUniforms } from '../shaders/UniformsUtils.js'; -function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipliedAlpha ) { +function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) { const clearColor = new Color( 0x000000 ); let clearAlpha = alpha === true ? 0 : 1; @@ -26,7 +26,8 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli if ( background && background.isTexture ) { - background = cubemaps.get( background ); + const usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background + background = ( usePMREM ? cubeuvmaps : cubemaps ).get( background ); } @@ -103,6 +104,7 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli boxMesh.material.uniforms.envMap.value = background; boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1; + boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness; if ( currentBackground !== background || currentBackgroundVersion !== background.version || diff --git a/src/scenes/Scene.js b/src/scenes/Scene.js index 756f25d3008947..984f952832acf5 100644 --- a/src/scenes/Scene.js +++ b/src/scenes/Scene.js @@ -14,6 +14,8 @@ class Scene extends Object3D { this.environment = null; this.fog = null; + this.backgroundBlurriness = 0; + this.overrideMaterial = null; if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { @@ -32,6 +34,8 @@ class Scene extends Object3D { if ( source.environment !== null ) this.environment = source.environment.clone(); if ( source.fog !== null ) this.fog = source.fog.clone(); + this.backgroundBlurriness = source.backgroundBlurriness; + if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); this.matrixAutoUpdate = source.matrixAutoUpdate; @@ -45,6 +49,7 @@ class Scene extends Object3D { const data = super.toJSON( meta ); if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); + if ( this.backgroundBlurriness > 0 ) data.backgroundBlurriness = this.backgroundBlurriness; return data;