Globe lighting

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

Ключевой объект, отвечающий за освещение поверхности, — это глобус сцены (Scene.globe), который интегрирован с системой освещения движка и получает данные о положении Солнца через астрономические расчёты Cesium.


Включение и базовая конфигурация освещения

Главный переключатель освещения глобуса:

viewer.scene.globe.enableLighting = true;

При включённом освещении:

  • ночная сторона Земли затемняется
  • дневная сторона освещается в зависимости от угла падения солнечных лучей
  • текстуры приобретают выраженный градиент освещённости
  • появляется эффект терминатора (линии раздела дня и ночи)

При отключении (false) поверхность отображается равномерно освещённой, без зависимости от времени суток.


Астрономическая модель освещения

Cesium использует JulianDate для вычисления положения Солнца:

  • время сцены → положение Солнца в пространстве
  • положение Солнца → вектор направления света
  • направление света → интенсивность освещения поверхности

Свет в сцене представляется как направленный источник, движущийся относительно Земли:

const sunPosition = Cesium.Simon1994PlanetaryPositions.computeSunPositionInEarthInertialFrame(time);

Этот вектор затем преобразуется в координаты сцены и используется для вычисления освещения каждого фрагмента глобуса.


Терминатор и граница дня и ночи

Один из ключевых визуальных эффектов — терминатор (граница света и тени). Он формируется естественным образом благодаря скалярному произведению нормали поверхности и направления света:

  • если угол между нормалью и направлением Солнца мал — поверхность освещена
  • если угол близок к 90° — зона сумерек
  • если больше 90° — поверхность в тени

В шейдерной логике это выражается через dot product:

float lightIntensity = max(dot(normal, lightDirection), 0.0);

Взаимодействие с материалами поверхности

Освещение глобуса влияет не только на геометрию, но и на все типы поверхностей:

Текстурированные слои (Imagery Layers)

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

Рельеф (Terrain)

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

Связь с системой атмосферы

Освещение тесно связано с моделью атмосферы:

viewer.scene.skyAtmosphere.show = true;

Атмосферное рассеивание усиливает реализм освещения:

  • на горизонте появляется голубоватое свечение
  • при закате усиливаются тёплые оттенки
  • терминатор становится мягче за счёт рассеянного света

SkyAtmosphere использует приближенную модель Рэлеевского и Ми-рассеяния, что влияет на цвет неба и косвенно на визуальное восприятие освещённости глобуса.


Режимы времени и динамическое освещение

Освещение глобуса полностью зависит от времени сцены:

viewer.clock.multiplier = 10;
viewer.clock.shouldAnimate = true;

Изменение времени приводит к:

  • вращению терминатора
  • смене дневных и ночных регионов
  • изменению длины теней
  • смещению бликов на воде и ледниках

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


Оптимизация освещения глобуса

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

Уровни детализации (LOD)

  • дальние тайлы получают упрощённое освещение
  • ближние — полную шейдерную модель

Кэширование солнечного вектора

  • расчёт положения Солнца выполняется не для каждого пикселя, а на уровне сцены

Батчинг шейдеров

  • объединение одинаковых материалов снижает количество переключений GPU

Влияние на производительность

Включение освещения увеличивает нагрузку на GPU за счёт:

  • дополнительных расчётов в фрагментных шейдерах
  • динамического пересчёта светового вектора
  • усиленного использования нормалей поверхности

Особенно заметно влияние при:

  • высоком разрешении террейна
  • большом количестве тайлов
  • активной анимации времени

Освещение и визуальные артефакты

При некорректной настройке могут возникать эффекты:

  • чрезмерно тёмные ночные зоны при отсутствии компенсации ambient light
  • «пересвет» на снежных и ледяных поверхностях
  • резкая граница терминатора при отключённой атмосфере

Эти эффекты регулируются балансом между:

  • globe.enableLighting
  • scene.globe.undergroundColor
  • scene.skyAtmosphere.hueShift и saturationShift

Влияние на визуализацию воды и зеркальных поверхностей

Освещение глобуса особенно заметно на водных поверхностях:

  • блики от Солнца вычисляются отдельно от диффузного освещения
  • отражения зависят от угла наблюдения
  • при низком солнце усиливается эффект «дорожки света»

В связке с PBR-материалами воды отражения становятся более реалистичными и зависят от roughness и specular компонентов.


Интеграция с тенями сцены

Хотя глобусное освещение не является полноценной системой теней, оно взаимодействует с:

viewer.shadows = true;

Тени объектов (например, 3D Tiles или моделей) накладываются поверх освещённого глобуса, усиливая визуальную глубину сцены.


Управление интенсивностью освещения через пользовательские параметры

Хотя базовый механизм фиксирован, косвенно влияние можно регулировать через:

  • scene.light (если переопределён)
  • кастомные шейдеры материалов
  • модификацию ambient lighting в post-processing

Это позволяет создавать стилизованные режимы:

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

Взаимодействие с 3D Tiles и объектами сцены

Освещение глобуса не ограничивается поверхностью Земли:

  • 3D Tiles наследуют направление света сцены
  • модели получают единый световой вектор
  • нормали объектов участвуют в расчёте диффузного освещения

Это создаёт единое световое пространство между глобусом, зданиями и объектами.


Граничные случаи и особенности поведения

Некоторые особенности модели освещения:

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

Эти эффекты обусловлены геометрией эллипсоида и наклоном земной оси, используемым в астрономических расчётах Cesium.


Влияние на восприятие масштаба и географии

Освещение играет важную роль в пространственном восприятии:

  • граница дня и ночи помогает ориентироваться в глобальном масштабе
  • тени усиливают рельефность регионов
  • ночные огни городов (при подключённых слоях) формируют визуальную карту урбанизации

В результате освещение становится не просто визуальным эффектом, а инструментом географического анализа.