Секреты экспорта из Blender в Unity

— Теория о системе координат (правосторонней и левосторонней)— Теория правильного создания 3d моделей в blender— Быстрый экспорт файлов из Blender в Unity3d.— Как правильно сопоставить масштабы модели в Blender и Unity.— Экспорт с правильной ориентацией модели— Почему количество вершин по-разному отображается в Unity и Blender? Скрипты для автоматического экспорта из Blender в Unity3d (Ссылку предоставил пользователь darkfrei)

На самом деле это самая важная часть, я столкнулся с рядом проблем в работе физики 3d модели из-за неправильного экспорта. И так давайте сначала познакомимся с системой координат правосторонней и левосторонней.

Blender использует правостороннюю систему координат с осью Z, направленной вверх. Такую систему координат используют почти все САПР. Смотрите рисунок:

image

Unity3d как почти любой другой игровой движок использует левостороннюю систему координат. Когда Y направлен вверх, X — вбок, Z- вперед. Смотрим рисунок:

image

Для начала надо изучить структуру папок и файлов нашей 3д модели в Blender.Refence — папка в которой могут хранится вспомогательные чертежи, рисунки, которые помогают построить 3д модельTextures — папка в которой должны хранится текстуры.Flags_snow.blend — наша 3d модель в формате blender

64543915c8654df8bdbf33c126069f5a.png

Теперь для правильного экспорта 3d модели, мы должны для себя уяснить, что Z+ это будет направление в игре когда объект движется вперед, (Z-) — направление когда объект движется назад. (X±) это направления поворота вбок —, но это в Unity, которая использует левостороннюю систему координат. А в правосторонней системе координат (Blender, 3ds max) Y+ это будет направление когда объект смотрит вперед и (X±) это направления вбок. Это значит что объект должен стоять в сцене так, как на рисунке, в противном случае ждите проблем с физикой:

243109bba7ca44279a8325d4b01a1fe6.png

Все параметры вращения должны стоять на 0 для дальнейшей работы и для правильной генерации Меша (Mesh), надо Scale установить по умолчанию. Для этого мы сделаем следующие действия в Blender.

1)Выделим все объекты в сцене (клавиша A)2)Object>Apply>Rotate & Scale.

Теперь все параметры вращения приняты и установлены на 0. А параметры масштабирования (Scale) установлены на по умолчанию (1). Смотрим рисунок:

image

Теперь можем делать «Правильный экспорт» из правосторонней системы координат в левостороннюю систему координат.

1)Выделим все объекты (клавиша A)2)Жмем последовательность R>X>-90.3)Object>Apply>Rotate.4)Жмем последовательность R>X>90.

Обязательно делайте в данной последовательности. Далее экспортируем модель в Unity. File>Export>FBX со следующими настройками:

4e42396d2e8f4e97b6ada4c5a2f51e9a.png

После экспорта модели:1) Идем в папку с этой моделью и копируем папку Textures (папку с текстурами) и наш FBX файл.d4ad80f2b66a4abf90f0fc2a46133159.png

2) Вставляем в папку Assets нашего проект. Это позволит Unity импортировать модель прямо с текстурами, которые были настроены в Blender.

98f5a9945fca43ee88ec1ea624268a9f.png

Как мы видем на рисунке количество вершин (verts) на объекте в Unity3d показывает 28.Смотрим рисунок: e4481b24458b425b8d5d10946f423f1c.pngА количество вершин в Blender = 8

7d51f069064e40cfb34c4a976a251e49.png

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

bab38b3964164985b36a9b720b41b54b.png

При создании швов, одна грань разделяется на 2 грани, а следуя математике 1 грань состоит из 2 вершин, следовательно из 2ух граней будет 4 вершины. Для примера воспользуемся Smart UV Project разверткой и установим максимальный Angle Limit.

1ebbac0a4df34ad9957be32378d6e46e.png

Смотрим в Blender и количество вершин сократилось с 28 до 24 вершин. Если у кого есть более оптимизированный способ. Пишите в комментариях, обсудим. Некоторые скажут что что сократилось всего на 4 вершины, а представьте если таких объектов 100 или 200, или количество вершин в более детализированных объектах сократиться на 100–300. Помойму не плохой способ оптимизации.

ea8bd47392eb4a53a7a6e082b4aadd26.png

Все единицы измерения, что в Blender что в Unity поумолчанию имеет единицу измерения Units. 1 Units= 1 Meter. Поэтому разработчики советуют принимать 1 юнит игрового пространства за 1 реальный метр, и лучше этого придерживаться (хотя бы чтобы с физикой меньше возиться).И так разберемся с единицами измерения в Blender, в прицнипе в Blender их можно менять, но поумолчанию в Blender используется Units.Смотрим на рисунок:

2f81d3941fa143cb8c9962bde2551546.png

Видем параметр Dimension (Измерения или размер). на рисунке мы видем Dimension по X, Y, Z = 1,1,1; следовательно эта фигура куб с размерами 1×1х1 метр. Экспортируем в Unity и переходим на вкладку Inspector

fb8fa05abfaf4128bc302cc2474d60dd.png

смотрим на параметр Scale Factor, если у вас Unity версии меньше 5, то поумолчанию Scale Factor будет 0.01, исправим этот параметр на 1, если у вас Unity5 то Scale Factor поумолчанию будет 1.

Заключение Вот и вся статья, как видем экспорт 3d модели из Blender в Unity, это не такуж то и сложно. Для более детального рассмотрения данного материала предлагаю посмотреть видеоуроки в начале статьи >> ссылкаДополнение от Leopotam Leopotam: Ничего не было сказано, что нельзя вешать в материал текстуры (только то, что в UV-окне), иначе юнити начнет создавать папки типа object.fbm и пытаться импортировать текстуры в них независимо от того, что лежит в соседней папке Textures. Тут кроется проблема — их бесполезно удалять, при следующем переимпорте (например, при заборе репозитория в новую папку или смене целевой платформы) ассета папка появится снова. Единственное решение — правильно готовить это дело в блендере. Ну или отключать импорт материалов и настраивать префабы руками.

Ответ: Да действительно в Unity 5 начали создаваться данные папки (при первичном импорте) раньше их не замечал, но они пустые и их можно удалить (они создаются только при первичном импорте) и текстуры ищет в папке Textures и применяется Шейдер в зависимости от настроек материала, если материал стандартный и то примениться Diffuse с уже настроенной текстурой, если Transperty применен в материалах, то примениться соответствующий шейдер Transperty в Unity3d и текстура тоже примениться. Сменил целевую платформу, с Web Player на Desktop — ничего не поменялось, папки не создались. Сменил на Ios — ничего не поменялось. Unity 5.0.1f1

Leopotam: Ничего не было сказано, что если экспортируется арматура с анимациями, то нельзя использовать FBX 7.4 BINARY формат, только старый FBX 6.1 ASCII, иначе все в юнити поедет в стиле «кровькишкирас…».

Ответ: Спасибо за дополнительную информацию, с анимацией в Blender не работал и собственно в разрабатываемом проекте не требуется костная анимация, по этому мало знал о данном материале.

© Habrahabr.ru