Point light

В A-Frame компонент light используется для добавления источников освещения в сцену. Тип point представляет собой точечный источник света, распространяющийся во всех направлениях от заданной позиции, подобно лампочке или свечке. В отличие от directional или spot света, point light не имеет направления и освещает объекты с радиусом действия, который можно контролировать.

Пример базового объявления:

<a-entity light="type: point; color: #ffffff; intensity: 1; distance: 10; decay: 2" position="0 2 0"></a-entity>

Разбор атрибутов:

  • type: point — указывает, что источник света точечный.
  • color — цвет излучаемого света. Поддерживаются HEX, CSS-цвета и rgb.
  • intensity — сила света. Значения >1 делают свет ярче, <1 — слабее.
  • distance — радиус, на котором свет оказывает влияние. По умолчанию свет бесконечен.
  • decay — коэффициент затухания с расстоянием. 1 означает линейное ослабление, 2 — квадратичное (реалистичное).

Расположение и позиционирование

Point light зависит от координат в пространстве. Его положение определяется атрибутом position у сущности <a-entity>. Для достижения реалистичного эффекта следует учитывать высоту и ориентацию объектов, чтобы свет падал естественно.

<a-entity light="type: point; intensity: 0.8; distance: 15; decay: 2" position="2 5 -3"></a-entity>

В этом примере свет расположен над сценой и смещен по X и Z. Такое размещение создаёт мягкие тени и естественное освещение.

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

Интенсивность (intensity) контролирует яркость. Для дневной сцены лучше использовать значения от 0.5 до 1.2, для вечерних — от 0.2 до 0.6. Цвет (color) позволяет моделировать различные источники: тёплый свет лампы (например #ffdca8) или холодный дневной (#ffffff).

Рассеяние и затухание

Затухание (decay) в A-Frame реализует физически корректное ослабление света с расстоянием:

  • decay: 0 — свет не ослабевает, действует как бесконечный источник.
  • decay: 1 — линейное затухание, свет постепенно тускнеет.
  • decay: 2 — квадратичное затухание, соответствует реальному поведению света.

Расстояние (distance) ограничивает область действия. Если объект находится дальше, чем указанное значение, свет на него не влияет.

<a-entity light="type: point; intensity: 1.2; distance: 5; decay: 2; color: #ffccaa" position="0 3 0"></a-entity>

Тени

Point light может создавать тени с помощью атрибута castShadow. В A-Frame тени включаются через:

<a-entity light="type: point; intensity: 1; distance: 10; castShadow: true" position="1 4 0"></a-entity>

Особенности работы теней с точечным светом:

  • Тени создаются по всей области действия света.
  • Высокое значение distance и decay может снизить качество теней.
  • Для реалистичного эффекта стоит регулировать shadowMapWidth и shadowMapHeight у рендерера сцены или через компонент shadow.
<a-entity light="type: point; castShadow: true; intensity: 1; distance: 10" position="0 5 0"></a-entity>

Анимация Point Light

Point light можно анимировать, создавая динамическое освещение. Для этого используют стандартные компоненты animation или animation__attribute:

<a-entity light="type: point; intensity: 1; distance: 8" position="0 3 0"
          animation="property: intensity; from: 0.5; to: 1.5; dir: alternate; dur: 2000; loop: true">
</a-entity>

Пример показывает пульсацию света. Также можно анимировать положение:

<a-entity light="type: point; intensity: 0.8; distance: 10" position="0 2 0"
          animation="property: position; to: 0 2 5; dur: 4000; loop: true; dir: alternate">
</a-entity>

Комбинация с другими источниками

Point light часто комбинируется с ambient или directional светом для создания естественной сцены:

<a-entity light="type: ambient; color: #555"></a-entity>
<a-entity light="type: point; intensity: 1; distance: 12" position="2 4 2"></a-entity>

Ambient добавляет базовое освещение без теней, а point light создаёт локальные эффекты и объёмность.

Производительность

  • Высокое количество point lights с включёнными тенями может сильно снизить FPS.
  • Рекомендуется ограничивать distance и decay для оптимизации.
  • Для статичных сцен можно использовать baked lighting (запечённое освещение) вместо динамических point lights.

Итоговые рекомендации по использованию

  1. Настраивать distance и decay для физически корректного ослабления света.
  2. Подбирать intensity и color в зависимости от сцены (день/ночь, интерьер/экстерьер).
  3. Использовать castShadow только там, где нужно, чтобы оптимизировать производительность.
  4. Комбинировать с другими источниками света для глубины и реализма.
  5. Анимировать позицию и интенсивность для динамических эффектов, например, огонь или мигающий свет.

Point light является ключевым инструментом для создания атмосферы в 3D сценах A-Frame, обеспечивая как декоративное, так и функциональное освещение объектов.