From debad44f63c481b53004619674cb7cd349daa242 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Wed, 10 Jun 2026 12:33:01 +0200 Subject: [PATCH] NodeMaterialObserver: Fix environment rotation and intensity checks. (#33764) --- .../nodes/manager/NodeMaterialObserver.js | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/materials/nodes/manager/NodeMaterialObserver.js b/src/materials/nodes/manager/NodeMaterialObserver.js index c9ed552af35e9b..1f4c2546c937c7 100644 --- a/src/materials/nodes/manager/NodeMaterialObserver.js +++ b/src/materials/nodes/manager/NodeMaterialObserver.js @@ -22,6 +22,7 @@ const refreshUniforms = [ 'emissiveMap', 'envMap', 'envMapIntensity', + 'envMapRotation', 'gradientMap', 'ior', 'iridescence', @@ -216,6 +217,11 @@ class NodeMaterialObserver { } + const { environmentIntensity, environmentRotation } = renderObject.scene; + + data.environmentIntensity = environmentIntensity; + data.environmentRotation = environmentRotation.clone(); + data.lights = this.getLightsData( renderObject.lightsNode.getLights(), [] ); this.renderObjects.set( renderObject, data ); @@ -363,7 +369,7 @@ class NodeMaterialObserver { * @param {RenderObject} renderObject - The render object. * @param {Array} lightsData - The current material lights. * @param {number} renderId - The current render ID. - * @return {boolean} Whether the given render object has changed its state or not. + * @return {boolean} Whether the given render object is equal to its cached state or not. */ equals( renderObject, lightsData, renderId ) { @@ -600,6 +606,24 @@ class NodeMaterialObserver { } + // scene + + const scene = renderObject.scene; + + if ( scene.environment !== null && material.envMap === null ) { + + if ( renderObjectData.environmentIntensity !== scene.environmentIntensity || + renderObjectData.environmentRotation.equals( scene.environmentRotation ) === false ) { + + renderObjectData.environmentIntensity = scene.environmentIntensity; + renderObjectData.environmentRotation.copy( scene.environmentRotation ); + + return false; + + } + + } + // center if ( renderObjectData.center ) { @@ -608,7 +632,7 @@ class NodeMaterialObserver { renderObjectData.center.copy( object.center ); - return true; + return false; }