Данная статья описывает процесс подготовки объектов в бесплатном программном обеспечении Blender с целью дальнейшей их интеграции в межплатформенную среду разработки Unity с целью дальнейшего использования в моделировании или разработки виртуальных лабораторных комплексов. Кроме объяснения особенностей процесса проектирование и переноса объектов приводится пошаговая инструкция, позволяющая избежать ошибок начинающим пользователям приведенных программных продуктов.
Ключевые слова: Blender, Unity, 3D-модели, текстурирование, карты нормалей, Collider, Rigidbody .
Введение
Blender — бесплатное программное обеспечение для создания трехмерной компьютерной графики, включающее в себя средства моделирования, скульптинга, анимации, симуляции, рендеринга, постобработки и монтажа видео со звуком, а также создания 2D-анимаций.
Unity — среда разработки компьютерных игр, обладающая наличием визуальной среды разработки, межплатформенной поддержки и модульной системы компонентов.
Разработка 3 D модели на примере гальванического элемента питания (батарейки) D – R 20
При создании модели батарейки (рис. 1), будем учитывать ее реальные размеры, это необходимо для того, чтобы она, к примеру, не была размером с дом. При разработке проектов на Unity и других графических движках, рекомендуется учитывать реальные размеры всех объектов, чтобы в последующем добавлении их в студию не было проблем с масштабами объектов.
Рис. 1. Батарейка 1.5v D–R20
Для создания батарейки добавим окружность диаметром 3см. В режиме редактирования проэкструдируем окружность на высоту 6см (рис. 2).
Рис. 2. Цилиндр
Также проэкструдируем вовнутрь верхнюю и нижнюю части окружности, с повторным экструдированием для создания участка изоляции батарейки. Что бы получилась граница между изолятором и контактом. При работе с верхней частью объекта необходимо также создать в центре вершину для плюсового контакта диаметром 0,7 см и высотой 0,2 см (рис. 3).
Рис. 3. Верхняя часть батарейки
Что бы сгладить острые края, можно добавить в контекстном меню объекта “Гладкое затемнение” и включить “Автосглаживание”. Но эта процедура увеличивает количество полигонов, что, в конечном счете, может негативно сказаться на обработке объекта после переноса в графический движок.
Перед наложением текстур необходимо проверять ориентацию граней, это требуется для того, чтобы лицевая часть граней не была повернута внутрь объекта. В режиме “Ориентация грани”, красным цветом обозначена оборотная сторона грани, синим соответственно лицевая. При импорте в Unity моделей, в которых оборотные стороны граней смотрят на камеру, данные стороны будут прозрачные. Чтобы этого избежать, красные грани необходимо отразить (рис. 4).
Рис. 4. Ориентация грани
Текстурирование
Перед наложением текстуры необходимо создать материал для заданного объекта. После этого в редакторе шейдеров добавляем узел “Изображение-текстура”. В нем загружаем нужную текстуру и передаем изображение текстуры в материал, соединяя линией “Цвет” и “Основной цвет” между таблицей текстуры и материала, должно получиться как на рис. 5.
Рис. 5. Редактор шейдеров
Для отображения текстуры необходимо сменить режим отображения на “Отображать в режиме предпросмотра материала”.
Для наложения текстуры перейдем в “UV Editing” и займемся расположением граней на текстуре. Выделяя грани батарейки, в окне UV-разметки, можно поэкспериментировать и выбрать наиболее подходящий тип разметки. Выделив грани объекта, их можно располагать на текстуре произвольно. Результат этой операции можно увидеть на рис. 6.
Рис. 6. Текстурирование
Создание карты нормалей
Нормаль — это перпендикуляр к поверхности. По нему движок определяет, под каким углом отражать свет. Благодаря нормали, плоская поверхность отражает свет так, словно на ней есть неровности. Подобного хватает, чтобы принять низкополигональную модель за что-то более детализированное.
Для создания нормалей в данной статье используется бесплатная программное обеспечение “NVIDIA Texture Tools Exporter Standalone”. Загрузив текстуру в программу, можно приступать к редактированию будущей карты нормалей. В разделе “Height Generation” можно изменить высоту карты. Пример создания карты нормалей приведен на рис. 7.
Рис. 7. Создания нормалей в “NVIDIA Texture Tools”
Сохранив получившуюся карту нормалей, можно импортировать ее в Blender. Процедура добавления такая же как при добавлении основной текстуры, за исключением создания материала, т. к. материал уже присутствует. Для передачи карты нормалей в материал, необходимо соединить “Цвет” из полученного изображения с “Нормаль” нашего материала (рис. 8).
Рис. 8. Добавление карты нормалей
Сетка для коллайдера
Наша модель почти готова, осталось создать сетку для добавления коллайдера в Unity (см. Создание “Mesh Collider” и “Rigidbody”). Для начала необходимо создать низкополигональную сетку поверх модели батарейки. Делается это так же, как и создание самой модели батарейки, за исключением того, что в параметрах добавления новой окружности, необходимо уменьшить количество вершин с 32 до 8 или меньше. Должна получиться простенькая “Защитная панель” поверх батарейки (рис. 9). Эта “панель” будет использоваться как коллайдер в Unity.
Рис. 9. “Защитная панель” для коллайдера
Экспорт и импорт
Выделяем полученную модель, камеру и источник освещения выделять не нужно [1]. Выбираем формат для экспорта, в настройках экспорта ставим галочку на “Выделенные объекты” и жмем “Экспорт”. Переносим экспортированный файл в Unity и добавляем его на сцену (рис. 10).
Рис. 10. Импорт объекта в Unity
Теперь необходимо отключить отображение “защитной панели”, убрав галочку с “Mesh Render” в инспекторе объекта, т. к. данная “панель” необходима только для создания меш коллайдера, видеть нам ее не нужно. После добавления текстур в данный проект, наша батарейка их автоматически распознает. (рис. 11)
Рис. 11. Добавление текстуры
При таком добавлении редактирование материала батарейки будет недоступно, поэтому стоит создать отдельный материал, и в него загрузить текстуру с картой нормалей. При создании материала, в “Albedo” закидываем основную текстуру, а в “Normal Map” соответственно нормаль.
Теперь готовый материал можно переместить на батарейку, а точнее на “Окружность”, которая и является самой батарейкой. В данном случае модель состоит из двух объектов, сама батарейка — “Окружность”, и ее защитная панель — “Окружность.001”. Чтобы в дальнейшем при создании более сложных моделей не возникло путаницы, следует переименовывать объекты, делать это можно как при создании самой модели в блендере, так и после добавления, в самом Unity.
Создание “Mesh Collider” и “Rigidbody”
Коллайдеры необходимы для того, чтобы придать объекту материю, без коллайдеров объекты в Unity “нематериальны” и проходят сквозь остальные объекты. Коллайдеры обеспечивают обнаружение столкновений с использованием различных “ограничивающих сеток” [2], одну из которых ранее мы создали в блендере. Есть 3 способа создания коллайдеров:
1) Можно использовать базовые коллайдеры такие как “Box Collider”, “Capsule Collider”, и накладывать их на объекты, но на это уйдет не мало времени если у нас сложный объект. Такой метод меньше всего влияет на производительность.
2) Использовать коллайдер по сетке заданного объекта. “Mesh Collider”. Это быстро, но такой метод не практичен, т. к. при нем очень сильно падает производительность.
3) Создать отдельную низкополигональную коллайдерную сетку при создании объекта и использовать ее как “Mesh Collider”. Такой способ меньше влияет на производительность чем 2й, и его мы используем далее.
Выбираем “Защитную панель”, т. е. “Окружность.001” и добавляем на нее Mesh Collider. Проверяем, чтобы в разделе Mesh была выбрана “Окружность.001”. Теперь добавим физику объекту, чтобы он обладал массой и на него действовало притяжение. Для этого выбираем Add Component и Rigidbody (рис. 12). Но есть проблема в таком методе. Она заключается в том, что начиная с версии Unity 5, “Mesh Collider” работает только с включенным “Is Kinematic”, т. е. с выключенной физикой, без воздействия силы притяжения [3].
Рис. 12. “Mesh Collider” и “Rigidbody”
Если отключить “Is Kinematic”, то коллайдер пропадет, и появится при включении “Convex”, но тогда его изначальный вид сильно изменится, и станет непригодным для использования, в данном случае он принял треугольный вид (рис. 13).
Рис. 13. При включении “Convex”.
Вывод
Начиная с версии Unity 5, меш коллайдеры стоит использовать только для статичных рельефных объектов. Если необходимо чтобы на объект действовала сила притяжения, то придется ограничиться стандартными “Box Collider” и “Capsule Collider”, но в таком случае создавать “Защитную панель” в блендере уже нет нужды.
Литература:
1 Гараева Э. Р. Особенности подготовки 3D-объектов, смоделированных в Blender, для импорта в Unity 3D / Э. Р. Гараева, И. И. Бикмуллина, И. А. Барков // Прикаспийский журнал: Управление и высокие технологии. — 2020. — № 4 (52). — С. 66–74.
2 Брянский И. Н. К вопросу об основных элементах Unity / И. Н. Брянский, Д. А. Брыль // Международный научно-исследовательский журнал. — 2016. — № 12–3 (54). — С. 26–28.
3 Unity User Manual // Unity Documentation: [сайт]. — URL: https://docs.unity3d.com/Manual/index.html (дата обращения 29.03.2021).