.GLB вариант №
GLB — это представление в формате двоичного файла 3D-моделей, сохраненных в формате передачи GL (glTF). Информация о 3D-моделях, такая как иерархия узлов, камеры, материалы, анимация и сетки в двоичном формате. В этом двоичном формате ресурс glTF (JSON, .bin и изображения) хранится в двоичном двоичном объекте. Это также позволяет избежать проблемы увеличения размера файла, которая происходит в случае glTF. Формат файла GLB обеспечивает компактный размер файла, быструю загрузку, полное представление трехмерной сцены и расширяемость для дальнейшей разработки. Формат использует model/gltf-binary в качестве типа MIME.
Формат файла GLB — дополнительная информация
Методы доставки контента, используемые glTF, требуют дополнительной обработки для декодирования двоичных данных в кодировке base-64, а также увеличивают размер файла на 33%. Эти методы доставки, которые способствовали формированию формата файла GLB, включают:
- glTF JSON указывает на внешние бинарные данные (геометрию, ключевые кадры, скины) и изображения.
- glTF JSON встраивает двоичные данные в кодировке base64 и встроенные изображения с использованием URI данных.
GLB как формат контейнера был представлен как формат двоичного файла для представления актива glTF в двоичном двоичном объекте, чтобы избежать проблем, вызванных glTF. Формат файла GLB спецификации должен быть указан для любой реализации для чтения/записи того же самого для разработки приложений. .
Файловая структура GLB
Формат файла GLB основан на прямом порядке байтов, и его структура показывает, что он содержит:
- 12-байтовая преамбула, озаглавленная заголовком.
- Один или несколько фрагментов, содержащих содержимое JSON и двоичные данные.
Заголовок GLB
Заголовок формата файла GLB состоит из трех 4-байтовых записей:
- магия uint32 - магия равна 0x46546C67. Это строка ASCII glTF, которая может использоваться для идентификации данных как двоичного glTF.
- Версия uint32 — указывает версию формата контейнера Binary glTF.
- uin32 length — общая длина Binary glTF, включая заголовок и все чанки в байтах
Чанки
Каждый фрагмент в файле GLB имеет следующую структуру:
uint32 | uint32 | убайт[] |
---|---|---|
chunkLength | chunkType | chunkData |
chunkLength
- длина chunkData в байтахchunkType
- указывает на тип чанкаchunkData
- бинарная полезная нагрузка чанка
где типы блоков:
# | Тип фрагмента | ASCII | Описание | Вхождения |
---|---|---|---|---|
1. | 0x4E4F534A | JSON | Структурированный контент JSON | 1 |
2. | 0x004E4942 | BIN | Двоичный буфер | 0 или 1 |
Начало и конец каждого фрагмента должны быть выровнены по 4-байтовой границе, и для этой цели следует использовать заполнение.
Структурированный контент JSON
Это должен быть самый первый фрагмент ресурса Binary glTF, который позволяет реализации постепенно извлекать ресурсы из последующих фрагментов. Это также дает возможность считывать только выбранное подмножество ресурсов из двоичного актива glTF, например самый грубый уровень детализации сетки. Чтобы соответствовать требованиям выравнивания, этот фрагмент должен быть дополнен завершающими символами пробела (0x20).
Двоичный буфер
Этот фрагмент содержит двоичную полезную нагрузку для геометрии, ключевых кадров анимации, обложек и изображений. Это должен быть второй фрагмент двоичного актива glTF, который должен быть дополнен завершающими нулями (0x00), чтобы удовлетворить требованиям выравнивания.