Один объект переносится в Unreal Engine почти без проблем, а экстерьерная сцена целиком ведёт себя иначе. Сцена целиком ведёт себя иначе: объекты разъезжаются, повторяющиеся элементы превращаются в тысячи отдельных мешей, освещение не совпадает, а проект начинает весить в разы больше, чем должен.
Посмотрим, чем перенос сцены отличается от переноса модели, как сохранить расположение объектов, что делать с повторяющейся геометрией и почему часть работы правильнее делать уже в движке.
Чем сцена отличается от одного объекта
Перенос одной модели это перенос геометрии. Перенос сцены это перенос структуры: какие объекты есть, где они стоят, какие из них повторяются, что чему принадлежит.
Формат обмена умеет передавать положение объектов, но делает это по-разному в зависимости от настроек, и по умолчанию почти всегда не так, как нужно.
Вторая принципиальная разница: в сцене есть повторяющиеся элементы. Сто одинаковых кирпичей это либо сто копий, каждая со своей геометрией, либо сто экземпляров одной. От того, как их перенести, зависит вес проекта и производительность.
Базовый порядок экспорта отдельной модели разобран в материале про экспорт из Blender в UE5, здесь про то, что добавляется при переносе целой сцены.
Один файл или много
Первое решение, которое определяет всё остальное.
Всё в одном файле. Вся сцена уезжает единым экспортом с сохранением взаимного расположения. Просто, но получается монолит: править отдельный объект нельзя, повторно импортировать приходится всё целиком.
Каждый объект отдельно, сцена собирается в движке. Больше работы на старте, но дальше гибко: объект правится и переимпортируется независимо, повторяющиеся элементы становятся экземплярами автоматически.
Практическое правило: если сцена одноразовая и нужна для рендера, первый вариант. Если это уровень, с которым будут работать дальше, второй.
Компромисс, который чаще всего и применяют: уникальные крупные объекты отдельными файлами, а расположение переносится отдельно как схема расстановки.
Начало координат: главная причина разъезжающихся объектов
Каждый объект имеет собственную точку отсчёта, и от неё зависит, куда он встанет в движке.
Если точка отсчёта объекта лежит в мировом нуле Blender, а сам объект стоит в ста метрах от него, то при поштучном экспорте объект приедет в движок в свои сто метров. Это правильно для сцены целиком и неправильно, если вы хотите переиспользовать объект как ассет.
Обратная ситуация: точка отсчёта в центре объекта, и тогда каждый объект приезжает в ноль движка, а расстановку надо делать заново.
Рабочий подход: для переиспользуемых ассетов точка отсчёта в основании объекта, для сцены целиком расстановка переносится отдельно.
Проверка перед экспортом простая: выделите все объекты и посмотрите, где находятся их точки отсчёта. Разнобой здесь означает проблемы в движке.
Повторяющиеся элементы
Самая большая разница по весу проекта.
В Blender копия объекта может быть связанной: геометрия одна, а отображается в нескольких местах. При экспорте такие копии по умолчанию превращаются в независимые меши, и вместо одного дерева весом в мегабайт вы получаете сто деревьев по мегабайту.
Правильный порядок: экспортировать один экземпляр как ассет, а в движке расставить копии, ссылающиеся на него. Тогда память занимает одна геометрия.
Для большого количества повторов есть отдельный механизм: массив экземпляров, который движок отрисовывает за один проход. Для растительности и мелких объектов это единственный практичный путь.
Практический признак, что сделано неверно: проект весит сотни мегабайт при визуально простой сцене.
Масштаб и единицы
Движок работает в сантиметрах, Blender по умолчанию в метрах. Расхождение в сто раз это классика переноса.
При переносе сцены проблема усугубляется: если масштаб не применён у части объектов, разъедутся не только размеры, но и расстояния между объектами.
Обязательный шаг перед экспортом: применить масштаб ко всем объектам сцены. Не к одному, а ко всем, включая те, которые кажутся нетронутыми.
Быстрая проверка после импорта: измерьте в движке габарит известного объекта. Если дверь получилась высотой двести метров, единицы перепутаны.
Материалы: что переносить, а что делать заново
Материалы переносятся хуже всего, и это нормально: движки устроены по-разному.
Переносится связка текстур и базовых параметров. Не переносятся процедурные материалы, сложные узловые схемы, всё, что вычисляется во время рендера.
Практический подход для сцены: не пытаться перенести материалы как есть. Вместо этого сделать в движке набор базовых материалов и назначить их при импорте.
Это выглядит как лишняя работа, но на сцене из сотни объектов с двадцатью материалами оказывается быстрее, чем чинить каждый перенесённый.
Отдельный момент: имена материалов. Если в Blender материалы названы осмысленно, движок может назначить соответствия автоматически при пакетном импорте.
Освещение не переносится
Точнее, источники света переносятся, но результат будет другим.
Причина в том, что модели освещения разные. Значения мощности, единицы измерения, поведение теней, работа с отражённым светом отличаются принципиально.
Отсюда правило: свет ставится в движке заново. Перенесённые источники годятся разве что как ориентир по расположению.
То же касается и настроек окружения: карта окружения переносится как файл, а всё остальное настраивается на месте.
Коллизии
Для статичного рендера они не нужны, для уровня обязательны.
Движок умеет генерировать простые коллизии автоматически, и для коробок это работает. Для сложной геометрии автоматика даёт либо слишком грубый результат, либо слишком дорогой.
Ручной способ: в Blender рядом с объектом моделируется упрощённая форма с определённым префиксом в имени, и движок распознаёт её как коллизию при импорте.
Практическое правило для экстерьера: здания и крупные объекты получают ручные коллизии, мелкий декор обходится без них вовсе.
Растительность и мелкие объекты
Отдельная категория, которую переносить в лоб нельзя.
Трава, кусты, мелкие камни в количестве тысяч штук убьют и экспорт, и импорт, и производительность.
Правильный подход: перенести несколько уникальных экземпляров как ассеты, а расстановку сделать в движке инструментами распределения по поверхности. Движок для этого приспособлен лучше, и результат легче править.
Бонус такого подхода: расстановка становится процедурной, и изменение плотности или замена вида растения делается за секунды вместо переделки в Blender и повторного экспорта.
Что проверить сразу после импорта
Короткий список, который ловит большинство проблем.
Габариты известного объекта: масштаб.
Расположение объектов относительно друг друга: не разъехались ли.
Ориентация: движок считает вертикалью другую ось, и сцена может приехать лежащей на боку.
Число мешей в проекте: если их столько же, сколько объектов было в сцене, экземпляры не сработали.
Вес проекта: неожиданно большой размер означает дублирующуюся геометрию или текстуры в избыточном разрешении.
Нормали: вывернутые поверхности видны как пропадающие стены.
Порядок, который экономит время
Схема, снимающая большинство переделок.
Сначала перенести один объект из сцены и убедиться, что масштаб, ориентация и материалы работают как ожидается.
Потом перенести десяток объектов и проверить расстановку.
Потом уникальные крупные объекты по отдельности.
Потом расстановку и повторяющиеся элементы.
И в самом конце свет, коллизии и постобработку в движке.
Ошибка, которая стоит дороже всего: экспортировать всю сцену одним файлом первым же действием и выяснять, что не так, на результате из тысячи объектов.
Что лучше делать сразу в движке
Часть работы бессмысленно готовить в Blender.
Освещение. По причинам выше.
Расстановка растительности. Инструменты движка удобнее и результат легче менять.
Уровни детализации. Движок строит их автоматически и делает это неплохо.
Постобработка. Цветокоррекция, туман, глубина резкости. В Blender это настраивается иначе и не переносится.
Анимация камеры. Удобнее и гибче в движке, особенно если планируется интерактивность. Перенос анимации персонажей это отдельная тема, разобранная в материале про анимацию из Blender в UE5.
Частые вопросы
Почему объекты разъехались после импорта?
Чаще всего из-за точек отсчёта: часть объектов экспортирована относительно своего центра, часть относительно мирового нуля. Проверьте расположение точек отсчёта до экспорта.
Можно ли перенести сцену с сохранением иерархии?
Да, родительские связи переносятся. Но сложные зависимости вроде ограничений и модификаторов нет: их надо применить до экспорта или воссоздать в движке.
Почему проект весит гигабайты при простой сцене?
Обычно повторяющаяся геометрия превратилась в независимые копии либо текстуры импортированы в избыточном разрешении. Проверьте число уникальных мешей и размер текстур.
Нужно ли переносить сцену целиком или собирать в движке?
Для разового рендера целиком быстрее. Для уровня, с которым предстоит работать, сборка в движке окупается уже на первых правках.
Что делать с процедурными материалами?
Запечь в текстуры перед экспортом либо воссоздать узлами движка. Прямого переноса не существует, и рассчитывать на него не стоит.
Перенесите сначала один кусок сцены, а не всё сразу. Так вы увидите, что теряется по дороге, пока это ещё дёшево исправить.
