В среде HERE Technologies визуализация карт в JavaScript-API опирается на сценографическую модель, в которой освещение рассматривается как совокупность параметров рендера, влияющих на восприятие глубины, материалов и геометрии объектов. В HERE Maps API освещение интегрировано в WebGL-рендеринг и тесно связано со стилем карты, камерой и временем суток.
Система освещения в картографическом рендеринге представляет собой набор вычислений, применяемых на этапе шейдинга. Основная цель — преобразование геометрии в визуально читаемую сцену с корректным распределением яркости.
Ключевые компоненты:
В 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.ambientIntensitylighting.directionalIntensitylighting.colorTemperaturelighting.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); // тёплый закат
Дополнительно могут применяться атмосферные модели:
Тени формируются на основе глубины сцены и направления света. В картографических движках чаще применяются оптимизированные методы:
Настройки:
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
});
При высоком наклоне сцена становится более чувствительной к направленному свету, что усиливает пластичность городской геометрии.