diff --git a/examples/webgl_animation_skinning_ik.html b/examples/webgl_animation_skinning_ik.html index 7a2bb2cc148fc9..34ba1797e99788 100644 --- a/examples/webgl_animation_skinning_ik.html +++ b/examples/webgl_animation_skinning_ik.html @@ -77,7 +77,7 @@ renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.outputEncoding = THREE.sRGBEncoding; - renderer.physicallyCorrectLights = true; + renderer.useLegacyLights = false; document.body.appendChild( renderer.domElement ); stats = new Stats(); diff --git a/examples/webgl_lights_physical.html b/examples/webgl_lights_physical.html index 113f755a9ca423..31234ee5e5aff3 100644 --- a/examples/webgl_lights_physical.html +++ b/examples/webgl_lights_physical.html @@ -231,7 +231,7 @@ renderer = new THREE.WebGLRenderer(); - renderer.physicallyCorrectLights = true; + renderer.useLegacyLights = false; renderer.outputEncoding = THREE.sRGBEncoding; renderer.shadowMap.enabled = true; renderer.toneMapping = THREE.ReinhardToneMapping; diff --git a/examples/webgl_materials_envmaps_hdr.html b/examples/webgl_materials_envmaps_hdr.html index 9be904efe6b081..48d9d2bbfe9a0d 100644 --- a/examples/webgl_materials_envmaps_hdr.html +++ b/examples/webgl_materials_envmaps_hdr.html @@ -68,7 +68,7 @@ scene.background = new THREE.Color( 0x000000 ); renderer = new THREE.WebGLRenderer(); - renderer.physicallyCorrectLights = true; + renderer.useLegacyLights = false; renderer.toneMapping = THREE.ACESFilmicToneMapping; // diff --git a/examples/webgl_nodes_playground.html b/examples/webgl_nodes_playground.html index a0b4fb3d59aaae..b87edd0c626c7c 100644 --- a/examples/webgl_nodes_playground.html +++ b/examples/webgl_nodes_playground.html @@ -97,7 +97,7 @@ renderer.outputEncoding = THREE.sRGBEncoding; renderer.toneMapping = THREE.LinearToneMapping; renderer.toneMappingExposure = 1; - renderer.physicallyCorrectLights = true; + renderer.useLegacyLights = false; renderer.domElement.className = 'renderer'; diff --git a/examples/webgl_pmrem_test.html b/examples/webgl_pmrem_test.html index fac8cc025a3fcc..931e9c2b213375 100644 --- a/examples/webgl_pmrem_test.html +++ b/examples/webgl_pmrem_test.html @@ -55,7 +55,7 @@ renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( width, height ); renderer.outputEncoding = THREE.sRGBEncoding; - renderer.physicallyCorrectLights = true; + renderer.useLegacyLights = false; // tonemapping renderer.toneMapping = THREE.ACESFilmicToneMapping; diff --git a/examples/webxr_ar_lighting.html b/examples/webxr_ar_lighting.html index 5633a21a1989b7..6cbdd9a100205a 100644 --- a/examples/webxr_ar_lighting.html +++ b/examples/webxr_ar_lighting.html @@ -59,7 +59,7 @@ renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.outputEncoding = THREE.sRGBEncoding; - renderer.physicallyCorrectLights = true; + renderer.useLegacyLights = false; renderer.xr.enabled = true; container.appendChild( renderer.domElement ); diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 8459bb7996c5d6..603cfc280dc9f6 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -127,7 +127,7 @@ function WebGLRenderer( parameters = {} ) { // physical lights - this.physicallyCorrectLights = false; + this.useLegacyLights = true; // tone mapping @@ -869,7 +869,7 @@ function WebGLRenderer( parameters = {} ) { } ); - currentRenderState.setupLights( _this.physicallyCorrectLights ); + currentRenderState.setupLights( _this.useLegacyLights ); scene.traverse( function ( object ) { @@ -1019,7 +1019,7 @@ function WebGLRenderer( parameters = {} ) { // render scene - currentRenderState.setupLights( _this.physicallyCorrectLights ); + currentRenderState.setupLights( _this.useLegacyLights ); if ( camera.isArrayCamera ) { @@ -2251,4 +2251,28 @@ function WebGLRenderer( parameters = {} ) { } +Object.defineProperties( WebGLRenderer.prototype, { + + // @deprecated since r150 + + physicallyCorrectLights: { + + get: function () { + + console.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' ); + return ! this.useLegacyLights; + + }, + + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' ); + this.useLegacyLights = ! value; + + } + + } + +} ); + export { WebGLRenderer }; diff --git a/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js b/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js index 5b7979d361c195..36624fe26ac927 100644 --- a/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +++ b/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js @@ -50,7 +50,17 @@ vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { - #if defined ( PHYSICALLY_CORRECT_LIGHTS ) + #if defined ( LEGACY_LIGHTS ) + + if ( cutoffDistance > 0.0 && decayExponent > 0.0 ) { + + return pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent ); + + } + + return 1.0; + + #else // based upon Frostbite 3 Moving to Physically-based Rendering // page 32, equation 26: E[window1] @@ -65,16 +75,6 @@ float getDistanceAttenuation( const in float lightDistance, const in float cutof return distanceFalloff; - #else - - if ( cutoffDistance > 0.0 && decayExponent > 0.0 ) { - - return pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent ); - - } - - return 1.0; - #endif } diff --git a/src/renderers/webgl/WebGLLights.js b/src/renderers/webgl/WebGLLights.js index 2f0df97ae7381c..de48b309fee46e 100644 --- a/src/renderers/webgl/WebGLLights.js +++ b/src/renderers/webgl/WebGLLights.js @@ -202,7 +202,7 @@ function WebGLLights( extensions, capabilities ) { const matrix4 = new Matrix4(); const matrix42 = new Matrix4(); - function setup( lights, physicallyCorrectLights ) { + function setup( lights, useLegacyLights ) { let r = 0, g = 0, b = 0; @@ -224,7 +224,7 @@ function WebGLLights( extensions, capabilities ) { lights.sort( shadowCastingAndTexturingLightsFirst ); // artist-friendly light intensity scaling factor - const scaleFactor = ( physicallyCorrectLights !== true ) ? Math.PI : 1; + const scaleFactor = ( useLegacyLights === true ) ? Math.PI : 1; for ( let i = 0, l = lights.length; i < l; i ++ ) { diff --git a/src/renderers/webgl/WebGLMaterials.js b/src/renderers/webgl/WebGLMaterials.js index 2f249bb1d0afeb..52042186e77596 100644 --- a/src/renderers/webgl/WebGLMaterials.js +++ b/src/renderers/webgl/WebGLMaterials.js @@ -189,7 +189,7 @@ function WebGLMaterials( renderer, properties ) { uniforms.lightMap.value = material.lightMap; // artist-friendly light intensity scaling factor - const scaleFactor = ( renderer.physicallyCorrectLights !== true ) ? Math.PI : 1; + const scaleFactor = ( renderer.useLegacyLights === true ) ? Math.PI : 1; uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor; diff --git a/src/renderers/webgl/WebGLProgram.js b/src/renderers/webgl/WebGLProgram.js index 99fc10e4fdfd58..55468993fad8b1 100644 --- a/src/renderers/webgl/WebGLProgram.js +++ b/src/renderers/webgl/WebGLProgram.js @@ -673,7 +673,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', - parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', + parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', diff --git a/src/renderers/webgl/WebGLPrograms.js b/src/renderers/webgl/WebGLPrograms.js index 3ab64b4e3706d9..aefd3ec79a4338 100644 --- a/src/renderers/webgl/WebGLPrograms.js +++ b/src/renderers/webgl/WebGLPrograms.js @@ -217,7 +217,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities shadowMapType: renderer.shadowMap.type, toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, - physicallyCorrectLights: renderer.physicallyCorrectLights, + useLegacyLights: renderer.useLegacyLights, premultipliedAlpha: material.premultipliedAlpha, @@ -410,7 +410,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities _programLayers.enable( 8 ); if ( parameters.shadowMapEnabled ) _programLayers.enable( 9 ); - if ( parameters.physicallyCorrectLights ) + if ( parameters.useLegacyLights ) _programLayers.enable( 10 ); if ( parameters.doubleSided ) _programLayers.enable( 11 ); diff --git a/src/renderers/webgl/WebGLRenderStates.js b/src/renderers/webgl/WebGLRenderStates.js index a04199744aabfc..dec59885fa115e 100644 --- a/src/renderers/webgl/WebGLRenderStates.js +++ b/src/renderers/webgl/WebGLRenderStates.js @@ -26,9 +26,9 @@ function WebGLRenderState( extensions, capabilities ) { } - function setupLights( physicallyCorrectLights ) { + function setupLights( useLegacyLights ) { - lights.setup( lightsArray, physicallyCorrectLights ); + lights.setup( lightsArray, useLegacyLights ); }