Темы оформления в CesiumJS формируются не как единый «скин», а как совокупность слоёв визуализации: базовые карты, материалы, освещение сцены, постобработка, стилизация сущностей и оформление пользовательского интерфейса. Такой подход позволяет управлять внешним видом как на уровне глобуса, так и на уровне отдельных объектов, не нарушая производительности и архитектуры WebGL-сцены.
В CesiumJS визуальное оформление распределено по нескольким независимым уровням:
Каждый уровень влияет на итоговое восприятие сцены и может комбинироваться с другими без конфликтов.
Основу визуального оформления составляет подложка, задаваемая через провайдеры изображений. CesiumJS поддерживает несколько типов источников: тайловые серверы, WMS/WMTS, Bing Maps и кастомные источники.
const viewer = new Cesium.Viewer("cesiumContainer", {
imageryProvider: new Cesium.IonImageryProvider({ assetId: 2 }),
baseLayerPicker: false
});
Слои добавляются через ImageryLayer, что позволяет
создавать многослойные композиции:
const layer = viewer.imageryLayers.addImageryProvider(
new Cesium.OpenStreetMapImageryProvider({
url: "https://a.tile.openstreetmap.org/"
})
);
layer.alpha = 0.6;
layer.brightness = 1.2;
layer.contrast = 1.1;
Ключевые параметры оформления слоя:
Комбинация нескольких слоёв позволяет формировать стилизованные карты: ночные, инфракрасные, «плоские» минималистичные или фотограмметрические.
Рельеф напрямую влияет на восприятие сцены и глубину композиции. Cesium Terrain API позволяет подключать глобальные и локальные модели высот.
viewer.terrainProvider = Cesium.createWorldTerrain();
Настройка рельефа влияет на:
Дополнительный визуальный контроль обеспечивается включением теней:
viewer.shadows = true;
viewer.terrainShadows = Cesium.ShadowMode.ENABLED;
CesiumJS использует физически ориентированную модель освещения сцены.
Основные параметры находятся в Scene:
viewer.scene.globe.enableLighting = true;
viewer.scene.light = new Cesium.DirectionalLight({
direction: new Cesium.Cartesian3(1.0, 0.0, -1.0)
});
Ключевые элементы визуального оформления:
Настройки атмосферы:
viewer.scene.skyAtmosphere.hueShift = 0.0;
viewer.scene.skyAtmosphere.saturationShift = 0.2;
viewer.scene.skyAtmosphere.brightnessShift = -0.1;
Эти параметры используются для создания дневных, закатных или ночных тем без изменения данных сцены.
Entity API предоставляет декларативный способ визуального оформления объектов. Каждый объект может иметь собственный стиль отображения:
const entity = viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(30, 50),
point: {
pixelSize: 10,
color: Cesium.Color.RED,
outlineColor: Cesium.Color.WHITE,
outlineWidth: 2
}
});
Основные стилизуемые компоненты:
Пример оформления линии:
viewer.entities.add({
polyline: {
positions: Cesium.Cartesian3.fromDegreesArray([30, 10, 40, 20]),
width: 4,
material: Cesium.Color.fromCssColorString("#00ffcc")
}
});
Материалы позволяют расширять визуальные эффекты:
material: new Cesium.PolylineGlowMaterialProperty({
glowPower: 0.25,
color: Cesium.Color.CYAN
})
CesiumJS использует систему материалов, которая абстрагирует WebGL-шейдеры. Это ключевой механизм оформления динамических визуальных эффектов.
Типы материалов:
Пример анимационного материала:
material: new Cesium.StripeMaterialProperty({
evenColor: Cesium.Color.WHITE,
oddColor: Cesium.Color.BLUE,
repeat: 8,
offset: 0.0,
orientation: Cesium.StripeOrientation.VERTICAL
})
Материалы позволяют формировать визуальные темы вроде:
3D Tiles поддерживают декларативную систему стилей через
Cesium3DTileStyle. Это один из ключевых инструментов
тематического оформления больших данных.
tileset.style = new Cesium.Cesium3DTileStyle({
color: "color('yellow', 0.5)"
});
Стили используют выражения, напоминающие GLSL-подобный синтаксис:
Пример условной стилизации:
tileset.style = new Cesium.Cesium3DTileStyle({
color: {
conditions: [
["${height} > 100", "color('red')"],
["${height} > 50", "color('orange')"],
["true", "color('green')"]
]
}
});
Стили позволяют реализовать тематические карты:
PostProcessStage применяется после рендеринга сцены и позволяет создавать глобальные визуальные эффекты.
viewer.scene.postProcessStages.fxaa.enabled = true;
Распространённые эффекты:
Пример цветовой коррекции:
viewer.scene.postProcessStages.add(
Cesium.PostProcessStageLibrary.createColorCorrectionStage({
brightness: 1.2,
contrast: 1.1,
saturation: 0.9
})
);
Постобработка часто используется для создания глобальных «тем»:
Primitives дают более низкоуровневый контроль над визуализацией по сравнению с Entity API. Здесь оформление задаётся через Appearance и Material.
const geometry = new Cesium.RectangleGeometry({
rectangle: Cesium.Rectangle.fromDegrees(-100, 30, -90, 40)
});
const primitive = new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: geometry
}),
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: Cesium.Material.fromType("Color", {
color: Cesium.Color.PURPLE
})
})
});
viewer.scene.primitives.add(primitive);
Этот уровень позволяет:
Визуальная тема не ограничивается сценой WebGL. Интерфейс Cesium Viewer полностью основан на HTML/CSS.
Основные зоны оформления:
Пример кастомизации:
.cesium-viewer-toolbar {
background: rgba(10, 10, 10, 0.8);
border-radius: 4px;
}
.cesium-button {
background: #222;
color: #0ff;
}
Скрытие элементов интерфейса:
const viewer = new Cesium.Viewer("cesiumContainer", {
timeline: false,
animation: false,
geocoder: false,
homeButton: false
});
UI и сцена могут быть стилистически полностью независимы, что позволяет создавать минималистичные или корпоративные интерфейсы.
Полноценная визуальная тема в CesiumJS формируется как комбинация нескольких уровней:
Комбинации позволяют создавать специализированные режимы отображения:
В CesiumJS оформление часто реализуется как переключаемые конфигурации сцены.
function setNightMode(viewer) {
viewer.scene.skyAtmosphere.brightnessShift = -0.3;
viewer.scene.globe.enableLighting = true;
viewer.imageryLayers.get(0).brightness = 0.5;
}
function setDayMode(viewer) {
viewer.scene.skyAtmosphere.brightnessShift = 0.1;
viewer.scene.globe.enableLighting = false;
viewer.imageryLayers.get(0).brightness = 1.0;
}
Такой подход позволяет формировать предустановленные темы без изменения данных сцены или геометрии.