PointLight — это источник света, который излучает свет
во всех направлениях от своей позиции в 3D-пространстве. Он моделирует
точечные источники света, подобные лампочкам или свечам. Основные
параметры PointLight включают цвет, интенсивность, позицию
и свойства затухания света.
const light = new THREE.PointLight(0xffffff, 1);
light.position.set(10, 10, 10);
scene.add(light);
color) — определяет оттенок
излучаемого света.intensity) — мощность
света, обычно от 0 до нескольких единиц.position) — координаты
источника в сцене.distanceРадиус, на котором свет оказывает влияние, задаётся свойством
distance. Это максимальное расстояние от источника, на
котором свет ещё виден. Если distance установлен в
0, свет распространяется бесконечно.
const light = new THREE.PointLight(0xffaa00, 1, 50); // свет до 50 единиц
distance свет может освещать всю
сцену, что иногда нежелательно из-за производительности.decayСвойство decay определяет, как быстро уменьшается
интенсивность света с расстоянием. Оно моделирует физический закон
обратного квадрата:
[ I = ]
где (I) — интенсивность на расстоянии (d), (I_0) — исходная интенсивность.
const light = new THREE.PointLight(0xffffff, 2, 100, 2); // decay = 2 — физически корректное затухание
distance и decayДля управления реалистичным освещением важно согласовывать
distance и decay. Малый distance
с высоким decay создаёт яркий локальный источник. Большой
distance с низким decay делает свет более
равномерным по сцене.
const light = new THREE.PointLight(0x00ffcc, 3, 30, 1.5);
light.position.set(5, 10, 5);
scene.add(light);
distance ≈ 20–50 и decay ≈ 1–2.distance = 0 и минимальный decay.PointLight может отбрасывать тени, что добавляет глубины
сцене. Тени вычисляются для каждой стороны кубической карты
(shadow.map).
light.castShadow = true;
light.shadow.mapSize.width = 1024;
light.shadow.mapSize.height = 1024;
light.shadow.camera.near = 0.5;
light.shadow.camera.far = 500;
decay влияет на распределение
интенсивности теней: резкое затухание делает тени более контрастными
ближе к источнику.distance и
высокий decay создают уютное локальное освещение.distance с
умеренным decay позволяет свету распространяться на
несколько метров вокруг.distance, высокий decay и тёплый цвет создают
ощущение интимного света.Для отладки удобно добавить вспомогательный объект
PointLightHelper:
const helper = new THREE.PointLightHelper(light, 1);
scene.add(helper);
Он визуализирует положение источника и радиус его действия, что
упрощает настройку distance и decay.
Стараться использовать realistic decay (обычно 2) для физически корректного освещения.
Не ставить distance слишком большим без
необходимости — это снижает производительность.
Для динамических сцен, где свет двигается, контролировать
decay для предотвращения резких перепадов яркости
объектов.
Совмещать несколько PointLight для сложных сцен,
избегая одного слишком мощного источника, который делает освещение
плоским.
Использовать shadow только там, где это критично для
сцены, так как кубические карты теней для PointLight
ресурсоёмки.
Эффективное сочетание distance и decay
позволяет моделировать практически любой тип локального освещения, от
ламп и свечей до фонарей и магических источников света, создавая богатую
и реалистичную сцену в Three.js.