Визуализация атмосферы в CesiumJS строится вокруг модели физически приближённого рассеяния света, которая формирует цвет неба, градиент горизонта и характер перехода между поверхностью Земли и космическим фоном. Атмосферный слой в движке не является декоративной текстурой — он вычисляется динамически в зависимости от положения камеры, направления взгляда, солнечного вектора и параметров среды.
Ключевая задача атмосферного слоя заключается в формировании визуально непрерывного перехода между геометрией земной поверхности и небесной сферой без резких границ, особенно заметных на больших дистанциях наблюдения.
Атмосферная модель опирается на упрощённое представление двух основных типов рассеяния:
Рассеяние на молекулах воздуха, которое сильнее влияет на короткие длины волн.
[ I() ]
Этот эффект формирует голубой цвет неба и усиливается при низком положении солнца, создавая красноватые оттенки на горизонте.
Связано с частицами пыли и аэрозолями. Влияет на общую мутность атмосферы и снижает контрастность дальних объектов.
В CesiumJS обе модели объединяются в приближённую GPU-реализацию, где вычисления выполняются в шейдерах с учётом угла между направлением взгляда и солнечным вектором.
Основным компонентом атмосферы выступает
scene.skyAtmosphere. Он отвечает за:
Конфигурация включается по умолчанию:
const viewer = new Cesium.Viewer("cesiumContainer");
viewer.scene.skyAtmosphere.show = true;
При отключении атмосферного слоя сцена теряет физически корректный градиент и заменяется на упрощённый фон.
Так называемый «ground atmosphere» в CesiumJS не является отдельным объектом, а представляет собой визуальное поведение атмосферы вблизи поверхности Земли. Основной эффект проявляется в зоне горизонта, где происходит смешивание:
На малых высотах камера воспринимает атмосферу как плотный слой, усиливающий голубоватую дымку у линии горизонта. При подъёме камеры плотность визуального эффекта уменьшается, открывая более чёткий космический фон.
Высота камеры является ключевым параметром, определяющим интенсивность атмосферного эффекта.
Атмосферная модель непрерывно пересчитывает оптическую длину пути света через атмосферу, что влияет на цветовую температуру сцены.
Горизонт в CesiumJS не является статической линией. Он формируется пересечением:
Особое значение имеет эффект «soft horizon blending», при котором:
Базовые параметры управления атмосферой сосредоточены в объекте
scene.skyAtmosphere.
viewer.scene.skyAtmosphere.hueShift = 0.0;
viewer.scene.skyAtmosphere.saturationShift = 0.0;
viewer.scene.skyAtmosphere.brightnessShift = 0.0;
Эти параметры позволяют смещать цветовую модель атмосферы без изменения физической структуры шейдеров.
viewer.scene.skyAtmosphere.atmosphereBrightnessShift = 0.2;
Изменение яркости влияет на восприятие плотности воздуха, особенно в условиях низкого солнца.
Атмосферный слой тесно связан с глобальным освещением и положением солнца.
Если включено освещение глобуса:
viewer.scene.globe.enableLighting = true;
то солнечный угол начинает влиять одновременно на:
Это создаёт согласованную физическую модель дня и ночи.
Атмосферный эффект часто взаимодействует с параметрами тумана и дальности отрисовки:
Комбинация этих факторов формирует итоговую глубину сцены.
Атмосферное рассеяние выполняется на GPU с использованием фрагментных шейдеров. Основная нагрузка связана с:
Оптимизация достигается через:
При отключении skyAtmosphere резко снижается нагрузка на
пиксельные шейдеры, особенно на мобильных GPU.
Возникает при чрезмерной яркости солнца и высоких значениях насыщенности атмосферы.
Появляется при отключённом atmospheric scattering или при использовании упрощённого skybox без физической модели.
Наблюдается при отключении глубинного теста атмосферы или при некорректной настройке far plane камеры.
Связан с низкой детализацией террейна и сильным сглаживанием depth buffer в зоне горизонта.
Дневной режим характеризуется:
Закат и рассвет:
Ночной режим:
Атмосферный слой тесно связан с эллипсоидальной моделью Земли. При изменении масштаба сцены:
Эти эффекты особенно заметны при орбитальных камерах и визуализации спутниковых траекторий.