SkyBox в CesiumJS представляет собой один из ключевых визуальных компонентов сцены, отвечающий за формирование окружения, которое воспринимается как далёкое пространство за пределами земной поверхности. Реализация основана на кубической карте (cube map), где каждая грань куба содержит текстуру, проецируемую на внутреннюю сторону сферы наблюдения. Такой подход создаёт иллюзию бесконечного пространства, независимо от положения камеры и масштаба сцены.
SkyBox строится на основе шести текстур:
Каждая текстура соответствует одной из граней куба и формирует непрерывное визуальное окружение. В момент рендеринга фрагментный шейдер вычисляет направление взгляда камеры и выбирает соответствующую текстуру по максимальной компоненте вектора направления.
Важной особенностью является то, что SkyBox всегда центрирован относительно камеры. Это исключает эффект параллакса: звёзды и фоновые объекты не смещаются при перемещении наблюдателя, создавая иллюзию бесконечно удалённой сферы.
В стандартной конфигурации Scene SkyBox создаётся автоматически через
Cesium.Viewer. Однако он может быть переопределён вручную
через параметр skyBox:
const viewer = new Cesium.Viewer("cesiumContainer", {
skyBox: new Cesium.SkyBox({
sources: {
positiveX: "textures/sky/px.png",
negativeX: "textures/sky/nx.png",
positiveY: "textures/sky/py.png",
negativeY: "textures/sky/ny.png",
positiveZ: "textures/sky/pz.png",
negativeZ: "textures/sky/nz.png"
}
})
});
Каждая текстура должна быть корректно выровнена относительно мировой системы координат. Ошибки ориентации приводят к визуальным разрывам или зеркальному отображению звёздного поля.
SkyBox не является источником освещения напрямую, однако он тесно взаимодействует с системой освещения сцены. В CesiumJS освещение земли и объектов определяется положением Солнца, а SkyBox выполняет исключительно визуальную функцию фона.
При включённой модели физически корректного освещения (PBR) SkyBox может визуально усиливать ощущение глубины пространства, но не влияет на интенсивность теней или глобальное освещение.
Визуальное восприятие SkyBox часто связывается с параметром
JulianDate, который определяет положение Солнца и Луны. В
зависимости от времени суток SkyBox может динамически заменяться:
Пример динамической смены:
function updateSkyBox(viewer, isNight) {
viewer.scene.skyBox = isNight
? new Cesium.SkyBox({
sources: {
positiveX: "textures/space/px.png",
negativeX: "textures/space/nx.png",
positiveY: "textures/space/py.png",
negativeY: "textures/space/ny.png",
positiveZ: "textures/space/pz.png",
negativeZ: "textures/space/nz.png"
}
})
: new Cesium.SkyBox({
sources: {
positiveX: "textures/day/px.png",
negativeX: "textures/day/nx.png",
positiveY: "textures/day/py.png",
negativeY: "textures/day/ny.png",
positiveZ: "textures/day/pz.png",
negativeZ: "textures/day/nz.png"
}
});
}
Подобная замена часто используется в симуляторах орбитального движения, где переход между освещённой и теневой частью Земли требует смены фоновой среды.
Космические сцены в CesiumJS обычно реализуются через высокодетализированные cube maps, содержащие:
При использовании статических текстур важно учитывать отсутствие динамического мерцания звёзд. Для повышения реализма применяются процедурные шейдеры, но SkyBox остаётся базовой оболочкой.
Пример космического SkyBox:
const spaceSkyBox = new Cesium.SkyBox({
sources: {
positiveX: "space/px.jpg",
negativeX: "space/nx.jpg",
positiveY: "space/py.jpg",
negativeY: "space/ny.jpg",
positiveZ: "space/pz.jpg",
negativeZ: "space/nz.jpg"
}
});
viewer.scene.skyBox = spaceSkyBox;
В ряде сценариев SkyBox полностью отключается, чтобы оставить только процедурный фон или чёрное пространство:
viewer.scene.skyBox = undefined;
При этом фон сцены становится зависимым от параметра
backgroundColor:
viewer.scene.backgroundColor = Cesium.Color.BLACK;
Такой режим часто используется в научных визуализациях, где требуется минимизация визуальных артефактов и акцент на 3D-объектах.
SkyBox функционирует параллельно с системой атмосферного рассеяния. При включённой модели атмосферы:
viewer.scene.skyAtmosphere.show = true;
Конфликт между SkyBox и атмосферой возникает при некорректной настройке прозрачности, когда обе системы визуально накладываются, создавая двойной фон.
SkyBox рендерится как один из первых слоёв сцены и оптимизирован под минимальную нагрузку на GPU. Основные факторы производительности:
Высокое разрешение (4K и выше на грань) существенно увеличивает потребление памяти видеокарты, поскольку фактически загружается шесть текстур одновременно.
Оптимизация достигается через:
Хотя SkyBox традиционно опирается на статические текстуры, в CesiumJS возможно использование процедурных подходов через кастомные шейдеры. В таких случаях SkyBox заменяется динамически генерируемым фоном:
Однако даже при наличии процедурного слоя SkyBox часто сохраняется как fallback-решение для совместимости и производительности.
SkyBox не подчиняется трансформации сцены, связанной с
ModelMatrix или координатными преобразованиями. Его
поведение строго связано с камерой:
Это фиксирует SkyBox как бесконечно удалённую оболочку, независимую от сцены Земли или объектов в ней.
Такой подход обеспечивает стабильность восприятия космического окружения при любых орбитальных или наземных режимах навигации.