В CesiumJS рельеф (terrain) формируется как отдельный процедурный слой геометрии, накладываемый на эллипсоид WGS84. Он определяет высотную составляющую сцены и участвует в вычислениях пересечения лучей, позиционировании объектов и геометрической привязке тайлов.
Основные категории рельефа:
Эллипсоидальная поверхность является фундаментом всей сцены. Она не содержит данных о высотах и используется:
Особенность заключается в том, что все объекты “прилипают” к гладкой математической поверхности без локальных деформаций.
Heightmap представляет рельеф как регулярную сетку значений высоты.
Структура:
Особенности:
Heightmap используется в упрощённых глобальных слоях и образовательных сценариях, где важна производительность, а не геометрическая точность.
Quantized-Mesh — стандарт Cesium для высокоточного глобального terrain.
Ключевая идея: рельеф хранится как триангулированная нерегулярная сетка (TIN), оптимизированная через квантование координат.
Компоненты тайла:
Преимущества:
LOD-логика:
Каждый тайл может быть рекурсивно разделён на 4 дочерних, формируя quadtree. Cesium подгружает только необходимые узлы в зависимости от камеры.
Mesh Terrain фактически пересекается с технологией 3D Tiles, где рельеф представлен как полноценная 3D-геометрия.
Источники данных:
В отличие от heightmap и quantized mesh:
3D Tiles представляет собой иерархический формат потоковой передачи трёхмерных данных.
Основные элементы:
Типы контента:
3D Tiles использует пространственное разбиение сцены:
Каждый тайл содержит:
REPLACE означает замену родительского тайла дочерним уровнем детализации.
Cesium объединяет terrain и 3D Tiles в единую систему визуализации, но их роль различается.
| Характеристика | Terrain | 3D Tiles |
|---|---|---|
| Назначение | рельеф поверхности | объекты и сцены |
| Геометрия | высотная модель | произвольные 3D меши |
| LOD | обязательный | обязательный |
| Структура | глобальная поверхность | локальные сцены |
| Формат | quantized-mesh, heightmap | b3dm, glTF и др. |
Cesium поддерживает механизм классификации геометрии, позволяющий объектам взаимодействовать с terrain и 3D Tiles не как с визуальными слоями, а как с масками для вычисления пересечений и отрисовки.
Основной механизм — ClassificationType:
CESIUM_3D_TILE — классификация 3D Tiles геометрииTERRAIN — классификация рельефаBOTH — комбинированный режимКлассификация реализуется через специальные геометрические объекты:
ClassificationPrimitiveGroundPrimitiveClassificationPolygonОни не просто отображаются, а изменяют способ рендеринга целевых слоёв.
Принцип:
При классификации terrain происходит взаимодействие с высотной сеткой:
Важный момент — классификация не изменяет геометрию terrain, а влияет только на визуализацию и выборку пикселей.
const polygon = viewer.entities.add({
polygon: {
hierarchy: Cesium.Cartesian3.fromDegreesArray([
30, 10,
40, 10,
40, 20,
30, 20
]),
material: Cesium.Color.RED.withAlpha(0.5),
classificationType: Cesium.ClassificationType.TERRAIN
}
});
Поведение параметра classificationType:
LOD-система 3D Tiles усложняет классификацию:
Это требует согласованной работы CPU и GPU, особенно при больших сценах.
ClassificationPolygon использует проекцию на поверхность:
Особенность заключается в том, что границы полигона “прилипают” к terrain, а не к абстрактной плоскости.
В реальных сценах terrain и 3D Tiles образуют слоистую структуру:
Cesium использует несколько механизмов оптимизации:
Для terrain и 3D Tiles SSE является ключевым параметром выбора LOD.
SSE определяет, насколько пиксельная ошибка заметна на экране:
Этот механизм обеспечивает баланс между:
При одновременном использовании:
Ключевая сложность заключается в согласовании depth buffer между различными источниками геометрии, особенно при высоких уровнях детализации и динамической подгрузке тайлов.