How to Use SpotLightHelper in Three.js
In Three.js, visualizing the direction and cone angle of a spotlight
is crucial for precise scene lighting. This guide provides a
straightforward walkthrough on how to implement and update the
SpotLightHelper utility, allowing you to easily debug and
position spotlights in your 3D scenes.
Step 1: Create and Position your SpotLight
Before adding a helper, you need to set up a standard
SpotLight and add it to your scene. You also need a target
for the spotlight to point toward.
import * as THREE from 'three';
// Create the spotlight
const spotLight = new THREE.SpotLight(0xffffff, 5);
spotLight.position.set(10, 20, 10);
spotLight.angle = Math.PI / 6; // Cone width
scene.add(spotLight);
// Set up a target for the spotlight
const targetObject = new THREE.Object3D();
targetObject.position.set(0, 0, 0);
scene.add(targetObject);
spotLight.target = targetObject;Step 2: Add the SpotLightHelper
The SpotLightHelper takes the target spotlight as its
primary argument. You can optionally pass a custom color as the second
argument to make the wireframe cone stand out in your scene.
// Create the helper (will use the spotlight's color by default)
const spotLightHelper = new THREE.SpotLightHelper(spotLight);
scene.add(spotLightHelper);
// Optional: Create the helper with a specific color (e.g., red)
// const spotLightHelper = new THREE.SpotLightHelper(spotLight, 0xff0000);Step 3: Update the Helper in the Animation Loop
If your spotlight, its target, or its properties (like
angle or distance) change during runtime, the
helper will not automatically adjust. You must call its
.update() method inside your animation loop to keep the
visualization accurate.
function animate() {
requestAnimationFrame(animate);
// Rotate or move spotlight target if needed
targetObject.position.x = Math.sin(Date.now() * 0.001) * 5;
// Crucial: Update the helper to match the new light position/direction
spotLightHelper.update();
renderer.render(scene, camera);
}
animate();Customization and Cleanup
To temporarily hide the wireframe cone without removing it from the
scene, toggle its visible property:
spotLightHelper.visible = false; // Hides the helperWhen you no longer need the helper (for example, when transitioning from development to production), ensure you dispose of its geometry and materials to prevent memory leaks:
scene.remove(spotLightHelper);
spotLightHelper.dispose();