Ми стикалися з ситуацією: клієнт розробляє Android AR-додаток на ARCore, а 3D-моделі в FBX з Blinn-Phong матеріалами — не завантажуються. Одного разу втратили два дні на дебаг моделі, яка відображалася сірим квадратом — виявилося, UV-розгортка збита. GLB — бінарний контейнер формату glTF 2.0, стандарт Khronos glTF 2.0 Specification. ARCore, Sceneform, model-viewer, WebXR — всі використовують glTF/GLB. На відміну від USDZ, GLB працює кросплатформенно: Android AR, WebAR, Three.js, Babylon.js, Unity, Unreal. Але «відкритий стандарт» не означає «все просто конвертується без проблем». За роки роботи над AR-проектами ми виробили пайплайн, який гарантує сумісність та продуктивність — розповімо про нього. Погана конвертація призводить до перевитрати бюджету на повторну обробку: середня економія на зберіганні та передачі після Draco-стиснення становить 70–90%. Отримайте консультацію щодо пайплайну конвертації.
Структура GLB та вимоги для AR
glTF 2.0 описує сцену через JSON: меші, матеріали (PBR metallic-roughness workflow), анімації, скіни, камери, світло. GLB пакує JSON + бінарні дані (геометрія, анімації) + текстури в один файл.
Обов'язкові вимоги для Android ARCore / Sceneform:
- Матеріали тільки через
pbrMetallicRoughness— Blinn-Phong, Phong, Lambert не підтримуються - Текстури: PNG (з alpha) або JPEG (без alpha), max 2048×2048
- Геометрія: тільки трикутники (
TRIANGLESprimitive mode), не quads - Немає нереференсованих нод та матеріалів (валідатор свариться)
-
asset.generator— бажано вказувати (допомагає при дебазі сумісності)
Як конвертувати FBX, OBJ та USDZ в GLB?
FBX → GLB. Blender — найкращий проміжний конвертер:
blender --background --python fbx_to_glb.py -- input.fbx output.glb
Python-скрипт для Blender:
import bpy
bpy.ops.import_scene.fbx(filepath=input_path)
bpy.ops.export_scene.gltf(
filepath=output_path,
export_format='GLB',
export_materials='EXPORT',
export_animations=True,
export_apply=True # застосовує модифікатори
)
Головна проблема FBX → GLB через Blender: матеріали FBX часто використовують Standard або Lambert шейдери — Blender конвертує їх в Principled BSDF, але параметри (specular, shininess) маппяться приблизно. Результат потрібно перевіряти візуально.
OBJ → GLB. OBJ не підтримує анімацію, PBR-матеріали (тільки MTL з Kd/Ks), скіни. Для статичних об'єктів — конвертація через Blender або obj2gltf. MTL-файл маппиться в glTF pbrMetallicRoughness приблизно: Kd → baseColorFactor, map_Kd → baseColorTexture. Карти normal, roughness, metallic з MTL не підхоплюються — потрібно додавати вручну через glTF-пайплайн.
USDZ → GLB (iOS → Android). Apple Reality Converter може експортувати в USD/OBJ, потім через Blender в GLB. Прямого конвертера USDZ→GLB немає — обов'язковий проміжний крок через USD Python API або Blender.
Як виконується конвертація: покроково
- Підготовка вихідної моделі. Перевірка UV-розгортки, масштабу, PBR-матеріалів. Усунення дублів геометрії.
- Конвертація. Використовуємо Blender, obj2gltf або USD Python API залежно від формату.
- Постобробка. Ручна корекція матеріалів, видалення невикористовуваних нод, призначення doubleSided при необхідності.
Чому важлива оптимізація для мобільного AR?
Без оптимізації навіть проста модель може викликати лаги на середніх пристроях. Використовуємо три техніки:
Draco-стиснення. Стискає геометрію на 60–90% без видимої втрати якості. KTX2/Basis Universal текстури. GPU-стиснуті текстури, завантажуються швидше та займають менше VRAM. Basis Universal декодується на GPU — не потрібно розпаковувати в RAM. На Android AR знижує споживання пам'яті на 40–60%. Mesh quantization. Упаковка float32 координат вершин в int16 — втрата точності < 0.01%, виграш за розміром 25–40%.
Команди для оптимізації:
# Draco compression
npx gltf-pipeline -i model.glb -o model_draco.glb --draco.compressionLevel 7
# KTX2 textures
npx gltf-transform etc1s model.glb model_ktx2.glb
# Quantization
npx gltf-transform quantize model.glb model_quantized.glb
Валідація
glTF Validator від Khronos — обов'язковий перед деплоєм:
npx gltf-validator model.glb
Видає помилки та попередження з кодами. Коди типу ACCESSOR_ELEMENT_OUT_OF_MIN_BOUND — плаваючі значення поза допустимим діапазоном, часто з FBX-конвертації.
model-viewer (Google) — браузерний переглядач glTF, показує модель як в ARCore. Ідеальний для швидкої перевірки до встановлення на пристрій.
Типові помилки
| Помилка | Наслідок | Рішення |
|---|---|---|
| Модель без UV-розгортки | В ARCore біла або сіра | Розгорнути UV в Blender |
| Double-sided не вказаний | Внутрішні грані не видно | Додати doubleSided: true |
| Координати в дюймах замість метрів | Об'єкт мікроскопічний або гігантський | Масштабувати до метрів |
| Non-linear interpolation анімації | glTF не підтримує | Конвертувати в LINEAR або CUBICSPLINE |
Що входить в послугу конвертації під ключ
- Аналіз вихідних моделей (формат, матеріали, анімації)
- Конвертація в GLB з ручною корекцією матеріалів
- Оптимізація (Draco, KTX2, quantization)
- Валідація через glTF Validator та model-viewer
- Документація: звіт про конвертацію, чек-лист сумісності
- Гарантія: модель коректно відображається на ARCore-пристроях
Строки
| Об'єм | Строки |
|---|---|
| 1–10 моделей з ручною конвертацією та перевіркою | 1–3 дні |
| Автоматизований пайплайн FBX/OBJ → GLB | 1 тиждень |
| Пакет 50–200 моделей з оптимізацією та валідацією | 2–3 тижні |
Приклад конвертації
Нещодавно конвертували партію зі 100 моделей інтер'єрних меблів з FBX в GLB. Після Draco-стиснення середній розмір файлу зменшився з 25 МБ до 3 МБ. Клієнт відзначив, що додаток став завантажуватися вдвічі швидше на пристроях середнього сегмента.Зв'яжіться з нами для оцінки вашого проекту — ми підготуємо пропозицію з урахуванням економії до 60% на розмірі файлів. Замовте конвертацію з гарантією сумісності. Понад 100 успішно конвертованих проектів за роки роботи — довіряйте досвідченим інженерам.







