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

В среде HERE Technologies визуализация карт в JavaScript-API опирается на сценографическую модель, в которой освещение рассматривается как совокупность параметров рендера, влияющих на восприятие глубины, материалов и геометрии объектов. В HERE Maps API освещение интегрировано в WebGL-рендеринг и тесно связано со стилем карты, камерой и временем суток.


Архитектура освещения в 3D-сцене

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

Ключевые компоненты:

  • Ambient light (рассеянный свет) — базовый уровень освещённости, определяющий видимость объектов в теневых зонах.
  • Directional light (направленный свет) — имитация солнца, определяющая основные тени и контраст.
  • Specular component (зеркальные отражения) — отвечает за блики на поверхностях воды, стекла и гладких объектов.
  • Environmental lighting (окружение) — учитывает цвет неба и общую тональность сцены.

Настройка освещения через параметры сцены

В JavaScript API HERE освещение обычно конфигурируется через параметры сцены и рендера карты:

const map = new H.Map(container, defaultLayers.vector.normal.map, {
  center: { lat: 52.52, lng: 13.405 },
  zoom: 14,
  pixelRatio: window.devicePixelRatio
});

const mapView = map.getViewModel();

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

map.getStyle().setProperty('lighting.timeOfDay', 14);
map.getStyle().setProperty('lighting.intensity', 0.85);

В зависимости от конфигурации движка могут применяться расширенные свойства:

  • lighting.ambientIntensity
  • lighting.directionalIntensity
  • lighting.colorTemperature
  • lighting.shadowSoftness

Имитация времени суток

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

map.getStyle().setProperty('lighting.timeOfDay', 6);   // утро
map.getStyle().setProperty('lighting.timeOfDay', 12);  // полдень
map.getStyle().setProperty('lighting.timeOfDay', 19);  // вечер

При изменении времени суток изменяются:

  • направление солнечного света;
  • интенсивность бликов;
  • насыщенность теней;
  • общий цветовой баланс сцены.

Физически корректная модель использует синусоидальную зависимость высоты солнца от времени, что влияет на угол падения лучей и длину теней.


Направленный свет и геометрия сцены

Направленный источник света в 3D-картах имитирует солнечное освещение. Его вектор определяется положением виртуального солнца:

  • азимут — горизонтальный угол;
  • высота — угол над горизонтом.

Пример конфигурации:

map.getStyle().setProperty('lighting.sun.azimuth', 135);
map.getStyle().setProperty('lighting.sun.elevation', 45);

Влияние параметров:

  • низкое положение солнца увеличивает длину теней;
  • высокий угол уменьшает контрастность;
  • боковой свет усиливает рельеф зданий.

Рассеянное освещение и глобальная яркость

Ambient lighting отвечает за равномерную подсветку сцены, предотвращая полную потерю деталей в тенях.

map.getStyle().setProperty('lighting.ambientIntensity', 0.4);

Повышение значения приводит к:

  • снижению контраста;
  • уменьшению глубины теней;
  • более «плоской» визуализации.

Снижение значения усиливает реализм, но может ухудшить читаемость объектов в затемнённых областях.


Цветовая температура и атмосферные эффекты

Цветовая температура освещения задаёт оттенок света, влияющий на восприятие сцены:

  • холодные оттенки — утренние и зимние сцены;
  • тёплые оттенки — закат и вечернее освещение.
map.getStyle().setProperty('lighting.colorTemperature', 6500); // дневной свет
map.getStyle().setProperty('lighting.colorTemperature', 3200); // тёплый закат

Дополнительно могут применяться атмосферные модели:

  • рассеяние Рэлея (синее небо);
  • дымка и снижение контрастности на горизонте;
  • глобальная туманность для дальних объектов.

Тени и их вычисление

Тени формируются на основе глубины сцены и направления света. В картографических движках чаще применяются оптимизированные методы:

  • shadow mapping;
  • screen-space shadows;
  • precomputed light maps.

Настройки:

map.getStyle().setProperty('lighting.shadows.enabled', true);
map.getStyle().setProperty('lighting.shadowSoftness', 0.6);

Влияние параметров:

  • высокая мягкость теней уменьшает резкие границы;
  • отключение теней повышает производительность;
  • плотность теней зависит от геометрии зданий и уровня детализации.

Взаимодействие освещения со стилями карты

Освещение не существует отдельно от визуального стиля. Векторные стили определяют материал объектов:

  • здания могут иметь отражающие или матовые поверхности;
  • дороги реагируют на свет по-разному в зависимости от типа покрытия;
  • водные поверхности усиливают зеркальные отражения.

Пример влияния стиля:

map.getStyle().setProperty('building.material.roughness', 0.7);
map.getStyle().setProperty('water.specularIntensity', 1.0);

Оптимизация производительности

Освещение в WebGL-сценах является вычислительно затратной частью рендеринга. Оптимизация достигается через:

  • уменьшение числа активных источников света;
  • использование упрощённых моделей теней;
  • отключение динамических эффектов на слабых устройствах;
  • кэширование освещения для статичных сцен.

Практическая конфигурация:

map.getStyle().setProperty('lighting.shadows.enabled', false);
map.getStyle().setProperty('lighting.ambientIntensity', 0.6);
map.getStyle().setProperty('lighting.dynamic', false);

Согласование освещения с камерой

Параметры камеры напрямую влияют на восприятие освещения. При наклоне камеры:

  • усиливается эффект перспективного затенения;
  • изменяется восприятие высоты объектов;
  • усиливается контраст рельефа.
map.getViewModel().setLookAtData({
  tilt: 60,
  heading: 120,
  zoom: 16
});

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