Экспорт сцены в glTF и GLB через GLTF2Export

Библиотека Babylon.js предоставляет мощные инструменты для работы с 3D-графикой в браузере, включая поддержку форматов для обмена и хранения 3D-данных. Одним из таких форматов является glTF (GL Transmission Format), который стал стандартом для передачи и загрузки 3D-ресурсов в веб-приложениях. Для экспорта сцен в этот формат Babylon.js использует утилиту GLTF2Export, которая предоставляет удобный интерфейс для сохранения сцены в форматах glTF и GLB.

Что такое glTF и GLB

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

GLB — это бинарная версия glTF, который упаковывает все ресурсы, включая текстуры и материалы, в один файл. Это делает его удобным для распространения и передачи, поскольку весь набор данных для сцены можно получить в одном файле без необходимости работать с отдельными ресурсами.

GLTF2Export: Основные функции и возможности

GLTF2Export представляет собой класс в Babylon.js, который предоставляет методы для экспорта объектов сцены в формат glTF или GLB. Основная цель этого инструмента — упростить процесс создания экспортируемых файлов, сохраняя структуру и внешний вид сцены как можно точнее.

Основные функции GLTF2Export:

  • Экспорт геометрии и материалов: Включает в себя описание всех геометрических объектов сцены, а также их материалы, текстуры и шейдеры.
  • Поддержка анимаций: Экспортирует анимации, связанные с движением объектов, трансформациями и другими параметрами.
  • Поддержка камер и освещения: Экспортирует данные о камерах, освещении и их настройках.
  • Поддержка бинарного формата GLB: В случае необходимости, GLB-файл содержит все необходимые данные в одном пакете, что упрощает его использование в различных приложениях.

Пример экспорта сцены в glTF и GLB

Для того чтобы экспортировать сцену из Babylon.js, используется метод GLTF2Export.Serialize. В его основе лежит создание описания сцены, которое затем сохраняется в файл. Рассмотрим пример экспорта сцены с помощью Babylon.js:

BABYLON.GLTF2Export.GLTFAsync(scene, "scene_name")
  .then(function (glTF) {
    BABYLON.Tools.DownloadFile(glTF, "scene_name.glb");
  });

В этом примере:

  • scene — это объект сцены, который требуется экспортировать.
  • "scene_name" — имя файла для экспортируемой сцены.
  • Метод GLTF2Export.GLTFAsync возвращает промис, который при выполнении возвращает объект, содержащий все данные сцены в формате glTF.
  • BABYLON.Tools.DownloadFile используется для скачивания полученного файла. В данном случае он загружает экспортированный файл как GLB.

Настройки и параметры экспорта

Метод GLTF2Export.Serialize позволяет настроить экспортируемые данные, например, указав, нужно ли экспортировать текстуры, анимации, камеры и другие элементы сцены. Возможные параметры:

  • exportOnlySelected: Экспортирует только выбранные объекты сцены.
  • includeAnimations: Указывает, следует ли включать анимации в экспорт.
  • includeCamera: Если задано значение true, в экспорт включается камера сцены.
  • includeLights: Включает источники света в экспортируемую сцену.
  • binary: Если задано значение true, экспорт происходит в формате GLB (бинарный файл).

Пример использования этих параметров:

BABYLON.GLTF2Export.GLTFAsync(scene, "scene_name", {
  exportOnlySelected: true,
  includeAnimations: true,
  includeCamera: true,
  includeLights: true,
  binary: true
})
  .then(function (glTF) {
    BABYLON.Tools.DownloadFile(glTF, "scene_name.glb");
  });

Преимущества и ограничения экспорта

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

  1. Быстрая загрузка: Благодаря компактности формата glTF и его оптимизации для веба, сцены, экспортированные в этот формат, быстро загружаются и отображаются в браузере.
  2. Поддержка современных фич: glTF поддерживает текстуры, материалы, анимации и даже физику, что делает его подходящим для работы с современными 3D-играми и приложениями.
  3. Гибкость: Возможность экспортировать сцены как в текстовом (glTF), так и в бинарном (GLB) формате, в зависимости от нужд проекта.

Ограничения:

  1. Не все функции поддерживаются: Хотя glTF является мощным форматом, он все же не поддерживает некоторые специфические функции или эффекты, которые могут быть доступны в других форматах, например, сложные шейдеры.
  2. Меньшая степень сжатия по сравнению с другими бинарными форматами: Несмотря на то, что GLB — это бинарный формат, он все же может быть менее сжимаемым по сравнению с другими бинарными форматами для 3D-моделей, такими как FBX или Collada.

Оптимизация экспорта

При экспорте сцены из Babylon.js в формат glTF или GLB важно учитывать несколько аспектов для оптимизации:

  1. Размер текстур: Текстуры могут значительно увеличивать размер экспортируемого файла. Использование текстур меньшего размера или их сжатие (например, в формате PNG или JPEG) поможет уменьшить общий размер файла.
  2. Комплексность моделей: Сложные 3D-модели с высоким количеством полигонов могут привести к большим размерам файлов. Использование техник упрощения моделей или лодов (level of detail) может улучшить производительность.
  3. Параметры анимации: Если сцена включает множество анимаций, их экспорт может занять много места. Некоторые анимации, например, анимации камерами или освещением, можно исключить, если они не обязательны.

Заключение

Экспорт сцены из Babylon.js в формат glTF или GLB с использованием GLTF2Export — это эффективный способ создания 3D-ресурсов для веб-приложений. Это позволяет разработчикам легко переносить сцены между различными приложениями и платформами, а также обеспечивает быструю и качественную загрузку 3D-ресурсов в браузерах. Правильная настройка параметров экспорта и оптимизация сцены позволяют достичь баланса между качеством и производительностью, что является ключевым для успешной работы с веб-графикой.