Экспорт 3D моделей из Blender в CRYENGINE 5.2. FBX Import.
В этой статье речь пойдёт про импорт статичной геометрии из Blender в CRYENGINE 5.2 посредством FBX, что позволит довольно легко, не смотря на обилие текста и картинок ниже, интегрировать свои модели и текстуры в движок.
Примечание: Для понимания изложенного в статье необходимы базовые знания по работе с Blender и CRYENGINE 5. Так же хорошо будет ознакомиться с экспортом в движок из 3D max, нюансами по системам измерения для корректного отображения размеров в движке и Material Editor для настройки материалов и подключения текстур.
Вступление.
Импорт моделей в виде FBX-файла можно осуществить с помощью инструмента FBX Import, который появился ещё в Cryengine 3, но имел крайне скудный функционал, который не мог быть полной заменой специальных плагинов для 3D max и Maya. В те времена экспорт моделей из других 3D-пакетов (Blender, Cinema 4D, MODO и подобных) был практически невозможен, что являлось огромным минусом.
Сообщество требовало от Crytek альтернатив, так как далеко немногие компании и энтузиасты желали насильно использовать продукцию Autodesk. Люди пытались решить эту проблему самостоятельно, не видя встречных шагов от Crytek по созданию альтернативного экспорта геометрии в движок. Силами сообщества был создан плагин для Blender — CryBlend, который позволял быстро и просто экспортировать геометрию в форматы Cryengine, как это было в 3D max и Maya, для которых Crytek создали специальные плагины. К сожалению, у CryBlend было много проблем и его развитие протекало очень медленно, поэтому его использование для серьёзных проектов было крайне сомнительным.
К тому моменту в других движках схожего с Cryengine уровня уже была реализована возможность импорта геометрии и анимаций с помощь FBX, Collada и прочих универсальных форматов. Наконец Crytek, взглянув на конкурентов, осознали острую необходимость инструмента, который сообщество требовало около 4-х лет, и в CRYENGINE 5 FBX Import получил бурное развитие, безмерно порадовав разработчиков. Теперь пользователи Blender, MODO, Cinema 4D и прочих подобных программ получили возможность спокойно интегрировать свой контент в CRYENGINE.
Примечание: Если продолжать тему по использованию свободного ПО для работы с движком, то есть способ добавлять свои текстуры в движок без использования Photoshop и плагина Crytif, с ним можно ознакомиться в соседней статье этого блога.
Краткий обзор функционала инструмента FBX Import.
Инструмент FBX Import позволяет импортировать в CRYENGINE 5 статичную геометрию, анимации и скелеты. Кроме импорта FBX-файлов возможен импорт .dxf, .dae, .obj, и .3ds, однако, формат FBX более предпочтителен.
Примечание: В этой статье мы рассмотрим только импорт статичной геометрии в виде FBX-файла.
По умолчанию FBX Import можно найти во вкладке Tools в верхней панели инструментов CRYENGINE 5.
Примечание: Изображения кликабельны.
FBX Import имеет графический интерфейс, который позволяет осмотреть импортируемую геометрию в окне просмотра и настроить её свойства прежде, чем она будет преобразована в формат геометрии для движка (для статичной геометрии это .cgf).
Пример импорта статичной геометрии.
В этом примере произведём экспорт модели будильника из Blender в FBX-файл, а потом импортируем его в CRYENGINE 5. Модель будет содержать в себе два уровня детализации (Level of Detail = LoD) и физическую прокси, которая служит для просчёта столкновений. Финальный результат будет выглядеть так:
1. Подготовка модели.
Для наглядности развёл в разные стороны основную модель (Alarm_clock), LOD`ы (LOD1, LOD2) и физическую прокси (proxy), но при экспорте в FBX они должны быть в нулевых координатах и их точки вращения (Pivot Point) должны быть в одной общей позиции.
Смотрим на правую часть скриншота, а именно на панель Outliner (в правом верхнем углу).
- В представленном примере модель будильника имеет название Alarm_clock.
- Созданы развёртка и набор текстур (albedo, specular и normalmap с gloss в альфа-канале) .
- На модель назначено два стандартных материала без каких-либо дополнительных настроек: metal — материал корпуса будильника; glass — материал стекла, закрывающего циферблат. Текстуры в материалы не подключаю, это будет сделано в движке через тамошний редактор материалов.
- Для будильника сделано два уровня детализации (Level of Detail = LOD). Это упрощённые модели будильника, которые будут включаться на дистанции с целью оптимизации.
- LOD1 называется $LOD1_Alarm_clock.
- LOD2 называется $LOD2_Alarm_clock.
- На оба LOD`а назначены те же материалы (metal и glass), что и на основную модель (Alarm_clock).
Примечание: Префикс $LOD написал по привычке. Раньше он был нужен для указания движку, что та или иная модель ничто иное, как LOD. Для импорта FBX-файла через FBX Importer префикс не требуется, так как в FBX Importer указывается вручную, что есть LOD, а что основная геометрия и физическая прокси. - Для будильников создана упрощённая геометрия для физической прокси (proxy), которая будет служить для просчёта столкновений. На proxy назначен стандартный материал, который для удобства назвал так же — proxy.
- Основная модель (Alarm_clock), LOD`ы ($LOD1_Alarm_clock, $LOD2_Alarm_clock) и физическая прокси (proxy) должны быть в нулевых координатах и их точки вращения (Pivot Point) должны быть в одной общей позиции.
$LOD1_Alarm_clock, $LOD2_Alarm_clock и proxy небходимо прицепить к Alarm_clock с помощью инструмента Make Parent, который вызывается нажатием Ctrl + P.
ВАЖНО: Нужно обязательно прицепить LOD`ы и proxy к основной модели, в данном случае Alarm_clock, иначе FBX Importer выдаст ошибку, что LOD`ы и физическая прокси не могут быть не прицепленными к основной модели, и модель не будет создана.
Финальный вид перед экспортом в FBX-файл, где Alarm_clock, $LOD1_Alarm_clock, $LOD2_Alarm_clock и proxy расположены в нулевых координатах, и их Pivot Point расположены в одном и том же месте:
2. Экспорт в FBX.
- Выделяем основную модель, в данном случае это Alarm_clock.
- File / Export / FBX.
- В открывшемся окне:
1.) Указываем имя и путь до желаемой папки, куда будет сохранён FBX-файл.
ВАЖНО: FBX-файл должен быть в той же папке, куда будет сохраняться статичная геометрия в виде cgf-файла, которая будет использоваться непосредственно в движке для размещения на уровне. У меня это \Assets\objects\props\home_stuff\alarm_clock.
ВАЖНО: Корректный экспорт геометрии возможен только в директории папки Objects. Пример: Assets\objects\ и далее любая иерархия папок на латинице. Если у вас нет папки Objects, то её необходимо создать вручную и далее любую желаемую иерархию папок внутри неё.
2.) Проверяем настройки FBX. В Verison должен быть выбран FBX 7.4 binary.
3.) Производим экспорт, нажав кнопку Export FBX.
3. Импорт FBX в CRYENGINE.
Конечной целью ниже описанных действий станет создание мультиматериала, подключение в него текстур и сохранение геометрии в формат статичной геометрии движка .cgf, что позволит размещать модель на уровне.
Примечание: Изображения кликабельны.
I. Запускаем инструмент FBX Import / Static geometry
II. В появившемся окне инструмента Import Static geometry жмём File / Import:
III. В появившемся окне Select file to import необходимо выбрать желаемый FBX-файл и нажать кнопку Import:
IV. Если на предыдущих этапах всё сделано правильно, то после непродолжительной загрузки можно будет увидеть примерно такое:
В данном случае это модель того самого будильника alarm_clock с набором LoD`ов и физической прокси, её как раз и наблюдаем. Красный цвет объекта означает, что на модель не назначен движковый материал с текстурами, это нам ещё предстоит.
4. Настройка импортируемой геометрии.
Сначала рассмотрим свойства нашего объекта, для этого более подробно изучим интерфейс:
1.) General settings:
Input filename — имя файла, который был импортирован. В данном случае это alarm_clock.
Output filename — имя файла, который будет создан при нажатии File / Save и File / Save As…
Merge all nodes — указывает движку, что несколько отдельных объектов нужно обсчитывать как один.
Scene origin — по умолчанию RC.exe (компилятор CRYENGINE) игнорирует положение объектов в импортируемой сцене, при активированном Scene origin положение объектов в импортируемой сцене будет сохранено.
2.) Conversion Settings:
Unit — единицы измерения, в которых представлен размер объекта.
Scale — коэффициент размера объекта. Чем выше значение, тем больше будет объект. Обратная ситуация с меньшим значением.
Forward — ось направления объекта вперёд.
Up — ось направления объекта вверх.
3.) Source View & Target View — здесь показывается иерархия объектов импортируемой из FBX сцены и указывается, что есть что. В выпадающих свитках можно выбрать какая модель в иерархии будет являться LOD1, LOD2 и Physics Proxy — физической прокси для просчёта столкновений. LOD0 определяется сразу, потому что это родительский объект, который будет отображаться по умолчанию.
В моём случае получается вот так:
$LOD1_Alarm_clock = LOD1
$LOD2_Alarm_clock = LOD2
proxy = Physics Proxy
Physics Proxy не отрисовывается движком, но всё ещё участвует в просчёте столкновений, поэтому теперь будильник ничего не закрывает.
4.) Display — различные настройки окна просмотра, с ними можете ознакомиться самостоятельно в официальной документации.
Properties — свойства выделенного объекта. Чтобы они начали показываться нужно выделить один из объектов в Source View:
В этой статье не будем заострять внимание на описании параметров свойств объекта, в этом примере их стандартные значения оптимальны. Самостоятельно ознакомиться можно в официальной документации.
Material — вкладка настройки и создания материала. В данном примере будет мультиматериал, который будет включать в себя три подматериала: glass, metal и proxy.
А) Material name — название материалов, которые будут являться частью мультиматериала и являться подматериалами (sub-material). К каждому из них в Material Editor движка будет применён отдельный шейдер (к стеклу циферблата — Glass, к корпусу будильника — Illum, к proxy — NoDraw). В моём случае три подматериала: glass, metal и proxy. Да, это те самые материалы, которые я назначал в Blender.
Б) Sub-material — порядковый номер подматериала в создаваемом мультиматериале, который можно выбрать в выпадающем свитке. Здесь для своего удобства выбираем порядок расположения подматериалов в будущем мультиматериале, который позже нужно будет настроить с помощь Material Editor в движке. Можно оставить Automatic, если порядок непринципиален. В этом примере сделал следующим образом: glass = 0, metal = 1, proxy = 2.
В) Physicalization — в выпадающем списке для каждого подматериала можно выбрать тип физикализации.
none — отсутствие физикализации. К примеру, различные статичные мелкие объекты лучше делать нефизическими, потому что они будут больше провоцировать застревания и прочие проблемы, чем обогатят геймплей, так же не стоит забывать, что просчёт столкновений занимает вычислительные ресурсы, что снижает производительность.
default — тип физикализации без использования физической прокси (Physics Proxy), где в качестве прокси используется основная модель (LOD0). Нежелательно использовать этот тип физикализации, если в основной модели более 100 треугольников, так как для минимализации расхода вычислительных ресурсов на просчёт столкновений нужно использовать физическую прокси с минимальным числом треугольников.
Примечание: Тип физикализации default несовместим с physical proxy (no draw) при применении в одном мультиматериале, так как они по сути дублируют друг друга.
obstruct — специальная физикализация для просчёта сопротивления воздуха. Применяется в разрушаемой растительности для просчёта скорости падения кроны при разрушении ствола. Ознакомиться подробнее можно в официальной документации.
no collide — специальная физикализация, которая применяется для физической растительности. Когда игрок входит в зону действия прокси с no collide, то происходит активация костей в физической растительности. Когда игрок покидает зону действия, то кости деактивируются для оптимизации.
proxy only (no draw) — physical proxy (no draw) — основной тип физикализации, который применяется к специальной упрощённой модели (физической прокси) для просчёта столкновений. При этом модель не будет отрисовываться (no draw) — станет невидимой в целях оптимизации.
Г) В данном примере используется только один тип физикализации — proxy only (no draw) — physical proxy (no draw), который применён к proxy. Для остальных подматериалов (glass и metal) физикализация не используется — none, так как физическая прокси (proxy) покрывает всю модель.
Примечание: При переключении LOD`ов физическая прокси продолжает использоваться, поэтому её не нужно делать для каждого LOD отдельно.
Д) Когда по мультиматериалу всё настроено, жмём кнопку Generate material. Откроется окно Save new materail as…
Здесь предлагают сохранить ранее настроенный мультиматериал в виде mtl-файла. Файл нужно сохранить в туже папку, куда будет сохранена модель в формате статичной геометрии .cgf, который у нас получится после всех манипуляций в FBX Import. Если не сделать этого, то материал не подцепится к модели. У меня это та же папка, куда сохранял FBX-файл \Assets\objects\props\home_stuff\alarm_clock. Название mtl-файла желательно делать таким же, какое оно будет у .cgf. В этом примере это alarm_clock. Для подтверждения сохранения mtl-файла нужно нажать кнопку Save.
После недолгой компиляции мы сможем найти созданный материал в Material Editor, который можно открыть через Tools / Material Editor:
Вот так выглядит созданный материал:
А в окне Import Static geometry будет так:
Здесь мы видим, что теперь на модель назначился созданный мультиматериал — alarm_clock, который мы смотрели в Material Editor. К подматериалам этого мультиматериала по умолчанию автоматически подключается белая текстура, которую мы видим в окне просмотра.
5. Сохранение геометрии в формат статичной геометрии .cgf.
Наконец сохраним настроенную модель, а потом будем настраивать подматериалы.
1.) Выбираем File / Save As…, чтобы сохранить в .cgf.
2.) В появившемся окне Save As… нужно выбрать тот же путь, куда был сохранён mtl-файл мультиматериала. У меня это \Assets\objects\props\home_stuff\alarm_clock
3.) Название стоит указать такое же, как называется mtl-файл мультиматериала. У меня это alarm_clock.
4.) Жмём Save.
5.) Получаем результат:
На вид всё хорошо: LOD`ы и прокси подцепились, материал есть.
6. Настройка мультиматериала и подключение текстур.
1.) Открываем Material Editor и находим ранее созданный мультиматериал. Картина будет примерно такая:
2.) Подключаем заранее заготовленные текстуры к каждому подматериалу, кроме proxy, так как она не отрисовывается:
Вот так у proxy:
На этом всё, модель импортирована и полностью настроена для размещения на уровне в виде статической геометрии.
Официальный видео-урок по импорту FBX в CRYENGINE V:
P.S. Помимо альтернативного способа добавления своих моделей с помощью FBX Import есть возможность добавления своих текстур без использования Photoshop и плагина Crytif, где вместо них применяется Krita или любой другой желаемый 2D графический редактор, который способен сохранить текстуру в формат tif.
А где в документации написано что нужно именно таким образом подцеплять друг к другу объекты(parent’ить) в Outliner’e, а не как-то произвольно? И потом, как скажем коллайд меши костей через FBX экспортировать(создать, назвать, куда припарентить) ? VCloth 2.0 ? 🙂
В официальной документации это никак не описано, потому что Crytek не
работают с Blender. Необходимость установить обозначенные в статье
зависимости выведена логическим и экспериментальным путём.
Данная статья об основах экспорта в FBX и импорта статичной геометрии в движок, а про экспорт и импорт скелетов и заскиненных мешей можно почитать самостоятельно:
http://docs.cryengine.com/display/CEMANUAL/FBX+Import#FBXImport-Skin
Класс) Спасибо)