Three.js предоставляет гибкую систему освещения, которая позволяет
моделировать реалистичное взаимодействие света и объектов в
3D-пространстве. Все источники света в Three.js наследуются от класса
THREE.Light, что обеспечивает
унифицированный подход к их настройке и применению. Освещение в сцене
влияет на материалы объектов, их тени и визуальную глубину.
AmbientLight
THREE.AmbientLight — равномерное
рассеянное освещение, которое не создаёт теней и одинаково освещает все
поверхности. Используется для базовой подсветки сцены. Параметры:
color — цвет света (можно передавать в формате HEX или
THREE.Color).intensity — интенсивность света.DirectionalLight
THREE.DirectionalLight моделирует свет,
исходящий от источника на бесконечном расстоянии, как солнечный свет. Он
создаёт параллельные лучи и чёткие тени. Основные параметры:
position — позиция источника, задаёт направление
света.castShadow — включение генерации теней.shadow.mapSize — разрешение карты теней, влияющее на
чёткость.PointLight
THREE.PointLight испускает свет во все
стороны от точки, создавая эффект лампы или свечи. Важные параметры:
distance — радиус действия света.decay — коэффициент затухания интенсивности с
расстоянием.SpotLight
THREE.SpotLight создаёт конус света,
направленного в определённую область. Используется для сцен, где нужно
подсветить конкретный объект. Параметры:
angle — угол конуса света.penumbra — мягкость границы конуса.decay и distance — аналогично
PointLight.HemisphereLight
THREE.HemisphereLight моделирует свет,
приходящий с неба и отражённый от земли. Используется для имитации
дневного освещения. Параметры:
skyColor — цвет света сверху.groundColor — цвет отражённого света снизу.Three.js использует физически корректные модели освещения, основанные на освещении типа Phong, Lambert или PBR (Physically Based Rendering). Выбор материала определяет, как объекты будут реагировать на свет:
Для создания реалистичных теней в Three.js используется shadow mapping. Тени рассчитываются на основе положения источника света и объектов сцены:
Включение теней для источника:
light.castShadow = true.
Включение теней для объекта: mesh.castShadow = true
(отбрасывает тень), mesh.receiveShadow = true (принимает
тень).
Настройка карты теней:
light.shadow.mapSize.width = 1024;
light.shadow.mapSize.height = 1024;
light.shadow.radius = 2;Shadow mapping использует камеру источника света для рендеринга сцены в текстуру глубины, которая затем применяется для определения, какие участки сцены находятся в тени.
Реалистичное освещение требует правильной настройки интенсивности и затухания:
decay (обычно 2 для физически
корректного освещения).distance ограничивает область действия
света.renderer.physicallyCorrectLights = true) интенсивность
света автоматически учитывает затухание по закону обратных
квадратов.Three.js позволяет активировать режим физически корректного света:
renderer.physicallyCorrectLights = true;
В этом режиме:
Для сложных сцен часто используется комбинация нескольких источников:
Такое сочетание позволяет получить баланс между реализмом, производительностью и визуальной выразительностью сцены.
Эти методы позволяют поддерживать высокую производительность при сложной сцене и множестве источников света.
Эти принципы являются основой работы с освещением в Three.js и служат фундаментом для создания реалистичных и выразительных 3D-сцен.