GLTF или FBX: что подавать движку и почему Unity плачет

21 авг 2026 · 7 мин · 💬 1

Каждый раз одно и то же: модель идеально выглядит в Blender, летит в движок и разворачивается на 90 градусов, уменьшается в сто раз и теряет половину текстур. Виноват не художник и не движок. Виноват формат обмена — и то, что никто не читает, что именно он несёт. Разбираю честную карту двух главных форматов.

FBX: старый комбайн

FBX — проприетарный формат Autodesk, фактически стандарт индустрии лет двадцать. Несёт в себе: меши, скелет, анимацию, камеры, света, материалы (частично). Проблема в том, что «частично» — ключевое слово. FBX-экспортёр Blender передаёт только Standard/Physically Based материалы, и то криво: roughness иногда уезжает в specular, нормали путают OpenGL/DirectX-конвенцию.

Типичные болячки FBX: - Единицы измерения. Экспортёр умеет «Apply Unit» и «Forward/Up» — и по умолчанию они настроены под Maya, не под Unreal. Результат: рост персонажа 2 см или 20 метров. - Оси. Blender — Z вверх, Unreal — Z вверх, но X вперёд; Unity — Y вверх. Одна незакрытая галочка «Apply Transform» — и весь уровень лежит на боку. - Дубликаты материалов. Каждый экспорт добавляет материал с суффиксом .001. Через месяц в проекте 47 вариантов «wood_bark».

GLTF: язык веба, приехавший в игры

GLTF (бинарный вариант — GLB) — открытый стандарт, «JSON + буферы», спроектирован чтобы грузиться быстро и предсказуемо. Что он несёт: меши, PBR-материалы точно по спецификации (metallic-roughness), анимацию, морфы, KTX2-текстуры через расширения.

Сильные стороны: - Масштаб в GLTF — вопрос соглашения, а не спецификации: сам формат единиц не задаёт, но все хосты трактуют 1 юнит как метр. Никаких «Apply Unit», никакой лотереи. - Материалы интерпретируются однозначно: metallicRoughness-текстура — это зелёный (roughness) и синий (metallic) каналы одного PNG, и все движки читают это одинаково. - Компактнее и парсится быстрее: Blender → three.js/Babylon/Unity без прослойки.

Слабые стороны: туториальная поддержка скелетов сложнее, исторические анимационные пакости, часть старых пайплайнов его просто не понимает. И расширения — палка о двух концах: KHR_materials_emissive_strength поймут не все.

Почему Unity плачет именно от FBX

Unity импортирует FBX через закрытый SDK Autodesk. Он делает всё возможное, но: конвенция осей, смёрженные трансформы, бейды, имя материала — каждое место, где экспортёр и импортёр думают чуть-чуть по-разному. Итог — тот самый «перевёрнутый на 90°» меш. GLTF-же импортёры (например, UniGLTF) читают открытую спецификацию, где нечего трактовать двояко.

Мои правила после трёх лет граблей

  1. Веб, мобильные, простые ассеты — GLTF/GLB, без раздумий.
  2. Unreal + скелетная анимация + старые туторы — FBX, но всегда с пресетом под целевой движок (Unreal: Forward X, Up Z, без Apply Unit — движок сам пересчитает).
  3. Перед импортом — тестовый куб 1×1×1 метр в той же сцене. Куб встал криво — проблема в экспорте, а не в модели.
  4. Материалы после импорта перепроверять глазами: файл конфигурации формата не заменяет скриншот.

Формат — не контейнер «для файлов», а договорённость. Плачут все, кто заключает сделку, не прочитав её условий.

Комментарии (1)

Форма для гостей комментариев пока не принимается — писать можно автору (expeot@outlook.com) или через владельца блога. Все записи выше настоящие, никто их не модерирует молча.