From 779f1e439ac3b31f766cb554a716b5d608243bab Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Wed, 25 Dec 2019 06:45:40 +0100 Subject: [PATCH] Implemented envMapBlurriness --- examples/webgl_materials_car.html | 2 ++ examples/webgl_materials_physical_clearcoat.html | 2 ++ src/renderers/WebGLRenderer.js | 1 + .../shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js | 3 ++- src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js | 4 ++-- src/renderers/shaders/UniformsLib.js | 1 + src/renderers/webgl/WebGLBackground.js | 1 + src/textures/Texture.js | 2 ++ 8 files changed, 13 insertions(+), 3 deletions(-) diff --git a/examples/webgl_materials_car.html b/examples/webgl_materials_car.html index 1f5594f37c..03ac8fb95a 100644 --- a/examples/webgl_materials_car.html +++ b/examples/webgl_materials_car.html @@ -70,6 +70,8 @@ var envMap = pmremGenerator.fromEquirectangular( texture ).texture; pmremGenerator.dispose(); + envMap.blurriness = 0.15; + scene.background = envMap; scene.environment = envMap; diff --git a/examples/webgl_materials_physical_clearcoat.html b/examples/webgl_materials_physical_clearcoat.html index f5827bf460..8ab6b4960a 100644 --- a/examples/webgl_materials_physical_clearcoat.html +++ b/examples/webgl_materials_physical_clearcoat.html @@ -145,6 +145,8 @@ // + hdrCubeRenderTarget.texture.blurriness = 0.2; + scene.background = hdrCubeRenderTarget.texture; scene.environment = hdrCubeRenderTarget.texture; diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 76f3496a6a..f0d1dbba96 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -2089,6 +2089,7 @@ function WebGLRenderer( parameters ) { if ( envMap ) { uniforms.envMap.value = envMap; + uniforms.envMapBlurriness.value = envMap.blurriness; // don't flip CubeTexture envMaps, flip everything else: // WebGLRenderTargetCube will be flipped for backwards compatibility 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 e57198dd9a..f732150713 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 envMapBlurriness; uniform float envMapIntensity; uniform float flipEnvMap; uniform int maxMipLevel; @@ -10,6 +11,6 @@ export default /* glsl */` #else uniform sampler2D envMap; #endif - + #endif `; diff --git a/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js b/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js index db216edb81..162ffc2fa1 100644 --- a/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +++ b/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js @@ -4,7 +4,7 @@ export default /* glsl */` #ifdef ENV_WORLDPOS vec3 cameraToFrag; - + if ( isOrthographic ) { cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); @@ -40,7 +40,7 @@ export default /* glsl */` #elif defined( ENVMAP_TYPE_CUBE_UV ) - vec4 envColor = textureCubeUV( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ), 0.0 ); + vec4 envColor = textureCubeUV( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ), envMapBlurriness ); #elif defined( ENVMAP_TYPE_EQUIREC ) diff --git a/src/renderers/shaders/UniformsLib.js b/src/renderers/shaders/UniformsLib.js index 9c0651d3c2..6944c2a774 100644 --- a/src/renderers/shaders/UniformsLib.js +++ b/src/renderers/shaders/UniformsLib.js @@ -30,6 +30,7 @@ var UniformsLib = { envmap: { envMap: { value: null }, + envMapBlurriness: { value: 0 }, flipEnvMap: { value: - 1 }, reflectivity: { value: 1.0 }, refractionRatio: { value: 0.98 }, diff --git a/src/renderers/webgl/WebGLBackground.js b/src/renderers/webgl/WebGLBackground.js index 8020a3fdb5..6b6c0fbae1 100644 --- a/src/renderers/webgl/WebGLBackground.js +++ b/src/renderers/webgl/WebGLBackground.js @@ -105,6 +105,7 @@ function WebGLBackground( renderer, state, objects, premultipliedAlpha ) { var texture = background.isWebGLRenderTargetCube ? background.texture : background; boxMesh.material.uniforms.envMap.value = texture; + boxMesh.material.uniforms.envMapBlurriness.value = texture.blurriness; boxMesh.material.uniforms.flipEnvMap.value = texture.isCubeTexture ? - 1 : 1; if ( currentBackground !== background || diff --git a/src/textures/Texture.js b/src/textures/Texture.js index 6f816e6a59..3956c3e747 100644 --- a/src/textures/Texture.js +++ b/src/textures/Texture.js @@ -61,6 +61,8 @@ function Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, ty this.flipY = true; this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) + this.blurriness = 0; + // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. // // Also changing the encoding after already used by a Material will not automatically make the Material -- GitLab