В CesiumJS ground primitives используются для отрисовки геометрии,
«приклеенной» к поверхности земного эллипсоида или рельефа. В отличие от
обычных примитивов сцены, которые располагаются в трёхмерном
пространстве с фиксированной высотой, ground primitives учитывают
террейн и 3D Tiles, обеспечивая корректное позиционирование на
поверхности.
Ключевая особенность: геометрия автоматически
следует за рельефом и пересекается с ним корректным образом, без
необходимости вручную вычислять высоты.
Архитектурная роль ground
primitives
Ground primitives находятся между высокоуровневыми Entity API и
низкоуровневыми Primitive API.
- Entity API предоставляет декларативное описание объектов
- Primitive API даёт максимальную производительность и контроль
- Ground primitives реализуют компромисс: производительность близкая к
primitives + привязка к земле
Внутри CesiumJS ground primitives используют специализированные
буферы и шейдеры, которые учитывают:
- высоту terrain provider
- классификацию 3D Tiles
- глубину сцены
- приоритет отрисовки относительно других ground объектов
GroundPrimitive:
базовый строительный блок
GroundPrimitive предназначен для рендеринга
полигонов, которые лежат на поверхности земли.
Основные свойства
geometryInstances — набор геометрий
appearance — визуальное представление
(материал/шейдер)
asynchronous — разрешение асинхронной обработки
classificationType — тип классификации поверхности
Ключевой механизм: геометрия не имеет фиксированной
высоты, а «приклеивается» к поверхности террейна.
Геометрии и их особенности
GroundPrimitive работает с ограниченным набором геометрий:
- PolygonGeometry
- RectangleGeometry
- CircleGeometry
Ограничение: не все типы геометрий поддерживаются,
поскольку требуется возможность корректного проецирования на поверхность
ellipsoid/terrain.
Особенность проекции
Перед рендерингом вершины:
- преобразуются в географические координаты
- запрашивают высоту у terrain provider
- корректируются под 3D Tiles классификацию (если включено)
ClassificationType и
взаимодействие с 3D Tiles
Одним из ключевых механизмов является классификация.
TERRAIN — влияет только на рельеф
CESIUM_3D_TILE — влияет на 3D Tiles
BOTH — комбинированный режим
Суть классификации: ground primitive не просто
рисуется поверх сцены, а может изменять визуальное поведение подлежащих
слоёв.
Это используется для:
- маскирования зданий
- выделения зон на поверхности
- визуализации аналитических областей
GroundPolylinePrimitive
и линии на поверхности
Отдельный тип — GroundPolylinePrimitive,
предназначенный для линий, повторяющих рельеф.
Отличие от PolylinePrimitive
Обычные полилинии:
- существуют в 3D пространстве
- требуют явной высоты
GroundPolylinePrimitive:
- следуют terrain
- используют экранную толщину
- пересчитываются при изменении уровня детализации terrain
Геометрическая обработка
полилиний
Полилиния разбивается на сегменты:
- сегментация по тайлам terrain
- интерполяция высот
- адаптация к LOD
При каждом обновлении камеры:
- пересчитывается видимая часть
- происходит ре-тесселяция при необходимости
Важно: это дорогостоящая операция, поэтому
используется кэширование геометрии.
Производительность и батчинг
Ground primitives используют специализированный pipeline
оптимизации:
Базовые принципы
- группировка геометрий по материалам
- минимизация draw calls
- использование vertex compression
- предвычисление индексов
Ограничения
- динамическое изменение геометрии дорого
- большое количество объектов снижает FPS быстрее, чем у ScreenSpace
primitives
- классификация 3D Tiles увеличивает нагрузку на GPU
Асинхронная обработка
Параметр asynchronous позволяет:
- вычислять геометрию вне основного потока рендера
- избегать фризов при сложных полигонах
- распределять нагрузку по кадрам
Однако:
- возможна задержка появления объектов
- временные артефакты при быстром движении камеры
Appearance и материалы
Appearance определяет визуальное поведение ground primitive.
Основные типы:
- MaterialAppearance
- PerInstanceColorAppearance
- пользовательские шейдеры
Материалы поддерживают:
- прозрачность
- градиенты
- текстуры
- процедурные эффекты
Особенность: shading учитывает curvature Земли и
освещение сцены.
Depth testing и z-index
поведение
Ground primitives интегрируются в глубинный буфер сцены.
Основные эффекты:
- корректное перекрытие terrain
- взаимодействие с 3D Tiles
- предотвращение z-fighting через depth bias
Однако при сложных сценах:
- возможны конфликты с translucent materials
- требуется настройка
renderOrder в зависимости от
слоя
Взаимодействие с terrain
provider
Ground primitives тесно связаны с terrain provider:
- Cesium World Terrain
- локальные terrain tilesets
- procedural terrain
При изменении terrain:
- происходит перерасчёт высот
- геометрия может переинтерполироваться
- кэш invalidation зависит от tile availability
Особенности точности и
артефакты
При работе с ground primitives возникают специфические проблемы:
1. Смещения на границах тайлов
Возникают из-за:
- различий LOD
- разной точности высот
2. Дрожание геометрии
При движении камеры:
- пересчёт terrain вызывает микросмещения
3. Потери точности на
больших координатах
Используется double precision, но:
- шейдерная стадия ограничена float precision
Оптимизация использования
Эффективная работа ground primitives требует учёта:
Ограничение количества
объектов
Большое число GroundPrimitive объектов ухудшает производительность
быстрее, чем их агрегация.
Использование батчинга
Лучше объединять геометрии:
- по материалу
- по типу классификации
Минимизация пересчётов
Избегается частое изменение:
- positions
- hierarchy
- extrudedHeight
Сравнение с Entity API
Ground primitives часто используются вместо Entity в
высоконагруженных сценах.
Entity:
- проще
- медленнее
- автоматически управляет состоянием
GroundPrimitive:
- сложнее
- быстрее
- требует ручного контроля
Основной выбор:
- аналитические карты → ground primitives
- интерактивные сцены → entity
Использование в
аналитических слоях
Ground primitives применяются в:
- GIS-анализе
- военных симуляциях
- визуализации зон покрытия
- тепловых картах
- территориальном планировании
Их ключевая ценность — точное соответствие поверхности Земли без
ручной коррекции высот.
Ограничения модели ground
primitives
Несмотря на мощность, присутствуют ограничения:
- не поддерживают полноценную 3D геометрию
- сложные extrusion сценарии ограничены
- зависимость от terrain quality
- ограниченный набор типов геометрии
- высокая стоимость динамических обновлений
Поведение при работе с 3D
Tiles
При взаимодействии с tilesets:
- возможна классификация зданий
- поддержка clipping через polygon masking
- корректная глубинная интеграция
Однако:
- сложные tilesets увеличивают latency
- требуется баланс между classification и performance
Внутренний рендеринг
pipeline
Процесс рендеринга включает этапы:
- Triangulation геометрии
- Projection на ellipsoid
- Sampling terrain height
- Tile-based subdivision
- GPU buffer upload
- Shader execution с учетом material/appearance
Каждый этап оптимизирован под streaming данных CesiumJS.
Практическая роль в
архитектуре сцен
Ground primitives часто становятся основой:
- слоёв визуализации
- интерактивных зон
- геопривязанных интерфейсов
- аналитических overlay систем
Их использование позволяет отделить:
- геометрию сцены
- визуальную семантику
- слой данных
Итоговая роль в
графическом пайплайне CesiumJS
Ground primitives формируют специализированный слой рендеринга,
ориентированный на точное следование поверхности Земли, интеграцию с
terrain и 3D Tiles и высокопроизводительную отрисовку
геопространственных данных.