Sun положение и время суток

В CesiumJS освещение сцены опирается на физически обоснованную модель положения Солнца относительно Земли. Это означает, что свет, тени, цвет неба и общая визуальная атмосфера напрямую зависят от текущего времени и географических координат камеры. Центральной идеей является связка времени (JulianDate) и астрономического положения Солнца, вычисляемого на лету.


Временная модель и JulianDate

CesiumJS не использует стандартный объект Date как основной источник времени. Вместо этого применяется высокоточная система:

  • JulianDate — юлианская дата с высокой точностью (включая наносекунды)
  • используется для астрономических вычислений
  • обеспечивает согласованность симуляции в 3D-сцене

Ключевой объект управления временем — Clock:

const viewer = new Cesium.Viewer("cesiumContainer");

viewer.clock.currentTime = Cesium.JulianDate.now();
viewer.clock.multiplier = 60; // ускорение времени (1 секунда = 1 минута)
viewer.clock.shouldAnimate = true;

Параметры Clock:

  • currentTime — текущее время сцены
  • multiplier — коэффициент ускорения времени
  • shouldAnimate — включение/выключение анимации времени
  • startTime, stopTime — границы временного интервала

Солнечная позиция как функция времени

Солнце в CesiumJS не является статическим источником света. Его положение вычисляется алгоритмически на основе текущего JulianDate.

Основной механизм:

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

Внутренне Cesium использует астрономические модели, приближённые к реальным эфемеридам.


Включение солнечного освещения сцены

Чтобы солнечный свет влиял на визуализацию объектов, необходимо активировать освещение сцены:

const viewer = new Cesium.Viewer("cesiumContainer", {
    shouldAnimate: true
});

viewer.scene.globe.enableLighting = true;

При включённом enableLighting:

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

Направление солнечного света

CesiumJS использует направленный источник света, имитирующий Солнце как бесконечно удалённый источник. Его направление вычисляется автоматически, но может быть извлечено через:

const sunDirection = Cesium.Simon97.SunDirection || Cesium.SunDirection; // концептуально

Практически чаще используется:

const sunPosition = Cesium.Simon97.SunPosition?.compute || Cesium.SunPosition;

Однако в стандартной работе разработчик не управляет этим напрямую — направление синхронизировано с Clock.


Атмосфера и рассеяние света

Солнечное положение напрямую влияет на визуальную атмосферу через SkyAtmosphere.

viewer.scene.skyAtmosphere.show = true;

Эффекты:

  • изменение цвета неба в зависимости от угла Солнца
  • переход от голубого дневного неба к оранжевым закатам
  • усиление рассеяния Рэлея при низком положении Солнца

Смена времени суток

Манипуляция временем позволяет моделировать сутки, месяцы и годы в ускоренном режиме.

const start = Cesium.JulianDate.fromDate(new Date(2026, 5, 9, 6));
const stop = Cesium.JulianDate.addHours(start, 24, new Cesium.JulianDate());

viewer.clock.startTime = start;
viewer.clock.stopTime = stop;
viewer.clock.currentTime = start;
viewer.clock.multiplier = 300; // ускорение в 300 раз
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;

Основные режимы clockRange:

  • UNBOUNDED — бесконечное движение времени
  • CLAMPED — остановка на границах
  • LOOP_STOP — зацикливание интервала

Влияние времени на тени

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

viewer.shadows = true;
viewer.terrainShadows = Cesium.ShadowMode.ENABLED;

Особенности:

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

Привязка камеры к освещению

В некоторых режимах камера может использоваться вместе с солнечным направлением для усиления визуального восприятия:

viewer.scene.light = new Cesium.SunLight();

Это позволяет:

  • улучшить контраст рельефа
  • усилить читаемость 3D-объектов
  • синхронизировать свет с географическим положением камеры

Географическая зависимость солнечного освещения

Положение Солнца в CesiumJS зависит не только от времени, но и от координат:

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

Эта зависимость проявляется особенно сильно при использовании глобального масштаба сцены.


Программное управление временем и солнцем

Изменение времени напрямую влияет на освещение сцены:

function setTime(hoursFromStart) {
    const newTime = Cesium.JulianDate.addHours(
        viewer.clock.startTime,
        hoursFromStart,
        new Cesium.JulianDate()
    );

    viewer.clock.currentTime = newTime;
}

Это используется для:

  • симуляции суточных циклов
  • анализа освещённости объектов
  • визуализации теневых изменений

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

При активной симуляции солнечного освещения важно учитывать нагрузку:

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

Практика оптимизации:

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

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

CesiumJS допускает сочетание солнечного света с локальными источниками:

  • точечные источники (PointLight)
  • прожекторы (SpotLight)
  • глобальное освещение (SunLight)

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


Роль солнечного положения в визуальной физике сцены

Система освещения в CesiumJS строится вокруг нескольких принципов:

  • единственный доминирующий источник света — Солнце
  • физически корректное затухание освещённости
  • зависимость от угла падения лучей
  • согласованность с вращением Земли

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

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