Атмосферные эффекты формируют визуальную связку между поверхностью планеты, небом и источниками света, создавая физически правдоподобную сцену. В CesiumJS они отвечают за моделирование рассеяния света в атмосфере, цвет неба, переходы у горизонта, мягкость дальних объектов и общее восприятие масштаба планеты.
Основные задачи атмосферного слоя:
CesiumJS использует физически вдохновлённую модель рассеяния света (Rayleigh и Mie scattering), адаптированную для real-time рендеринга в WebGL.
Ключевой объект атмосферного рендеринга — SkyAtmosphere.
Он отвечает за визуализацию неба вокруг камеры и имитацию рассеяния
солнечного света в верхних слоях атмосферы.
Инициализация осуществляется через сцену:
const viewer = new Cesium.Viewer("cesiumContainer");
viewer.scene.skyAtmosphere = new Cesium.SkyAtmosphere();
SkyAtmosphere формирует небесный купол, который:
Модель основана на упрощённой физике:
viewer.scene.skyAtmosphere.show = true;
При отключении атмосферы сцена переходит к более «космическому» виду без рассеяния света.
SkyAtmosphere позволяет управлять цветовой коррекцией:
const atmosphere = viewer.scene.skyAtmosphere;
atmosphere.brightnessShift = 0.2;
atmosphere.hueShift = -0.1;
atmosphere.saturationShift = 0.3;
Эти параметры влияют на итоговый цвет неба:
brightnessShift — общая яркость атмосферыhueShift — смещение оттенкаsaturationShift — насыщенностьТакая настройка часто используется для стилизации сцены (например, «марсианская» или «сумеречная» атмосфера).
atmosphere.ellipsoidScale = 1.0;
atmosphere.atmosphereLightIntensity = 10.0;
ellipsoidScale влияет на воспринимаемую толщину
атмосферыatmosphereLightIntensity управляет силой светового
рассеянияЧем выше интенсивность, тем ярче проявляется ореол вокруг солнца и световой градиент у горизонта.
Положение солнца напрямую влияет на внешний вид неба и земли.
viewer.scene.globe.enableLighting = true;
При включённом освещении:
Солнце в CesiumJS представлено через Sun в сцене, и его
позиция вычисляется на основе времени:
viewer.clock.currentTime = Cesium.JulianDate.now();
Изменение времени приводит к динамическому изменению:
CesiumJS поддерживает визуализацию атмосферной дымки у поверхности:
viewer.scene.globe.showGroundAtmosphere = true;
Этот эффект добавляет:
Он особенно заметен при низких углах обзора, когда камера близка к поверхности.
Атмосфера усиливает глубину сцены за счёт:
Без атмосферы сцена становится более «плоской», так как отсутствует естественный воздушный градиент.
CesiumJS может использовать два подхода к визуализации неба:
SkyBox — кубическая текстура окруженияSkyAtmosphere — физически основанное рассеяние
светаviewer.scene.skyBox.show = true;
viewer.scene.skyAtmosphere.show = true;
При совместном использовании:
На больших высотах SkyBox становится более заметным, на малых — доминирует атмосфера.
При взгляде в сторону солнца формируется яркое свечение — результат Mie scattering. Оно зависит от:
Небо формирует непрерывный градиент:
Этот переход вычисляется в шейдерах в реальном времени.
CesiumJS реализует атмосферу через GPU-шейдеры. Основные этапы:
Упрощённая схема:
pixelColor = integrate(rayleigh + mie scattering + extinction)
Оптимизации:
Атмосферные эффекты являются GPU-интенсивными, поэтому:
Практические влияющие параметры:
Хотя туман формально не является частью атмосферы, он усиливает её эффект:
viewer.scene.fog.enabled = true;
viewer.scene.fog.density = 0.0002;
Туман:
В сочетании с SkyAtmosphere создаётся более глубокая сцена.
Атмосфера в CesiumJS тесно связана с временем суток:
Изменение времени автоматически перестраивает: