Control Reflection Intensity with envMapIntensity in Three.js

In Three.js, achieving realistic 3D renders often depends on how materials interact with their surrounding environment. This article explains how to use the envMapIntensity property to control the brightness and intensity of ambient reflections on a material. You will learn which materials support this property, how to implement it in your code, and how to adjust it dynamically to achieve the perfect balance of environmental lighting in your 3D scenes.

What is envMapIntensity?

The envMapIntensity property is a scalar value that multiplies the effect of the environment map (envMap) on a physical or standard material. It allows you to brighten or dim the ambient reflections on a specific object’s surface without modifying the global scene lighting or the environment map texture itself.

Supported Materials

The envMapIntensity property is available on PBR (Physically-Based Rendering) materials in Three.js:

For reflections to be visible, your scene must have an active environment map assigned either to the individual material (material.envMap) or globally to the scene (scene.environment). Additionally, the material’s roughness should be relatively low, and its metalness relatively high to clearly display the reflections.

Implementing envMapIntensity in Code

You can set the reflection intensity directly during material instantiation or update it dynamically later.

Example: Setting Intensity on Creation

import * as THREE from 'three';

// Create a highly reflective, metallic material
const material = new THREE.MeshStandardMaterial({
    color: 0xffffff,
    metalness: 1.0,    // Fully metallic for clear reflections
    roughness: 0.1,    // Smooth surface
    envMapIntensity: 1.5 // Boosts the reflection brightness by 50%
});

Example: Updating Intensity Dynamically

If you need to change the reflection intensity in response to user input (such as a GUI slider) or changes in the game state, you can update the property directly on the material instance:

// Increase reflection intensity in the animation loop or an event handler
material.envMapIntensity = 2.5;

// If the material has already been rendered, you may need to flag it for an update
material.needsUpdate = true;

Why Use envMapIntensity?

Using envMapIntensity provides fine-grained artistic control over individual objects in a scene. Instead of changing the environment map for the entire scene—which would affect all objects—you can use this property to make specific assets stand out. For example, you can increase the intensity on a polished chrome car bumper to make it pop, while keeping a lower intensity on surrounding metallic objects to maintain visual balance.