Що таке файл GLB?
GLB — це представлення 3D-моделей у двійковому форматі файлів, збережених у форматі передачі GL (glTF). Інформація про 3D-моделі, як-от ієрархія вузлів, камери, матеріали, анімація та сітки, у двійковому форматі. Цей двійковий формат зберігає актив glTF (JSON, .bin і зображення) у двійковому блобі. Це також дозволяє уникнути проблеми збільшення розміру файлу, яка трапляється у випадку glTF. Формат файлу GLB забезпечує компактний розмір файлу, швидке завантаження, повне представлення 3D-сцени та можливість розширення для подальшого розвитку. Формат використовує модель/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 magic - магія дорівнює 0x46546C67. Це рядок ASCII glTF, який можна використовувати для ідентифікації даних як двійкового glTF
- версія uint32 - вказує версію формату контейнера Binary glTF
- uin32 length - загальна довжина двійкового glTF, включаючи заголовок і всі фрагменти в байтах
Шматки
Кожна частина у файлі GLB має таку структуру:
uint32 | uint32 | ubyte[] |
---|---|---|
chunkLength | chunkType | chunkData |
chunkLength
- довжина chunkData в байтахchunkType
- вказує вказує на тип блокуchunkData
- бінарне корисне навантаження блоку
де типи фрагментів:
# | Тип блоку | ASCII | Опис | Виникнення |
---|---|---|---|---|
1. | 0x4E4F534A | JSON | Структурований вміст JSON | 1 |
2. | 0x004E4942 | BIN | Двійковий буфер | 0 або 1 |
Початок і кінець кожного фрагмента повинні бути вирівняні до 4-байтової межі, і для цієї мети слід використовувати доповнення.
Структурований вміст JSON
Це має бути найперша частина активу Binary glTF і дає можливість реалізації поступово отримувати ресурси з наступних частин. Це також надає можливість читати лише вибрану підмножину ресурсів із двійкового активу glTF, наприклад найгрубішу LOD сітки. Щоб відповідати вимогам вирівнювання, цей блок має бути доповнений пробілами (0x20).
Двійковий буфер
Цей фрагмент містить бінарне корисне навантаження для геометрії, ключових кадрів анімації, оболонок і зображень. Він має бути другою частиною активу Binary glTF і має бути доповнений кінцевими нулями (0x00), щоб задовольнити вимоги до вирівнювання.