Классификация terrain и 3D Tiles

В CesiumJS рельеф (terrain) формируется как отдельный процедурный слой геометрии, накладываемый на эллипсоид WGS84. Он определяет высотную составляющую сцены и участвует в вычислениях пересечения лучей, позиционировании объектов и геометрической привязке тайлов.

Основные категории рельефа:

  • Ellipsoid Terrain — отсутствие рельефа, используется математическая модель эллипсоида
  • Heightmap Terrain — растровая модель высот
  • Quantized-Mesh Terrain — оптимизированная триангулированная модель
  • Mesh Terrain (3D Tiles Terrain) — полноценные 3D-меши, часто основанные на фотограмметрии

Ellipsoid как базовый уровень геометрии

Эллипсоидальная поверхность является фундаментом всей сцены. Она не содержит данных о высотах и используется:

  • при отключённом terrain provider
  • как fallback при отсутствии данных
  • для аналитических расчётов глобальной геометрии

Особенность заключается в том, что все объекты “прилипают” к гладкой математической поверхности без локальных деформаций.


Heightmap Terrain и растровая модель высот

Heightmap представляет рельеф как регулярную сетку значений высоты.

Структура:

  • сетка NxM
  • каждое значение — высота в метрах
  • интерполяция между узлами (обычно билинейная)

Особенности:

  • высокая скорость загрузки
  • низкая детализация на сложном рельефе
  • склонность к артефактам на резких перепадах высот

Heightmap используется в упрощённых глобальных слоях и образовательных сценариях, где важна производительность, а не геометрическая точность.


Quantized-Mesh как основная модель глобального рельефа

Quantized-Mesh — стандарт Cesium для высокоточного глобального terrain.

Ключевая идея: рельеф хранится как триангулированная нерегулярная сетка (TIN), оптимизированная через квантование координат.

Компоненты тайла:

  • вершины (quantized vertices)
  • индексы треугольников
  • нормали
  • геоморфинг-данные для плавных переходов LOD

Преимущества:

  • высокая детализация на сложных участках
  • эффективная LOD-структура
  • плавные переходы между уровнями детализации
  • оптимизация сетевого трафика

LOD-логика:

Каждый тайл может быть рекурсивно разделён на 4 дочерних, формируя quadtree. Cesium подгружает только необходимые узлы в зависимости от камеры.


Mesh Terrain и интеграция с 3D Tiles

Mesh Terrain фактически пересекается с технологией 3D Tiles, где рельеф представлен как полноценная 3D-геометрия.

Источники данных:

  • фотограмметрия (городские модели)
  • LiDAR-сканирование
  • процедурные генераторы

В отличие от heightmap и quantized mesh:

  • геометрия не привязана к регулярной сетке
  • возможна произвольная топология
  • поддерживаются текстуры высокой плотности

Архитектура 3D Tiles в CesiumJS

3D Tiles представляет собой иерархический формат потоковой передачи трёхмерных данных.

Основные элементы:

  • tileset.json — корневой файл структуры
  • tile — узел дерева
  • content — геометрическое содержимое
  • bounding volume — ограничивающий объём
  • refinement — стратегия детализации

Типы контента:

  • b3dm — Batched 3D Model
  • i3dm — Instanced 3D Model
  • pnts — Point Cloud
  • cmpt — Composite tile
  • glTF / GLB — современный формат геометрии

Иерархическая структура тайлов

3D Tiles использует пространственное разбиение сцены:

  • root tile покрывает весь регион
  • дочерние тайлы уточняют геометрию
  • структура обычно строится как quadtree или octree

Каждый тайл содержит:

  • геометрию
  • метаданные
  • правила refine (REPLACE или ADD)

REPLACE означает замену родительского тайла дочерним уровнем детализации.


Связь terrain и 3D Tiles

Cesium объединяет terrain и 3D Tiles в единую систему визуализации, но их роль различается.

Характеристика Terrain 3D Tiles
Назначение рельеф поверхности объекты и сцены
Геометрия высотная модель произвольные 3D меши
LOD обязательный обязательный
Структура глобальная поверхность локальные сцены
Формат quantized-mesh, heightmap b3dm, glTF и др.

Классификация объектов относительно рельефа и 3D Tiles

Cesium поддерживает механизм классификации геометрии, позволяющий объектам взаимодействовать с terrain и 3D Tiles не как с визуальными слоями, а как с масками для вычисления пересечений и отрисовки.

Основной механизм — ClassificationType:

  • CESIUM_3D_TILE — классификация 3D Tiles геометрии
  • TERRAIN — классификация рельефа
  • BOTH — комбинированный режим

Классификационные примитивы и их поведение

Классификация реализуется через специальные геометрические объекты:

  • ClassificationPrimitive
  • GroundPrimitive
  • ClassificationPolygon

Они не просто отображаются, а изменяют способ рендеринга целевых слоёв.

Принцип:

  1. создаётся геометрия-классификатор
  2. она проецируется на terrain или tiles
  3. пиксели внутри области изменяют поведение шейдера

Terrain classification: особенности работы

При классификации terrain происходит взаимодействие с высотной сеткой:

  • вершины terrain анализируются в GPU
  • определяется попадание в полигон
  • применяется маскирование фрагментов

Важный момент — классификация не изменяет геометрию terrain, а влияет только на визуализацию и выборку пикселей.


ClassificationType и область применения

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:

  • TERRAIN — влияет только на рельеф
  • CESIUM_3D_TILE — влияет только на 3D Tiles
  • BOTH — применяется к обоим слоям одновременно

Взаимодействие классификации и LOD

LOD-система 3D Tiles усложняет классификацию:

  • при смене уровня детализации меняется геометрия
  • классификатор пересчитывается динамически
  • bounding volume определяет область проверки

Это требует согласованной работы CPU и GPU, особенно при больших сценах.


ClassificationPolygon и особенности проекции

ClassificationPolygon использует проекцию на поверхность:

  • координаты задаются в географической системе
  • автоматически адаптируется к рельефу
  • учитывает перепады высот

Особенность заключается в том, что границы полигона “прилипают” к terrain, а не к абстрактной плоскости.


Использование terrain и 3D Tiles в едином пайплайне

В реальных сценах terrain и 3D Tiles образуют слоистую структуру:

  1. terrain формирует базовую поверхность
  2. 3D Tiles добавляют здания, инфраструктуру, объекты
  3. classification влияет на взаимодействие слоёв
  4. дополнительная геометрия (billboards, primitives) накладывается поверх

Оптимизация потоковой загрузки

Cesium использует несколько механизмов оптимизации:

  • frustum culling (отсечение вне камеры)
  • horizon culling (отсечение за горизонтом)
  • screen-space error metric (SSE)
  • progressive refinement

Для terrain и 3D Tiles SSE является ключевым параметром выбора LOD.


Screen Space Error и управление детализацией

SSE определяет, насколько пиксельная ошибка заметна на экране:

  • высокий SSE → загрузка более детального тайла
  • низкий SSE → использование упрощённого уровня

Этот механизм обеспечивает баланс между:

  • производительностью
  • качеством рельефа
  • скоростью потоковой загрузки

Особенности совместного рендеринга terrain и 3D Tiles

При одновременном использовании:

  • terrain формирует базовую глубину буфера
  • 3D Tiles тестируются на глубину и перекрытие
  • classification выполняется в пост-обработке

Ключевая сложность заключается в согласовании depth buffer между различными источниками геометрии, особенно при высоких уровнях детализации и динамической подгрузке тайлов.