AmbientLight

AmbientLight — это тип света, который равномерно освещает все объекты сцены без направления и теней. В отличие от направленных источников света, таких как DirectionalLight или SpotLight, амбиентный свет не создает объемных эффектов и не зависит от позиции или ориентации источника. Он используется для базового освещения сцены, чтобы предотвратить полностью черные участки, особенно в сочетании с другими источниками света.

Создание AmbientLight

Для создания амбиентного света используется конструктор:

const ambientLight = new THREE.AmbientLight(color, intensity);
  • color — цвет света, может быть задан как строка ('#ffffff'), числом (0xffffff) или объектом THREE.Color.
  • intensity — яркость света, числовое значение по умолчанию 1. Значения выше 1 делают свет ярче, ниже 1 — тусклее.

Пример создания мягкого белого света:

const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(ambientLight);

Влияние на материалы

Амбиентный свет взаимодействует со всеми материалами, которые учитывают освещение (MeshStandardMaterial, MeshPhongMaterial, MeshLambertMaterial). Он не влияет на материалы MeshBasicMaterial, так как они отображаются без освещения.

Эффект амбиентного света заключается в том, что он равномерно подсвечивает все поверхности объекта, сохраняя цвет материала, но без создания теней или бликов.

const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });
const geometry = new THREE.BoxGeometry();
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

При добавлении AmbientLight к сцене куб будет равномерно освещен, независимо от положения других источников света.

Настройка интенсивности и цвета

Изменение цвета и интенсивности может значительно влиять на атмосферу сцены:

ambientLight.color.setHex(0xffaa00); // оранжевый свет
ambientLight.intensity = 0.8;        // увеличенная яркость

Комбинация цвета и интенсивности позволяет имитировать различное время суток: холодный голубой свет для дневного времени, теплый оранжевый — для заката.

Совмещение с другими источниками света

Амбиентный свет идеально сочетается с направленными источниками:

  • DirectionalLight создает тени и направленные блики.
  • PointLight освещает объекты радиально.
  • SpotLight дает концентрированный пучок света с тенями.

Амбиентный свет гарантирует, что даже в тени от этих источников объекты будут частично освещены, создавая более естественную визуализацию.

const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
directionalLight.position.set(5, 10, 7.5);
scene.add(directionalLight);

const ambientLight = new THREE.AmbientLight(0x404040, 0.5);
scene.add(ambientLight);

Динамическое управление

Цвет и интенсивность амбиентного света могут изменяться в реальном времени, что позволяет реализовать эффекты смены времени суток или динамической атмосферы:

function updateLighting(time) {
    const intensity = Math.abs(Math.sin(time)) * 0.8 + 0.2;
    ambientLight.intensity = intensity;
    ambientLight.color.setHSL(0.1, 0.5, intensity);
}

В этом примере интенсивность плавно изменяется со временем, создавая эффект мерцания или дневного цикла.

Ограничения AmbientLight

  • Не создает теней. Для получения реалистичных теней необходимо комбинировать с направленными или точечными источниками.
  • Не придает объему объектам. Используется только для базового равномерного освещения.
  • Может визуально “размывать” сцену при слишком высокой интенсивности, особенно если нет дополнительных источников света.

Практические рекомендации

  • Всегда использовать вместе с другими источниками света для создания глубины сцены.
  • Настраивать цвет и интенсивность в зависимости от атмосферы и настроения сцены.
  • Не полагаться только на амбиентный свет для реалистичного освещения — он подходит для стилизованных сцен или начального освещения.

Амбиентный свет является фундаментальной частью системы освещения в Three.js, обеспечивая базовый уровень видимости и улучшая восприятие объектов до применения сложных источников света и теней.