Перенос трехмерных ассетов из 3ds Max в среду Unity 3D — обязательный
навык для любого разработчика игр или визуализатора. Корректная
подготовка модели, включающая нормализацию трансформаций и настройку
осевых систем, минимизирует количество технических ошибок при импорте и
упрощает дальнейшую работу с материалами и анимацией. В данной статье мы
разберем алгоритм подготовки, экспорта и настройки моделей.
Часть I: Подготовка моделей 3ds Max для использования в Unity 3D
- Модель
В данном руководстве мы будем использовать уже готовую модель здания.
Наша модель была создана в 3ds Max и визуализирована с помощью V-Ray.
Поскольку Unity не поддерживает материалы этого рендер-движка напрямую,
нам необходимо оптимизировать модель и переключиться на стандартные
материалы (Scanline) для корректной интеграции.
Откройте файл с моделью. Проверьте системные единицы измерения (System Units).
В 3ds Max мы использовали миллиметры. У Unity своя система исчисления:
100 миллиметров соответствуют 1 единице (unit) в Unity.
- Расположение текстур
Для удобства работы и последующей оптимизации все используемые
текстуры необходимо собрать в одну папку. Это можно сделать с помощью
стандартной утилиты 3ds Max — Bitmap/Photometric Paths.
- Оптимизация модели
3.1 Обратите внимание на количество высокополигональных элементов
Это касается таких объектов, как дверные сетки (meshes), болты, оконные системы, элементы ландшафтного дизайна и т.д.
В нашем случае это не столь критично, так как мы работаем всего с
одним зданием, и практически любая видеокарта справится с таким
количеством полигонов. Однако оптимизация высокополигональных
(high-poly) объектов становится первостепенной задачей при работе над
масштабными проектами с большим количеством 3D-моделей. Избыток тяжелых
объектов приведет к тому, что проект будет занимать слишком много места
на диске, а его производительность упадет. Кроме того, такие модели
совершенно не подходят для использования в веб-приложениях или
онлайн-платформах.
3.2 Сортировка объектов по текстурам и именам
При создании моделей под рендер мы часто не уделяем должного внимания
дубликатам текстур или объектам без назначенных материалов. Такое часто
случается при использовании готовых библиотек, где могут содержаться
несколько идентичных материалов стекла, хрома, дерева и так далее. Если
не навести порядок на этом этапе, возникшая неразбериха потребует
долгого исправления в будущем.
Чтобы правильно организовать сцену, выполните следующие действия: Откройте редактор материалов (Material Editor). Рекомендуется полностью очистить все ячейки (слоты). Для этого перейдите на вкладку Utilities и нажмите Reset Material Editor Slots.
Нажмите кнопку Select by Material («Выбрать по материалу»). Появится список всех объектов, которым назначен данный материал. Нажмите Select. Теперь рекомендуется перейти в режим изоляции, нажав комбинацию клавиш Alt + Q.
Убедитесь, что в списке отсутствуют сгруппированные объекты.
Инструмент «Select by Material» обычно выделяет всю группу целиком, если
хотя бы одному объекту в ней назначен выбранный материал. Если вы
увидите группу в списке, ее необходимо разгруппировать (Ungroup) и повторить шаги, начиная с пункта B.
Выберите любой из объектов. В стеке модификаторов (Editable Poly или Editable Mesh) выберите функцию Attach List. В открывшемся окне выделите все объекты из списка и нажмите Attach.
В итоге мы получим один цельный объект. Рекомендуется назвать его так
же, как называется материал — так будет сразу понятно, какая текстура на
него наложена. В нашем случае это «WoodPlank».
Все действия, необходимо повторить для всех материалов и объектов в сцене (стекло, металл, плитка, пластик и т.д.).
- Случай со сценами, содержащими материалы Multi/Sub-Object. Если в сцене есть объект с многокомпонентным материалом (например, оконные рамы объединены в один меш со стеклом), вы можете:
а) Либо оставить всё как есть, но тогда все объекты с этим идентичным материалом должны быть объединены в один меш;
б) Либо использовать настройки полигонов объекта (Editable Mesh или Poly) — выбрать нужный ID, выделить все соответствующие полигоны и отсоединить (Detach) их, создав простые (одиночные) материалы для каждого элемента.
3.3. Проверка наложенных полигонов и нормалей (Normal Maps)
Необходимо отключить отображение обратных сторон полигонов для всех
подготовленных объектов, так как в Unity 3D все полигоны по умолчанию
отображаются как односторонние. Выделите все объекты в сцене (Ctrl+A), перейдите в Object Properties и установите галочку на пункте Backface Cull.
После отключения отображения задних стенок мы можем заметить, что
задняя часть дома стала невидимой. Это произошло потому, что нормали
полигонов (их лицевая сторона) направлены наружу, в сторону внешней
части фасада.
Чтобы это исправить, нам необходимо создать внутренние стены. В нашей сцене уже есть объект с именем «Int_wall», который содержит несколько внутренних перегородок. Мы добавим все недостающие стены именно к этому объекту.
В 3ds Max есть удобный инструмент для проверки пересекающихся
полигонов (доступен в версии 3ds Max 2012 и выше). Его можно найти в
меню «Views» — «xView» — «Overlapping Faces».
После активации этого инструмента все накладывающиеся друг на друга
полигоны подсвечиваются зеленым цветом. Такую проверку необходимо
провести для всей модели целиком, а не только внутри выбранного объекта
(например, когда пол верхнего этажа «лежит» в той же плоскости, что и
потолок нижнего).
Кроме того, рекомендуется удалить все полигоны, которые не будут
видны ни под каким углом — например, нижний полигон (основание) террасы.
Это крайне важно, так как сделает модель «легче», а если вы решите
использовать сложные текстуры для запекания теней (Lightmaps), это
позволит значительно сократить площадь развертки под эти текстуры. Также
можно удалить внутренние и боковые полигоны стекол, поскольку Unity 3D
все равно не сможет корректно отобразить преломления и отражения на
таких тонких поверхностях.
После завершения процесса оптимизации наш дом состоит из 12 объектов с
12 уникальными материалами и 9700 полигонами. Модель с такими
характеристиками будет легко обрабатываться движком Unity 3D даже на
мобильных устройствах.
- Подготовка текстур
Изначально наша модель готовилась под рендер V-Ray, поэтому мы использовали несколько процедурных карт, таких как Tiles (Плитка). Они не экспортируются в Unity 3D, поэтому нам необходимо конвертировать все материалы в стандартные (Standard Scanline), а все процедурные карты заменить на растровые изображения (Bitmaps). Также нам понадобятся текстуры для ландшафта: карты нормалей (Normal Bump) и карты отражений (Reflection maps).
4.1. Процедурные карты, такие как Noise, Tiles, VrayDirt
Также важно отметить, что разрешение всех текстур должно соответствовать последовательности степеней двойки (Power of Two: 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048…). Unity 3D
автоматически корректирует и приводит любое другое разрешение к
ближайшему значению из этого ряда. Например, если ваша текстура имеет
размер 720×1025, Unity конвертирует и сохранит её как 1024×2048.
После подготовки всех текстур вам потребуется переназначить все материалы в сцене на стандартные (Standard), используя только одну карту текстуры в слоте Diffuse. Это невозможно сделать автоматически: необходимо создать чистый стандартный материал и вручную назначить ему текстуру в слот Diffuse.
Итоговый чек-лист оптимизации модели:
После выполнения всех шагов модель считается оптимизированной, если:
- Количество объектов сведено к минимуму (путем объединения через Attach).
- Имена объектов совпадают с названиями соответствующих материалов в сцене.
- Каждому объекту назначены текстурные координаты (развертка) и стандартный материал в слоте Diffuse.
- Все текстуры собраны в одной папке и имеют разрешение, кратное степени двойки.
*Пожалуйста, обратите внимание, что размер текстуры, настройки
дублирования будут применены только с использованием текстурных
координат модели, все настройки материалов (облицовка, размер, угол
наклона) будут проигнорированы.
Рекомендуется поместить наши объекты в начало координат и установить
для всех точек поворота значение 0.0.0. Для этого нам нужно выбрать все и
переместить все в центр координат. Затем на вкладке “Hierarchy”
нажимаем “Affect Pivot Only”. Затем щелкните правой кнопкой мыши на
“Выбрать и переместить” и щелкните правой кнопкой мыши на стрелках
«Координаты» в группе «Absolute World». Мы повторяем все это для
поворота.