Как применять направленный свет только для ограниченной зоны в Three.js?

#three.js #camera #geometry #scene #light

Вопрос:

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

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

 new three.SpotLight(0xffffff, .6, 0, Math.PI / 3, 0, 0);
 

Свет всегда находится сверху игрока, и игрок является его целью

Это работает, но есть 2 проблемы: это не направленный свет, поэтому я не могу получить эти красивые оттенки на разных лицах; и свет не все время рассеивается:

введите описание изображения здесь

Когда свет отбрасывается на импортированные модели, это действительно хорошее отражение на земле вокруг проигрывателя, но для программно созданных геометрий, похоже, это не так. Я предполагаю, что на одну грань может быть нанесен только 1 цвет от источника света, но усложнение геометрии добавит дополнительные накладные расходы поверх правильных расчетов освещения

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

Ответ №1:

Я думаю, вы можете использовать слои : https://threejs.org/docs/#api/en/core/Layers

Кроме того, попробуйте использовать свет от HDR (проверьте генератор PMREM), это может дать хорошие результаты, которые вы можете объединить со своим светом и сделать сцену лучше.