Мы сталкивались с ситуацией: клиент разрабатывает 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 успешно конвертированных проектов за годы работы — доверяйте опытным инженерам.







