Batched 3D Model

Batched 3D Model (формат 3D Tiles) представляет собой способ хранения и визуализации множества 3D-объектов как единого оптимизированного набора геометрии. Основная идея заключается в объединении большого числа моделей в один пакет с общей структурой данных, что позволяет существенно повысить производительность при рендеринге в веб-среде, особенно при работе с глобальными сценами и сложными городскими моделями.

В контексте CesiumJS Batched 3D Model является одним из ключевых форматов потоковой передачи 3D-данных, ориентированных на масштабируемость и эффективную загрузку по уровням детализации. Он реализуется через спецификацию 3D Tiles и используется для отображения больших массивов объектов: зданий, инженерных сооружений, инфраструктуры и любых повторяющихся элементов сцены.


Batched 3D Model строится на принципе агрегации геометрии. Вместо того чтобы хранить каждую модель отдельно и выполнять отдельные draw calls, множество объектов объединяется в один или несколько батчей.

Ключевые элементы структуры:

  • Batch Table — таблица свойств объектов
  • Batch IDs — идентификаторы примитивов внутри общего меша
  • Geometric Error — метрика уровня детализации
  • Feature Table — данные о визуальных и семантических свойствах

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


Принцип работы в 3D Tiles

Batched 3D Model является частью спецификации 3D Tiles 1.0. При загрузке тайла происходит следующая цепочка операций:

  1. Загрузка бинарного tile-файла
  2. Разбор заголовка формата
  3. Чтение batch table и feature table
  4. Декодирование геометрии (обычно glTF-совместимой)
  5. Привязка batch IDs к индексам вершин
  6. Отрисовка как единый WebGL draw call с возможностью выборочной идентификации объектов

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


Организация геометрии

Геометрия в Batched 3D Model обычно хранится в виде:

  • треугольных сеток (triangle meshes)
  • атрибутов вершин (позиции, нормали, UV)
  • индексов, объединённых в единый буфер

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

Это позволяет:

  • выполнять клик-пиккинг отдельных объектов
  • изменять свойства конкретных элементов
  • управлять стилями на уровне отдельных сущностей

Batch Table и семантические данные

Batch Table представляет собой JSON-структуру, содержащую свойства каждого объекта внутри батча.

Типичные данные:

  • идентификаторы объектов
  • цветовые атрибуты
  • высотные параметры
  • классификация (здание, дорога, объект инфраструктуры)
  • пользовательские свойства

Пример логики:

  • объект с batchId = 12 → “здание”
  • объект с batchId = 13 → “вентиляционная шахта”
  • объект с batchId = 14 → “опора моста”

Важная особенность — отсутствие жёсткой привязки к геометрии. Семантика отделена от визуального представления.


Feature Table и хранение атрибутов

Feature Table используется для хранения данных, связанных с геометрией на уровне вершин или примитивов. В отличие от Batch Table, он может содержать:

  • координаты экстентов
  • bounding volumes
  • bounding spheres
  • offset-данные трансформаций

Эти данные активно применяются для оптимизации отрисовки и определения видимости объектов.


Механизм выборки объектов (picking)

Одной из ключевых возможностей Batched 3D Model является интерактивная выборка объектов.

Процесс включает:

  • преобразование координат курсора в луч (ray)
  • пересечение луча с bounding volume батча
  • определение точного triangle hit
  • извлечение batchId
  • обращение к Batch Table

Результатом становится доступ к логическому объекту сцены, а не только к геометрии.

Это критически важно для:

  • информационных панелей
  • GIS-систем
  • городских цифровых двойников

Оптимизация производительности

Главное преимущество Batched 3D Model заключается в снижении нагрузки на GPU и CPU.

Основные механизмы оптимизации:

  • уменьшение количества draw calls
  • объединение вершинных буферов
  • использование frustum culling на уровне батча
  • уровень детализации через Geometric Error
  • кэширование загруженных тайлов

В результате сцены с десятками тысяч объектов могут рендериться в реальном времени в браузере.


Связь с уровнем детализации (LOD)

Batched 3D Model тесно связан с системой уровней детализации.

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

  • coarse-level representation (низкая детализация)
  • medium-level representation
  • high-detail mesh (при приближении камеры)

CesiumJS динамически подменяет тайлы в зависимости от:

  • расстояния до камеры
  • угла обзора
  • значимости объекта

Это позволяет избегать перегрузки сцены при дальнем обзоре.


Ограничения формата

Несмотря на высокую эффективность, Batched 3D Model имеет ряд ограничений:

  • сложность редактирования отдельных объектов после упаковки
  • ограниченная гибкость динамической геометрии
  • зависимость от предрасчёта тайлов
  • меньшая пригодность для часто изменяемых сцен

По этой причине в современных системах он часто используется вместе с instanced rendering и glTF-based pipelines.


Использование в городских моделях

Batched 3D Model особенно эффективен в сценариях цифровых двойников городов.

Типичные применения:

  • визуализация кварталов зданий
  • отображение инфраструктуры (линии электропередач, трубы)
  • модели транспортных узлов
  • крупномасштабные BIM-сцены

Объединение объектов в батчи позволяет обрабатывать целые районы как единые структурированные блоки.


Взаимодействие со стилями (3D Tiles Styling)

CesiumJS поддерживает динамическое стилизование батчей через язык выражений.

Возможности:

  • изменение цвета объектов по атрибутам
  • фильтрация по значениям Batch Table
  • скрытие объектов по условиям
  • визуальная классификация данных

Стиль применяется на уровне batchId, без необходимости модификации геометрии.


Поток загрузки данных

Типичный pipeline работы Batched 3D Model:

  1. Сервер отдаёт tileset.json
  2. CesiumJS определяет видимые тайлы
  3. Запрашивает .b3dm файлы
  4. Декодирует бинарный формат
  5. Строит GPU буферы
  6. Выполняет рендеринг
  7. Обрабатывает интерактивные события

Каждый шаг оптимизирован под стриминг больших сцен через интернет-канал.


Роль в экосистеме 3D Tiles

Batched 3D Model является базовым типом 3D Tiles наряду с:

  • Point Cloud tiles
  • Instanced 3D Model tiles
  • Composite tiles

Он исторически стал первым массово используемым форматом для городской визуализации, заложив основу для более современных instancing-подходов.


Особенности декодирования в браузере

В WebGL-конвейере Batched 3D Model обрабатывается следующим образом:

  • данные загружаются как ArrayBuffer
  • парсятся бинарные блоки
  • создаются Vertex Buffer Objects (VBO)
  • индексы группируются по batchId
  • формируются draw commands

Благодаря этому достигается высокая степень параллелизма GPU.


Практическая значимость в больших сценах

При работе с глобальными сценами Batched 3D Model позволяет:

  • уменьшать сетевой трафик
  • снижать количество HTTP-запросов
  • ускорять инициализацию сцены
  • обеспечивать плавное перемещение камеры

Эти свойства особенно важны при визуализации геопространственных данных в реальном времени.