Экспорт 3D моделей из Blender в игровые движки. Часть 1. Экспорт из Blender в Unity 3D моделей. Как перенести 3d модель в Unity3D, Unreal Engine, UDK, CryEngine, Amazon Lumberyard.

Как правильно экспортировать 3D модель в Unity

В данной статье рассказывается про экспорт из Blender в Unity 3D моделей в формате FBX для игровых движков, в частности, для Unity3D, Unreal Engine, UDK, CryEngine, Amazon Lumberyard. В данной части статьи будут рассмотрены основные пункты меню экспорта Blender.

Экспорт 3D моделей из Blender в игровые движки. Unreal Engine, UDK, CryEngine, Amazon Lumberyard, Unity3d импорт моделей. Часть 2.

Экспорт 3D моделей из Blender в игровые движки. Как экспортировать из blender в Unity 3d, Unreal Engine, UDK, CryEngine, Amazon Lumberyard. Часть 3. Ориентация 3D модели в пространстве. Локальные оси.

Экспорт 3D моделей из Blender для игровых движков. Импорт моделей в Unity из Blender. Часть 4. Origin, Pivot Point, центр 3D модели.

Экспорт 3D моделей из Blender в Unity3D, Unreal Engine, UDK, CryEngine, Amazon Lumberyard. Часть 5. Blender экспорт текстуры и материалов.

Экспорт 3D моделей из Blender в игровые движки. Часть 6. Как добавить 3d модель в unity, Unreal Engine, UDK, CryEngine, Amazon Lumberyard.

Как вы, возможно, замечали, у некоторых импортированных в Unity3D моделей встречаются перепутанные локальные оси. Даже ассеты в магазинах (например, Asset store) грешат этим, хотя зачастую авторы ассетов честно об этом предупреждают или исправляют направление локальных осей в следующих версиях ассетов. Хорошо, если путаница с осями 3D модели выясняется в самом начале работы с 3D моделью и проектом, а не тогда, когда вы решили, что теперь вашу модель необходимо вращать или перемещать, да еще и относительно локальных осей/в локальных координатах (а автор ассета давно забросил свой ассет на сторе или 3D художник фрилансер, сдавший вам модель, отчалил на отдых на Бали), но что делать, если такое произошло? Исправлять направление локальных осей, а это — время, а время — деньги. Либо использовать костыль, создав на сцене пустышку и сделать пустышку объектом-родителем такой неправильно экспортированной 3D модели, а саму 3D модель, соответственно, дочкой объекта-пустышки. Но для определенных целей вам может потребоваться объект-пустышка с отличными от созданной пустышки координатами и придется городить новый огород. Так что… Не стоит упускать из виду направление локальных осей в покупаемых, создаваемых и используемых 3D моделях.

Как же экспортировать 3D модели из Blender? В справке Unity на веб-страницах Руководство экспорта FBX, Как мне импортировать модели из моего 3D редактора?, Импортирование объектов из Blender, Использование Blender и Rigify, хотя и упоминается поддержка нативных форматов приложений для создания трехмерного контента (типа blend файлов), но советуют использовать файлы формата .obj и fbx (хотя использование нативные форматов, например, файлов .blend, позволяет на лету обновлять импортированную в Unity 3D модель, достаточно лишь сохранять 3D модель в папку проекта). Давайте, прежде чем лезть в дебри, посмотрим, что нам предлагает меню экспорта 3D модели в формате fbx в

На рисунке показано меню экспорта в Blender для версий 2.75 и 2.76
На рисунке показано меню экспорта в Blender для версий 2.75 и 2.76.

 

Меню экспорта

Раздел “Export FBX” окна экспорта в формат .fbx в Blender содержит множество настроек, самые основные и интересные из которых мы и рассмотрим в данной статье.
Меню экспорта в формате fbx в Blender 2.75 несколько отличается от меню в Blender версии 2.76b – теперь параметры экспорта не свалены в одну кучу, а разбиты на категории, для каждой из которых создана своя вкладка: Main, Geometries, Armatures, Animation. В данной статье я буду ориентироваться на меню экспорта Blender версии 2.75.

Горизонтальные вкладки типов экспортированных объектов (выделены на рисунке зеленым):
Меш/Mesh. Если нажата данная кнопка, то экспортированы будут все расположенные на сцене 3D модели, за исключением того случая, когда поставлен флаг напротив опции “Selected Objects” (на рисунке выделено фиолетовым). Про экспорт и импорт группы объектов рассказывается в статье про мультиматериалы Модульные персонажи или как переодеть своего героя. Мультиматериалы в Blender и Unity 3D. Мультитекстуры и как перенести сцену целиком из Blender’а в Unity3D.

— Опция Выбранные/Selected ограничивает экспорт выбранными/активными 3D моделями. Какой объект или объекты (включая арматуру, свет, камеру и прочие) были выбраны на сцене в Blender’е, такие и будут экспортированы.

