Unity: Импортировать модель с несколькими текстурами из приложения Blender

Если в Unity просто перекинуть файл с моделькой *.blender, то Unity Editor автоматически создаст для нее дефолтовый материал. Если для модельки используется одна текстура, то проблем нет — ее же и отобразит движок. Проблема возникает, если для модели используется больше одной текстуры. Даже в этом случае Unity создаст всего один материал, в котором будет только одна текстура. Может в следующих версиях Unity процесс импортирования переработают и все материалы и текстуры будут цепляться автоматически без специальной подготовки, но пока придется поработать «напильником»:
1. Создаем в Unity новый проект, назовем его «Cube-Multitexture».
2. Запускаем Blender и подготавливаем сцену — удаляем оттуда все лишнее и добавляем несколько источников света, так, чтобы сцена была освещена со всех сторон (я добавил 8 точечных источников света) и сохраняем файл в папке проекта Unity.
3. В папке проекта Unity (там, где находится файл .blend), создаем папку Textures и сохраняем туда 6 текстур (эти текстуры я создал в Gimp для данного примера):

4. Возвращаемся в Blender и добавляем на сцену куб (Shift+A -> Mesh -> Cube).
5. Переключаем сцену в режим «UV Editing»
6. В правом окне (редактирования) выделяем грань куба (или несколько граней) и нажимаем клавишу U -> Unwrap
7. В левом окне (текстуры) выбираем файл текстуры и настраиваем расположение и размеры текстуры:

8. Повторяем шаги 6 и 7 для всех граней куба.
9. Сохраняем наш .blend — файл. Unity это увидит и автоматически добавит куб в проект вместе с материалами.

В редакторе Unity для модельки куба в инспекторе должен быть выбран режим импортирования материалов Material Naming: «By Base Texture Name»:

Это было руководство с сайта edy.
В случае такого способа импортирования модель получает правильное наименование материалов, но она становится развернутой на 90 градусов по оси X:

Чтобы этого избежать, нужно перед сохранением файла в папку с проектом Unity, развернуть модель на -90 градусов по оси X:

  • Выделяем все объекты, которые будут экспортироваться (или просто Ctrl+A )
  • Выполняем вращение по оси X: R -> X -> 9 0
  • Устанавливаем эту позицию по-умолчанию: Object -> Apply -> Rotate
  • Возвращаем положение объекта к первоначальному (если необходимо дальнейшее редактирование модели): R -> X -> 9 0

Если вместо сохранения файла .blender в папку с Unity-проектом воспользоваться экспортом в Wavefront .obj, то такой проблемы уже не будет, однако в этом случае придется поменять названия созданных материалов (или хотя бы одно):

Результат:

Если произвести редактирование модели в Blender, а потом ее сохранить, она обновится и заново импортируется в проект Unity. Если некоторые из материалов удалялись или редактировались, то при импортировании они не будут повторно обновлены. Может возникнуть ситуация, когда нужно будет переназначить материалы вручную:

Это можно сделать, если выделить нужный меш и назначить ему другой материал, вместо удаленного:

update:
Вчера обнаружил баг с импортированием. Если в Blender создать две модели кубика — одну со стенками нулевой толщины, другую со стенками, имеющими толщину:

Затем, описанным выше способом импортировать их в Unity, то перепутаются текстуры, даже если корректно указать UV-развертку:


Это был кубик в окошке preview Unity.

А этот кубик в Blender, почувствуйте разницу…

В итоге я выяснил, что во избежании этого бага, нужно не сохранять файл как .blender в папку Assets, а экспортировать модель в формат FBX.
P.S. Баг репорт отправил :)