#6 Godot: 3D Platformer от BornCG. Экспорт модели из Blender
Картинка на превьюшке не врёт, мы будем наводить страх и ужас с помощью Blender. Наши задачи на сегодня:
- создание модели монетки, похожей на монетку, в Blender;
- экспорт модели из Blender в Godot;
- замена меша нашей монетки в файле coin.tscn на модель из Blender.
Последний пункт в списке открывает нам двери к светлому будущему, позволяя выполнять прототипирование силами движка, а уже затем, когда будут готовы игровые механики и в целом геймплей, углубляться в наведение красоты, что в целом звучит как хорошая идея.
Итак, открываем Blender.
Удаляем дефолтный кубик Cube, камеру Camera и свет Light с помощью клавиши Delete. В левом верхнем углу рабочего пространства выбираем меню Add -> Mesh -> Cylinder, чтобы создать цилиндр. В левом нижнем углу рабочего пространства кликаем на всплывающее окошко Add Cylinder, возникшее после создания цилиндра, и вводим значение Vertices, равное 18. Таким образом мы упростим модель нашей монетки и тем самым снизим нагрузку на железо.
В меню в левой части рабочего пространства кликаем на кнопку Scale и сжимаем цилиндр по оси Z до тех пор, пока он не станет примерно напоминать по форме монетку.
Применяем изменения, выбрав в левом верхнем углу рабочего пространства меню Object -> Apply -> Scale, и переходим в режим редактирования, сменив Object Mode на Edit Mode в раскрывающемся списке там же.
Далее, снова в левом верхнем углу выбираем режим работы с гранями (Edge),
после чего дважды кликаем по ребру в верхней плоскости монетки, чтобы выделить все рёбра на этой плоскости, а затем зажимаем Shift и дважды кликаем по ребру в нижней плоскости монетки, чтобы выделить все рёбра и там.
В меню в левой части рабочего пространства кликаем на кнопку Bevel и "снимаем фаску" с цилиндра, делая его края чуть более покатыми.
В том же меню в левой части рабочего пространства кликаем на кнопку Select Box, чтобы выйти из режима Bevel, затем выбираем режим работы с плоскостью (Face) и с помощью клика и кнопки Shift выделяем две верхние плоскости модели.
В меню слева кликаем на кнопку Inset Faces и создаём круг, который мы затем "вдавим" внутрь монетки, чтобы создать выступающие рёбра.
В меню слева кликаем на кнопку Extrude Region и удерживаем её, чтобы раскрыть меню с режимами данного инструмента. Выбираем режим Extrude Along Normals, чтобы верхнюю и нижнюю плоскости экструдировать в разных направлениях, и затем создаём небольшие углубления в монетке.
Возвращаемся в Object Mode - базовая геометрия модели сформирована. Кликаем на модель правой кнопкой мыши и выбираем опцию Shade Auto Smooth, чтобы сгладить видимые рёбра модели, но без фанатизма.
Теперь добавим символ денежного знака на нашу монетку, чтобы рассеять все сомнения. Выбираем Add -> Text, переходим в режим Edit Mode, пишем один только символ $ в добавленном тексте, возвращаемся обратно в Object Mode, в меню справа выбираем вкладку Data, и в группе функций Geometry двигаем ползунок Extrude, чтобы придать символу $ объём. В идеале символ $ должен чуть выступать над верней и нижней плоскостями модели.
Затем в меню слева кликаем на кнопку Move, чтобы перейти в режим перемещения объектов, и размещаем символ $ по центру монетки. Для этого размещаем камеру вдоль оси Z и перемещаем символ $ вдоль осей X и Y.
Далее там же во вкладке Data раскрываем группу функций Font и устанавливаем в строке Regular шрифт по настроению, например, Arial Black. Там же в группе Font раскрываем группу функций Transform и меняем значение параметра Size, чтобы сделать символ $ чуть больше. Затем, конечно же, снова выравниваем его по центру модели.
Далее выделяем символ $, выбираем в левом верхнем углу рабочего пространства меню Object -> Convert -> Mesh, переходим в Edit Mode и видим печальную картину - меш, созданный из символа текста, имеет ужасно сложную структуру, которая будет создавать неоправданную нагрузку на вычислительные мощности.
Исправляем: в левом верхнем углу выбираем режим работы с вершинами (Vertex), нажимаем на клавишу A для выделения всех вершин символа $, и там же в левом верхнем углу рабочего пространства выбираем меню Mesh -> Merge -> By Distance. Появится табличка с числом удалённых вершин (у меня было 720), но кардинально картина не изменится. Поэтому нажимаем на клавишу X, выбираем пункт меню Limited Dissolve и во всплывающем меню в левой нижней части рабочего пространства выбираем пункт All Boundaries и выставляем Max Angle на что-то около 9 градусов - чтобы убрать лишние вершины, но не сделать форму символа $ слишком грубой.
Похоже, мы сделали всё, что могли.
Переходим в Object Mode и принимаем усилия по объединению модели монетки и символа $ в единое целое: выделяем монетку (которая Cylinder), в правом нижнем углу переходим на вкладку Modifiers, нажимаем на кнопку Add Modifier и добавляем модификатор Boolean. В нём выбираем режим Union, в строке Object выбираем единственный доступный объект -Text, который является нашим символом $ - затем нажимаем на маленькую галочку в верхней строке меню модификатора Boolean и выбираем пункт Apply для применения изменений (или нажимаем Ctrl+A).
Теперь мы должны удалить лишний оставшийся объект символа $: выделяем его любым доступным способом (накликиваем мышкой или выбираем в дереве объектов) и нажимаем X (или Delete, дело вкуса).
Теперь пора добавить блеска нашей монетке. В правом нижнем углу переходим на вкладку Material, нажимаем на кнопку New, в строке Base Color выбираем оранжевый цвет, в строке Metallic наваливаем на всю котлету вплоть до значения 1, в строке Roughness выбираем что-то около 0.15.
Если в правом верхнем углу рабочего пространства переключить режим отображения на Material Preview, то мы даже сможем посмотреть, что у нас получается.
Смекаете? Мы на полпути к груде сказочных богатств!
В правом нижнем углу переходим на вкладку Object и в верхней строке меняем название объекта с Cylinder на Coin_New.
Нажимаем Ctrl+S и сохраняем файл coin_new.blend (не забудьте переименовать, по умолчанию файл будет называться untitled) в любом удобном месте.
Однако это ещё не всё: выбираем меню File -> Export -> glTF 2.0 (.glb/.gltf) для экспорта модели в наш проект в удобном для работы формате, и экспортируем модель в директорию нашего проекта Godot, предварительно создав в нём папку Assets, а в ней - папку Models, для удобной организации дел.
Теперь настало время поработать в Godot. Первым делом переименуем дочерний узел Coin в Coin1 - кажется, скоро одной монетки нам будет мало. Теперь же переходим во вкладку coin, где находится наша монетка, и решаем задачу добавления красивой модели монетки в проект.
При двойном клике на файл coin_new.glb в панели Файловая система открывается окно предпросмотра нашей модели.
В этом окне в панели Сцена мы видим структуру модели: узел Coin_New, являющийся узлом MeshInstance3D, содержит дочерний узел coin_new_Cylinder, который является основой для узла Coin_New точно так же, как простой цилиндр является основой для узла MeshInstance3D монетки в файле coin.tscn.
Значит, мы можем использовать узел coin_new_Cylinder нашей красивой монетки, чтобы заменить дефолтный цилиндр в узле Coin файла coin.tscn.
В окне предпросмотра модели выбираем узел coin_new_Cylinder и в правой панели включаем опцию Сохранить в файл, выбираем путь res://Assets/Models, вводим название файла coin_new, расширение оставляем по умолчанию (*.res, *.tres), нажимаем Сохранить.
В окне предпросмотра нажимаем на кнопку Повторить импорт.
В панели Файловая система на нужном месте появился нужный файл.
Теперь из панели Файловая система перетаскиваем файл coin_new.res прямо в свойство Mesh панели Инспектор.
Получилось, но не до конца - теперь нужно подогнать размеры модели под размеры узла CollisionShape3D и заодно повернуть монетку так, чтобы символ $ располагался нормально.
В верхней части рабочего пространства выбираем Режим масштабирования (R), ставим камеру вдоль оси X, зажимаем Shift и тянем за красный квадрат для изменения размеров по осям Z и Y. Тянем до тех пор, пока модель не впишется в размеры, определённые узлом CollisionShape3D.
Затем ставим камеру вдоль оси Z и подгоняем модель по ширине.
Переключаемся в верхней части рабочего пространства в Режим вращения (E) и вращаем модель до полного удовлетворения, предварительно зажав Ctrl.
Сохраняем изменения и переходим во вкладку level_1, чтобы посмотреть, что получилось.
Да, без подходящего окружения монетка совсем не смотрится - из-за её блестящей поверхности она отражает серый цвет и тем самым выглядит очень тёмной. Однако это мы будем исправлять в следующем уроке, а поставленных на сегодня целей добились: сделанная нами в Blender модель успешно экспортирована на игровой уровень.
Надеюсь, эта статья была понятной и полезной. Навскидку я могу придумать три причины, почему материал выглядит... скомканным?
- Blender - это всё-таки не основная цель курса, поэтому нет смысла слишком подробно на нём останавливаться.
- Знающие люди в комментариях советуют убирать воду из текста - при работе по нецелевому назначению, думаю, имеет смысл.
- Параллельно подготовке статьи я совершаю трудовой подвиг - бессмысленный и беспощадный, о котором расскажу чуть позже, поэтому комкать и сокращать - естественное желание организма.
Тем не менее, мы ещё немного продвинулись вперёд. Недавно наткнулся на пост из подраздела Инди, в которой некто aivanto поделился своим желанием начать разработку с помощью Godot. Советую почитать комментарии к посту, много полезных вещей можно найти. Конечно, заманчиво сразу взять и начать пилить проект, совмещая обучение и реальную практику, но я думаю, что этот путь ведёт в никуда. Без хоть какой-нибудь базы это должно привести или быстрой усталости от работы и скипу, или к созданию крайне кривого проекта, что опять же ведёт к скипу. В общем, я заинтригован.