05 Capítulo 5 · Lección 8

Luces

Redactado por
Author Sebastian V.
Fecha de publicación

10/02/2026

Tiempo de lectura

8 min

Tema

Three.js

Hágase la luz

La luz es lo que da volumen al 3D. Sin sombras ni luces, el cerebro humano no puede interpretar la profundidad. En Three.js, añadir luces es similar a posicionar focos en un estudio fotográfico. Tienes diferentes tipos para diferentes necesidades.

Los Cuatro Tipos Principales

  • AmbientLight (Luz de Relleno):
    Es una luz que viene de todas direcciones al mismo tiempo. No tiene fuente ni dirección, por lo que NO proyecta sombras. Se usa para que las partes "oscuras" de tu objeto no queden 100% negras, sino tenuemente visibles.
  • DirectionalLight (El Sol):
    Es una luz que viene desde infinitamente lejos (como el sol). Todos sus rayos son paralelos. Es la luz principal para generar sombras duras e iluminar escenarios enteros de forma uniforme.
  • PointLight (La Bombilla):
    Es una luz que nace de un punto específico y se expande en todas direcciones (como una vela o una bombilla). Su intensidad disminuye a medida que te alejas de ella (esto se llama decay).
  • SpotLight (El Foco):
    Un cono de luz, como los de un escenario de teatro o los faros de un coche. Tienes control total sobre su ángulo, penumbra y distancia.

Sombras: El devorador de rendimiento

Las sombras en el mundo digital son extremadamente caras matemáticamente. Por eso, en Three.js vienen desactivadas por defecto en TODOS los objetos y en el Renderer. Para activarlas, necesitas un proceso de 4 pasos:

  1. Avisar al Renderer: renderer.shadowMap.enabled = true;
  2. Avisar a la Luz que proyecte: light.castShadow = true;
  3. Avisar al Objeto que bloquee la luz: mesh.castShadow = true;
  4. Avisar al Suelo que reciba la sombra: suelo.receiveShadow = true;

Consejo profesional

Las sombras pueden verse dentadas (como si fueran de Minecraft). Para suavizarlas, aumenta el tamaño del mapa de sombras de la luz: light.shadow.mapSize.width = 2048 y light.shadow.mapSize.height = 2048. ¡Pero ojo, esto baja el rendimiento!

El Setup de Iluminación Clásico

> _
// 1. Luz Ambiental (Relleno base, color blanco, intensidad 0.2)
const ambient = new THREE.AmbientLight(0xffffff, 0.2);
scene.add(ambient);

// 2. Luz Direccional (El Sol, intensidad 1)
const sun = new THREE.DirectionalLight(0xffffff, 1);
sun.position.set(5, 5, 2);

// 3. Activar sombras en la luz
sun.castShadow = true;
sun.shadow.camera.near = 0.5;
sun.shadow.camera.far = 15;
scene.add(sun);

// 4. Activar sombras en Renderer y Meshes
renderer.shadowMap.enabled = true;
// El objeto proyecta sombra
mesh.castShadow = true;
// El suelo la recibe
plane.receiveShadow = true;
> _

PointLight (roja y azul) moviéndose sobre una geometría blanca.

Errores comunes

01
Luces que no afectan a nada Creaste luces maravillosas, pero tus objetos usan MeshBasicMaterial. Recuerda: ¡BasicMaterial ignora la luz! Debes usar Standard o Phong.
02
Sombras cortadas o desaparecidas La cámara de sombras de la DirectionalLight es como una caja. Si tu escena es muy grande y escapa de esa caja (shadow.camera.left, right, top, bottom), la sombra no se renderizará.

Practica lo aprendido

Ilumina tu escena con drama.

01 Añade una AmbientLight muy tenue azul marino.
02 Crea una PointLight amarilla cerca de tu objeto para crear un alto contraste.
03 Habilita las sombras paso a paso (Renderer, Light, Caster, Receiver).