Источники света

Без света физический материал чёрный. Разбираем четыре типа источников и как их сочетать.

Свет в Three.js бывает четырёх основных видов; их комбинируют, чтобы получить и общую подсветку, и направленные тени.

Четыре типа

СветАналогияОсобенность
AmbientLightрассеянный свет дняосвещает всё одинаково, без теней
DirectionalLightсолнцепараллельные лучи, даёт тени
PointLightлампочкаиз точки во все стороны, слабеет с расстоянием
SpotLightпрожекторконус света в заданном направлении

Ambient — общая подсветка

AmbientLight добавляет одинаковый свет ко всем поверхностям. Сам по себе он делает картинку плоской (нет теней, нет объёма), но в паре с направленным светом убирает «угольно-чёрные» тени и оживляет сцену.

const ambient = new THREE.AmbientLight(0xffffff, 0.4); // цвет, интенсивность
scene.add(ambient);

Directional — солнце

DirectionalLight светит параллельными лучами из направления — как далёкое солнце. У него есть позиция, задающая направление, и именно он обычно отбрасывает тени.

const sun = new THREE.DirectionalLight(0xffffff, 1);
sun.position.set(5, 10, 7); // лучи идут из этой точки в начало координат
scene.add(sun);

Point и Spot

PointLight — лампочка: светит во все стороны из точки и затухает с расстоянием (параметры distance и decay). SpotLight — прожектор: узкий конус с регулируемым углом. Их ставят для локальных акцентов: свет фонаря, лампа на столе, луч прожектора на сцене.

Рецепт «хорошего» освещения

Классический рабочий набор для начала — один Ambient послабее + один Directional посильнее. Ambient гарантирует, что ничего не утонет в черноте, а Directional даёт объём и тени. Дальше добавляйте Point/Spot для акцентов.

Почему именно так, а не «один яркий Ambient на всё»? Потому что Ambient светит со всех сторон одинаково и убивает объём: при нём шар выглядит как плоский круг — нет ни светлой, ни теневой стороны. Объём рождается из разницы освещённости граней, а её даёт только направленный свет. Поэтому Ambient держат слабым (роль «подсветки теней»), а форму лепит Directional.

Интенсивность и цвет

У каждого света два главных параметра: цвет и интенсивность. Цветом света легко задать настроение — тёплый желтоватый 0xffeecc для уюта, холодный голубоватый 0xcce6ff для ночи. Интенсивность — это яркость; в современных версиях Three.js свет считается физически, поэтому значения у разных типов света могут заметно отличаться, и их подбирают на глаз под конкретную сцену. Не бойтесь экспериментировать: освещение — это половина того, как сцена «читается» зрителем.

scene.add(new THREE.AmbientLight(0xffffff, 0.3));
const key = new THREE.DirectionalLight(0xffffff, 1);
key.position.set(4, 8, 6);
scene.add(key);

Итог

  • Ambient — ровная подсветка без теней; Directional — солнце с тенями.
  • Point — лампочка из точки; Spot — конус-прожектор.
  • Базовый рецепт: слабый Ambient + сильный Directional.
Проверьте себя
1. Какой источник света имитирует солнце — параллельные лучи из одного направления?
AAmbientLight
BPointLight
CDirectionalLight
DSpotLight
2. Что делает AmbientLight?
AСветит из точки во все стороны
BРавномерно подсвечивает всё одинаково, без направления и теней
CСоздаёт узкий конус света
DИмитирует солнце
3. Какой свет похож на обычную лампочку — светит из точки во все стороны и слабеет с расстоянием?
ADirectionalLight
BPointLight
CAmbientLight
DHemisphereLight
Поддержать проект