Экспорт 3D моделей из Blender в CRYENGINE 5.2. FBX Import.

08. октября 2016 CRYENGINE 5 3

В этой статье речь пойдёт про импорт статичной геометрии из 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.

Примечание: Изображения кликабельны.

noostyche_blog_fbx_import_1

FBX Import имеет графический интерфейс, который позволяет осмотреть импортируемую геометрию в окне просмотра и настроить её свойства прежде, чем она будет преобразована в формат геометрии для движка (для статичной геометрии это .cgf).

noostyche_blog_fbx_import_2

Пример импорта статичной геометрии.

В этом примере произведём экспорт модели будильника из Blender в FBX-файл, а потом импортируем его в CRYENGINE 5. Модель будет содержать в себе два уровня детализации (Level of Detail = LoD) и физическую прокси, которая служит для просчёта столкновений. Финальный результат будет выглядеть так:

noostyche_blog_merkulova_fbx_import_3

 

1. Подготовка модели.

 

Для наглядности развёл в разные стороны основную модель (Alarm_clock), LOD`ы (LOD1, LOD2) и физическую прокси (proxy), но при экспорте в FBX они должны быть в нулевых координатах и их точки вращения (Pivot Point) должны быть в одной общей позиции.
noostyche_blog_fbx_import_4
Смотрим на правую часть скриншота, а именно на панель 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 расположены в одном и том же месте:

noostyche_blog_fbx_import_5

 

 

2. Экспорт в FBX.

 

  • Выделяем основную модель, в данном случае это Alarm_clock.
  • File / Export / FBX.

noostyche_blog_fbx_import_6

  • В открывшемся окне:

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.

noostyche_blog_fbx_import_7

  • Результат экспорта:
    noostyche_blog_fbx_import_8

 

3. Импорт FBX в CRYENGINE.

 

Конечной целью ниже описанных действий станет создание мультиматериала, подключение в него текстур и сохранение геометрии в формат статичной геометрии движка .cgf, что позволит размещать модель на уровне.

Примечание: Изображения кликабельны.

I. Запускаем инструмент FBX Import / Static geometry

noostyche_blog_fbx_import_1

II. В появившемся окне инструмента Import Static geometry жмём File / Import:

noostyche_blog_fbx_import_9

III. В появившемся окне Select file to import необходимо выбрать желаемый FBX-файл и нажать кнопку Import:

noostyche_blog_fbx_import_10

IV. Если на предыдущих этапах всё сделано правильно, то после непродолжительной загрузки можно будет увидеть примерно такое:

noostyche_blog_fbx_import_11

В данном случае это модель того самого будильника alarm_clock с набором LoD`ов и физической прокси, её как раз и наблюдаем. Красный цвет объекта означает, что на модель не назначен движковый материал с текстурами, это нам ещё предстоит.

 

 

4. Настройка импортируемой геометрии.

 

Сначала рассмотрим свойства нашего объекта, для этого более подробно изучим интерфейс:noostyche_blog_fbx_import_12

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 определяется сразу, потому что это родительский объект, который будет отображаться по умолчанию.

В моём случае получается вот так:

noostyche_blog_fbx_import_13

$LOD1_Alarm_clock = LOD1

$LOD2_Alarm_clock = LOD2

proxy = Physics Proxy

Physics Proxy не отрисовывается движком, но всё ещё участвует в просчёте столкновений, поэтому теперь будильник ничего не закрывает.

4.) Display — различные настройки окна просмотра, с ними можете ознакомиться самостоятельно в официальной документации.

Properties — свойства выделенного объекта. Чтобы они начали показываться нужно выделить один из объектов в Source View:

noostyche_blog_fbx_import_14

В этой статье не будем заострять внимание на описании параметров свойств объекта, в этом примере их стандартные значения оптимальны. Самостоятельно ознакомиться можно в официальной документации.

Material — вкладка настройки и создания материала. В данном примере будет мультиматериал, который будет включать в себя три подматериала: glass, metal и proxy.

noostyche_blog_fbx_import_15

А) 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…

noostyche_blog_fbx_import_16

Здесь предлагают сохранить ранее настроенный мультиматериал в виде mtl-файла. Файл нужно сохранить в туже папку, куда будет сохранена модель в формате статичной геометрии .cgf, который у нас получится после всех манипуляций в FBX Import. Если не сделать этого, то материал не подцепится к модели. У меня это та же папка, куда сохранял FBX-файл \Assets\objects\props\home_stuff\alarm_clock. Название mtl-файла желательно делать таким же, какое оно будет у .cgf. В этом примере это alarm_clock. Для подтверждения сохранения mtl-файла нужно нажать кнопку Save.

После недолгой компиляции мы сможем найти созданный материал в Material Editor, который можно открыть через Tools / Material Editor:

noostyche_blog_fbx_import_17

Вот так выглядит созданный материал:

noostyche_blog_fbx_import_18

А в окне Import Static geometry будет так:

noostyche_blog_fbx_import_19

Здесь мы видим, что теперь на модель назначился созданный мультиматериал — alarm_clock, который мы смотрели в Material Editor. К подматериалам этого мультиматериала по умолчанию автоматически подключается белая текстура, которую мы видим в окне просмотра.

 

5. Сохранение геометрии в формат статичной геометрии .cgf.

 

Наконец сохраним настроенную модель, а потом будем настраивать подматериалы.

1.) Выбираем File / Save As…, чтобы сохранить в .cgf.

noostyche_blog_fbx_import_20

2.) В появившемся окне Save As… нужно выбрать тот же путь, куда был сохранён mtl-файл мультиматериала. У меня это \Assets\objects\props\home_stuff\alarm_clock

3.) Название стоит указать такое же, как называется mtl-файл мультиматериала. У меня это alarm_clock.

4.) Жмём Save.

noostyche_blog_fbx_import_21

5.) Получаем результат:

noostyche_blog_fbx_import_226.) Вот так в движке:

noostyche_blog_fbx_import_23

На вид всё хорошо: LOD`ы и прокси подцепились, материал есть.

 

6. Настройка мультиматериала и подключение текстур.

 

1.) Открываем Material Editor и находим ранее созданный мультиматериал. Картина будет примерно такая:

noostyche_blog_fbx_import_24

2.) Подключаем заранее заготовленные текстуры к каждому подматериалу, кроме proxy, так как она не отрисовывается:

noostyche_blog_fbx_import_25

Вот так у proxy:

noostyche_blog_fbx_import_26

На этом всё, модель импортирована и полностью настроена для размещения на уровне в виде статической геометрии.

Официальный видео-урок по импорту FBX в CRYENGINE V:

 

P.S. Помимо альтернативного способа добавления своих моделей с помощью FBX Import есть возможность добавления своих текстур без использования Photoshop и плагина Crytif, где вместо них применяется Krita или любой другой желаемый 2D графический редактор, который способен сохранить текстуру в формат tif.