В основе эффективного рендеринга в CesiumJS лежит система пространственных ограничивающих объёмов, используемых для ускорения вычислений видимости и отсечения невидимых объектов. Bounding volumes позволяют заменить сложную геометрию упрощёнными математическими представлениями, с которыми быстрее выполнять тесты пересечения и попадания в область видимости камеры.
CesiumJS использует несколько ключевых типов bounding volumes, каждый из которых оптимизирован под разные сценарии пространственного анализа.
Сфера ограничивающего объёма — один из самых часто используемых типов. Она описывается центром и радиусом:
Сфера удобна тем, что тест пересечения с фрустумом камеры сводится к простым вычислениям расстояния от точки до плоскости.
В CesiumJS она представлена классом
Cesium.BoundingSphere.
Ключевая особенность — высокая скорость проверки при умеренной точности. Сфера часто используется как первый уровень отсечения.
Типичные операции:
Пример математического смысла проверки видимости:
Ограничивающий параллелепипед, выровненный по осям координат. В
CesiumJS реализуется через
Cesium.AxisAlignedBoundingBox.
Характеристики:
Преимущества:
Недостаток:
AABB часто используется в иерархических структурах, например в кватер-деревьях и BVH.
Oriented Bounding Box (Cesium.OrientedBoundingBox) —
более точный вариант, учитывающий вращение объекта.
Описание:
OBB позволяет значительно уменьшить избыточный объём по сравнению с AABB.
Используется в случаях, когда:
Цена — более сложные вычисления пересечения с фрустумом.
Фрустум камеры в CesiumJS представляет собой усечённую пирамиду, ограниченную шестью плоскостями: ближней, дальней, верхней, нижней, левой и правой.
Bounding volumes используются для быстрого определения:
Основной алгоритм:
Это ключевой механизм оптимизации в сцене с миллионами объектов.
В CesiumJS система 3D Tiles (Cesium3DTileset) использует
bounding volumes как основу иерархического уровня детализации (LOD).
Каждый тайл содержит:
Bounding volume определяет, нужно ли загружать и отображать тайл.
Таким образом bounding volume является триггером стриминга данных.
Bounding volumes тесно связаны с метрикой SSE (Screen Space Error), используемой для выбора уровня детализации.
SSE оценивает, насколько сильно упрощённый тайл отклоняется от идеальной геометрии при проекции на экран.
Обобщённая логика:
Bounding volume влияет на оценку углового размера объекта относительно камеры, что напрямую связано с пиксельной точностью.
CesiumJS предоставляет утилиты для вычисления bounding volumes из различных источников данных.
Для облаков точек или произвольной геометрии:
Cesium.BoundingSphere.fromPointsCesium.AxisAlignedBoundingBox.fromPointsАлгоритм:
При работе с Cesium.Geometry:
Для географических регионов:
Cesium.Rectangle преобразуется в bounding volumeCesium.Ellipsoid.WGS84)Это важно для глобальных сцен, где геометрия привязана к поверхности планеты.
Bounding volumes часто объединяются в более крупные структуры:
Иерархические структуры позволяют:
Типичная схема:
корневой bounding volume (вся сцена)
├── региональные volumes
│ ├── тайлы высокого уровня
│ └── тайлы низкого уровня
└── отдельные объекты
Использование bounding volumes снижает вычислительную сложность рендеринга за счёт замены геометрических проверок:
Особенно критично это для:
CesiumJS применяет многоуровневую систему culling:
Bounding volumes участвуют в каждом этапе, выступая универсальным интерфейсом для проверки пространственных отношений.
При работе с глобальными координатами возникают особенности:
CesiumJS решает это через:
Cartesian3 в мировом пространствеBounding sphere часто предпочтительнее в глобальных сценах именно из-за устойчивости к численным ошибкам.
Bounding volumes участвуют во всех ключевых стадиях pipeline:
Каждый кадр камеры инициирует пересчёт видимости через traversal дерева bounding volumes.
Bounding volumes являются основой для:
CesiumJS 3D Tiles фактически представляет собой гибрид BVH и quadtree, где каждый узел определяется bounding volume.
CesiumJS использует оптимизированные алгоритмы:
Это позволяет обрабатывать тысячи bounding volumes за один кадр без существенных потерь производительности.
В глобальных сценах Earth-centered, Earth-fixed (ECEF):
OBB и AABB используются чаще в локальных системах координат тайлов, тогда как сфера — в глобальной агрегации.
Bounding volumes позволяют визуализировать:
Без них невозможно обеспечить интерактивную частоту кадров при таких объёмах данных.
При создании собственных источников данных в CesiumJS:
Bounding volume становится контрактом между геометрией и движком рендеринга.