Armature/Арматура. Данная опция отвечает за экспорт костей — арматуры/скелета и записанных анимаций. Если выбрана лишь одна эта кнопка среди всей линейки доступных элементов для экспорта, то экспортирован будет лишь скелет, который без связанных с ним объектов, например, 3D модели или источников света. Если вы записали анимацию с использованием костей арматуры, то она (анимация) также будет экспортирована вместе с арматурой. Арматура без меша, как с анимацией, так и без, может быть использована для назначения ее костям отдельных 3D моделей, зачастую неорганических объектов (частей роботов, боевых мехов, андроидов и т.д.) в самом Unity 3D. Данный подход позволяет делать 3D модели разрушаемыми. Также вы можете анимировать кости скелета непосредственно в Unity3D. Более подробно про назначение игровых объектов костям скелета/арматуры в Unity и Blender’е будет рассказано в отдельной статье///.

На рисунке показано соответствие объектов в папке ассетов, окне Иерархии и отображение одного из них (арматуры) на сцене, точнее неотображение, поскольку отображать у одной лишь арматуры нечего, кроме осей для костей.
На рисунке показано соответствие объектов в папке ассетов, окне Иерархии и отображение одного из них (арматуры) на сцене, точнее «неотображение», поскольку отображать у одной лишь арматуры нечего, кроме осей для костей.

Также, если выбрана кнопка Арматуры и кнопка Меша, то будет экспортирована сама 3D модель, арматура и записанные анимации, т.е. сразу все необходимое для создания полноценного игрового персонажа/объекта, конечно, кроме текстурных карт: диффузной, карты нормалей, затенений, отражений и так далее. Но текстуры экспортируются отдельно.
Одним разработчикам больше нравятся именно такие комплекты из меша персонажа и его анимаций, экспортированные одним файлом, а кто-то привык работать ,когда меш персонажа с арматурой находятся в одном файле, а анимации – в отдельном файле или в нескольких файлах. Хочу также отметить, что анимации можно экспортировать, как все сразу в одном файле, так и по отдельности, т.е. либо для каждой анимации (которая, в свою очередь, может состоять из нескольких анимаций) создавать свой собственный файл (например, walkcycle.fbx, jumpdown.blend, climb.fbx), либо свалить все анимации в один файл, например, all_animations.fbx, и уже в Unity3D разбить/нарезать содержащиеся в нем анимации на отдельные треки для использования, например, в аниматоре Animator.

Lamp/Освещение. Каждый источник света импортируется в Unity3D как пустышка, координаты которых могут быть использованы для точного выставления источников света в Unity. Представьте, что вы в Blender’е создали жертвенный алтарь и подобрали позиции для источников света таким образом, что тем самым создали свою непередаваемую жуткую атмосферу.

На рисунке показаны выставленные источники света
На рисунке показаны выставленные источники света

Что же вам теперь, заново выставлять все источники света в Unity3D? Нет, экспортируйте 3D модель алтаря вместе с источниками света, а на их место определите источники света Unity3D.

На рисунке – пустышки-свет и локальные координаты
На рисунке – пустышки-свет и локальные координаты

Итак, пустышки для света есть, повернуты как нужно, но как же задать координаты для созданных в Unity нативных источников света, ведь координаты импортированных пустышек света заданы в локальных координатах. Для отображения позиции объектов в мировых координатах, достаточно в папке Editor (если ее не существует, то создайте ее) создать javascript, например, с именем “WorldPosViewer” следующего содержания:

 

На рисунке – позиция в мировых координатах
На рисунке – позиция в мировых координатах

Если вы не хотите связываться со скриптами, то вы можете разорвать зависимость между пустышками-светом и родительской пустышкой “sculls” простым перетаскиванием пустышек-света в корень окна иерархии Hierarchy, на один уровень с, например, имеющимися у меня, “Quad”, “New Text”, “GameObject” и т.д. Но будьте готовы к “разрушению” экземляра префаба (который, впрочем, вы сможете собрать заново), о чем вас предупредит диалоговое окно Unity “This action will break the prefab instance. Are you sure you wish to continue?”.

На рисунке показан альтернативный способ, как узнать глобальные координаты (мировые координаты) позиции дочерних объектов в Unity3D.
На рисунке показан альтернативный способ, как узнать глобальные координаты (мировые координаты) позиции дочерних объектов в Unity3D.

Теперь вы знаете позицию пустышек-света в мировых координатах (глобальных координатах), так что можете создать нативные источники света в Unity3D (прожекторы, точечные источники света и т.д.) и выставить для них соответствующие значения.

Теперь вы можете сделать созданные нативные источники света дочерними для главной пустышки.

Если вы не хотите ничего знать про мировые координаты объекта, вытаскивать дочку из под “крыла” родителя (родительского объекта), а потом опять делать его дочерним к нему, то вы можете воспользоваться скриптом для редактора Unity, который позволяет копировать координаты объекта, расположенного на сцене (соответственно, присутствующему в коне иерархии “Hierarchy”), и назначать их другому объекту.

 

Создайте C# скрипт TransformCopier в папке “Editor” и замените в нем все внутренности на следующий код: