Экспорт из Blender в Unity или почему старые секреты уже не актуальны

в 13:35, , рубрики: blender, export, FBX, game development, unity, unity3d, Работа с анимацией и 3D-графикой, метки: , , ,

Данная публикация будет скорее опровержением некоторых неточностей в публикации «Секреты экспорта из Blender в Unity». Описанные в ней секреты и, в особенности, скрипты, настолько устарели, что я решился на написание новой статьи.

Раньше были достаточно ощутимые проблемы в Blender при работе с FBX. Blender не понимал общепринятый, если так можно назвать, стандарт Hard edge (они же острые ребра, группы сглаживания, в Blender называются Sharp Edge). Нельзя было экспортировать данные о Tangents. Ну и самая глобальная проблема — некорректные оси у модели при импорте в популярные движки, системы координат которых отличаются от Blender. Но все или большинство проблем уже являются надуманными по незнанию некоторых особенностей. Интересно? Прошу под кат.

Меня зовут Белоусов Леонид. На Хабре это моя первая статья. Я занимаюсь 3D около 8 лет. Сперва это был 3d Max. Потом Maya. Датой начала использования Blender была дата релиза версии 2.5. Да, именно тогда когда в Blender изменился интерфейс, который и присутствует там по сей день. О том, почему выбрал Blender, возможно, напишу отдельную статью, но сейчас не об этом.

Какую версию использовать

На текущий момент версия 2.74.4.

Мои рекомендации по поводу версий. Очень рекомендую использовать 2 версии Blender:

1) Официальная стабильная версия, установленный exe с официального сайта с регистрацией в системе. Это необходимо для некоторых приложений. Например, игровой движок Unity. Unity использует Blender для импорта *.blend файлов. Но если приложение не увидит Blender зарегистрированным в системе, blend файлы в Unity не импортнутся.

2) Ежедневная git-сборка по адресу builder.blender.org/download. Этой сборкой я пользуюсь каждый день. В отличие от стабильной сборки, данная сборка снабжена огромным количеством цветовых тем и плагинов, которые по понятным причинам своей либо ранней разработки, либо еще какой-то обнаруженной нестабильности не попадают в Стабильный релиз. Но по своему опыту скажу, что Blender настолько стабильная программа, что даже ошибки в плагинах ей не страшны. Однако и их встретить достаточно сложно при стандартном использовании этой программы.

Первый пункт — для регистрации Blender в системе (и на всякий случай). Вторым пунктом пользуемся. Наверняка кто-то найдет более универсальный путь, но сути публикации это не изменит.

Углубляться в описание общих значений не буду, так как это сделал автор предыдущей публикации.

Как же нам правильно экспортировать модель в Unity из Blender?

Начну с небольшого ликбеза. Основная проблема Blender заключается в его лицензии. Она открытая. Соотвественно всё, что он использует или включает в себя, тоже должно быть открытым. По этой причине проприетарный экспортер/импортер FBX от Autodesk не мог быть включен в состав Blender. Но люди просили Binary формат и посвежее. По этой причине Blender Foundation начали разработку FBX экспортера/импортера на Python. Поскольку открытых спецификаций как же работает этот формат практически не было, им пришлось не сладко. Но основные трудности на текущий момент преодолены. По крайней мере те, которые мешали экспортировать в FBX.

На текущий момент (лично проверено мною) Blender умеет:
1) Экспортировать данные о Tangents (Unity больше не ругается, что шейдеру нужны Tangents, а их нет в модели), а также запекать Оси (вот она главная возможность!).
2) Импортировать данные о Tangents (этому он научился чуть позже, но — УРА!!! — модели импортируются с Hard Edge).

Основные возможности найдете по ссылке в конце статьи.

Как нам подготовить модель к экспорту

Для начала нам нужно сгладить модель. Сделать это можно как объектном режиме:

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 1

Так и в режиме редактирования, выделив все вершины/рёбра/грани (A) и открыв контестное меню Specials (W) выбрать Shade Smooth:

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 2

Отлично. Теперь нам надо указать Hard Edge (В Blender — Sharp Edge). Выделим их в режиме редактирования рёбер и открыв контестное меню по работе с Edge (Ctrl + E):

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 3

Но что происходит? Почему модель по прежнему сглаженная?

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 4

«Добавить модификатор Edge Split надо» — скажут сейчас некоторые! Но нет. Edge split лишь разбивает модель на куски и к эспорту данных в FBX никакого отношения не имеет. Хотя раньше это был единственный способ перенести уже разбитую модель без Tangents в Unity.

Но теперь для генерации нужных данных и работы Hard Egdes нам нужно в меню Vertex Data установить галочку Autosmooth с параметром 180 градусов. Что происходит в данном случае. Этой галочкой мы устанавливаем сглаживание модели в 180 градусов — что фактически близкое к эстремальному.

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 5

По генерации данных Hard Edges мы закончили. Теперь надо разобраться с экспортом.

Разберёмся с осями

Если в Blender нажать 1 на цифровом блоке клавиатуры, вид нашего вьюпорта отцентрируется на вид спереди. Если учесть, что это перед модели, то координаты Blender выглядят следующим: передняя ось Y-, верх — Z+, и боковая часть X+- (в данном случае + это налево, если смотреть сзади модели вперед, как в играх от третьего лица).
Запомним, что если смотреть вперед, находясь сзади модели, то горб должен быть слева и вверху. При этом все данные Location/Rotation/Scale по 0.0.0 и 1.1.1 соответственно.

На данной картинке отмечено, какие оси в Blender и какими они станут в Unity.

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 6

Меню экспорта:
1) Белым отмечена вполне обязательная галочка. Я использую для создания моделей под проект практически в одном blend файл (для удобства). Поэтому, чтобы не экспортнулось всё, экспортим только выделенное.
2) Синим отмечен наиболее важный параметр. Это возможность ЗАПЕЧЬ нужные вам координаты в FBX файл. Так как в Unity передняя ось — это Z+, а верхняя ось — это Y+, то мы так и указываем.
3) Красным отмечено то, что попадёт в экспорт вместе с моделью в FBX — Tangents. По которым Unity будет разбивать модель уже в движке.

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 7

Импортируем модель в Unity

Открываем модель в Unity и видим несостыковки.
Импортируемая модель отзеркалилась по ОСИ X. Возможно, это связано с тем, что ось X вывернута.

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 8

Поэтому возвращаемся в экспортёр Blender и вместо Z+ в Forward ставим Z- как было изначально.
Ура! Всё правильно. И никаких извращений.

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 9

Разбираемся с импортом анимации

С костями нет ничего особенного, но разберём по порядку.

Создадим простой куб, вытянутый по высоте. Добавим больше рёбер для костей.

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 10

Добавим 3 кости и применим как Armature Deform: Automatics Weight, чтобы не мучатся с развесовкой.

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 11

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 12

Оси костей стандартные (т.е. кости после создания не поворачивались):

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 13

Экспортим.

С моделью все ок:

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 14

А вот с костями не всё в порядке:

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 15

Что приводит к повороту модели при обнулении Трансформаций:

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 16

Но спускаемся на уровень ниже. И видим, что Root кость тоже повёрнута. Вообще, в данной ситуации при экспорте из Blender создается ненужная пустышка перед иерархией костей. Поэтому от неё можно смело избавится.

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 17

Все кости с правильными Осями по всей иерархии.

Надеюсь, статья будет полезна тем, кому экспорт в FBX стал камнем преткновения для использования Blender, а так же тем, кто на текущий момент мучается с перевёрнутыми осями или использует метод из предыдущей публикации.

По поводу отличающихся данных в Blender и Unity. Данные, на самом деле, не отличаются. Просто Blender в режиме редактирования показывает количество вершин меша. Было бы как минимум странно, если бы Blender показывал общее количество данных.

Куб, который мы экспортировали в Unity, в начале имеет 24 вершины в Blender:

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 18

И 72 Вершины в Unity:

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 19

Но если сделать в Blender — Render:

Экспорт из Blender в Unity или почему старые секреты уже не актуальны - 20

То мы видим, что их тоже 72. 72 в данном случае — это количество Вершинных данных. Это и вершины меша, UV0, UV1 (сколько их присутствует и сколько поддерживает движок), а так же кости и даже Vertex Color.

P.S. Всё это написано для тех, кто, как и я, всегда стремится к нормальным осям и обнулённым данным Transform компоненты.
P.S.2 Описание возможностей экспортера/импортера FBX и ToDo список планов на будущее. (В описании указано что в экспериментальной версии уже доступны средства для исправления проблем с поворотами костей.)

Автор: MorfeusKiev

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js