mrdoob/three.js

WebGPURenderer does not detect dynamic light addition/removal

Sicndu opened this issue · 1 comments

Description

When using WebGPURenderer, dynamically adding or removing lights in the scene does not update the lighting effect on objects in the viewport. While the changes are reflected in the scene graph (verified through debugging), there is no visual update.

In contrast, WebGLRenderer handles dynamic lighting updates automatically without requiring manual intervention (e.g., setting needsUpdate = true for materials). This functionality seems to be missing in the current WebGPURenderer implementation.

I discussed this issue in the Three.js Discourse forum, and it was pointed out that this functionality is not currently present in the WebGPURenderer. It would be great to know:
• If this feature is planned for future versions.
• If there are any workarounds for achieving this with the current implementation.

Thank you for considering this issue!

Reproduction steps

1.Create a scene using WebGPURenderer.
2.Dynamically add or remove lights (e.g., DirectionalLight).
3.Observe that the scene graph updates correctly, but the visual output remains unchanged.

Code

function addLight() {
  const light = new THREE.DirectionalLight(0xddffdd, 3);
  light.name = "DynamicLight";
  light.position.set(5, 5, 5);
  scene.add(light);
}

function removeLight() {
  const light = scene.getObjectByName("DynamicLight");
  if (light) {
    scene.remove(light);
    light.dispose?.();
  }
}

// After calling addLight() or removeLight(), the scene doesn't update visually.

Live example

Here are related JSFiddle examples for testing the issue:
jsfiddle-dev WebGLRenderer (dynamic lighting works)
jsfiddle-dev WebGPURenderer (issue exists)

For comparison, the WebGL examples demonstrate expected behavior where dynamic light addition/removal is automatically detected. However, in the WebGPU examples, these updates are not reflected in the rendered scene.

Screenshots

No response

Version

r171

Device

Desktop

Browser

Chrome

OS

MacOS

Let's consider this as a bug since the current light caching does not detect the change in the scene.

Attempt to fix the issue via: #30045