Хорошо делай плохо
10 постов
Базовый риг.
Для начала надо убедиться что аддон Rigify включен.
Иду в Edit > Preferences > Add-ons.
В Object Mode создаю (Shift + A) Armature > Rigify Meta-Rigs > Human
В Edit Mode удаляю (X) кости одной половины тела, все кости лица и один палец.
В Edit Mode размещаю все кости в глубине геометрии на своих местах, затем выбираю кости половины, жму F3 и выбираю Symmetrize.
В Object Mode выделяю весь metarig, жму Ctrl + A и выбираю All Transforms.
Затем во вкладке Data я жму на (Re)Generate Rig. Это создаст новый набор элементов.
Скрываю (H) старый metarig. В Object Mode кликаю сначала на персонажа, затем Shift + ЛКМ на Rig (сгенерированную шагом ранее структуру из элементов) и жму Ctrl + P > With Automatic Weights.
Это даст почти идеально настроенный Rig для персонажа. Двигая разные элементы в режиме Pose Mode можно наблюдать как двигается оболочка персонажа.
Нажав на N в боковом меню во вкладке Item можно временно скрыть ненужные элементы. Для анимации нужны будут в основном IK (Inverse kinematics) элементы, в то время как FK (forward kinematics) использоваться почти не будут.
Выделив все кости в режиме Pose Mode, можно через Alt + R \ Alt + G \ Alt + S сбрасывать вращение, перемещение и масштаб костей сбрасывая к стандартной T - Pose.
Одежда.
В прошлой части я сделал развертку и базовый цвет персонажа:
Перехожу во вкладку Modeling, в режим Object Mode.
Создаю (Shift+A) плоскость.
Длю (Ctrl+R) плоскость пополам, перехожу е Edit Mode (Tab\выпадающее меню), выделяю всю плоскость A и правой кнопкой мыши вызываю меню где выбираю Subdivide/
В появившемся слева снизу меню выбираю значение которое меня устраивает (20).
Применяю модификатор Mirror.
В Виде спереди (1 на NumPad или ~(Ё) > Front) , в режиме отображение сетки (Z > Wireframe) выделяю и удаляю (X > Faces) Лишние полигоны.
Затем удаляю полигоны для выреза спереди.
Выделяю все полигоны и вытягиваю (E).
Выделяю полигоны где не должно быть ткани, и удаляю их.
Выделяю полигоны где должен быть шов и удаляю Only Faces (грани должны остаться).
В выпадающем меню справа сверху ставлю галочку Face Orientation.
В Edit Mode выделяю полигоны которые красного цвета снаружи и нажимаю Shift + N. При необходимости ставлю или снимаю галочку с Inside. Полигоны должно красной стороной смотреть внутрь. По стандарту красная сторона полигонов в движках вроде Unity3d не рендерится и можно будет смотреть сквозь модель.
Перехожу во вкладку Layout и в режиме Object Mode сначала выделяю персонажа и во вкладке Physics кликаю на Collision.
Затем выбираю модель одежды и в этой же вкладке кликаю на Cloth.
Параметры:
Quality Steps отвечает за качество симуляции, на простой модели достаточно 5+, я выбрал 17.
Ставлю галочку на Sewing и и ставлю удобное значение, я выбрал 25.5. Параметр отвечает за стягивание швов одежды ( тех мест где были оставлены только грани).
Во вкладке Collisions (столкновения) включаю Object Collisions, Self Collisions. Quality выбираю 6, Distance ставлю как .003 и .005. Это нужно чтобы ткань не проваливалась сквозь персонажа.
В нижней части программы язычок должен стоять на 0 кадров.
Жму Space на клавиатуре. Язычок побежит по таймлайну и начнется симуляция ткани.
Если результат устраивает. А меня результат полученный на 27 кадре страивает (Можно мышкой перетаскивать язычок назад по таймлайну на разные кадры чтобы видеть как происходила симуляция)
Если устроил результат, иду во вкладку модификаторов (гаечный ключик справа) и по по очереди сверху вниз применяю модификаторы. Сначала Mirror, затем Cloth. Это зафиксирует результат симуляции и его будет уже не поменять.
Перетаскиваю язычок на таймлайне обратно на 0. Вот такой результат:
Возвращаюсь во вкладку Modeling, выделяю персонажа и во вкладке Physics удаляю Collision с персонажа.
Выбираю модель одежды, перехожу в Edit Mode, выбираю режим выбора вершин (1 на клавиатуре), жму в свободном месте правой кнопкой мыши и выбираю Merge vertices > By Distance.
Подгоняю значение которое уберет боковой шов.
Это можно сделать и вручную выбрав 2 вершины и через правую кнопку мыши выбрать Merge Vertices > At...
В верхней части программы выбираю Proportional Editing, выбираю нужную вершину и подгоняя размер области действия модификатора колесиком мыши, формирую воротник.
Создаю (Ctrl+R) дополнительную грань на поясе и слегка стягиваю.
Как в прошлой части создаю развертку, добавляю текстуру. Применяю модификатор Solidify (Чтобы придать толщину) и Subdivision Surface чтобы сделать чуть менее угловатым результат.
Результатом прошлых частей стала вот такая модель. Так как И ТАК СОЙДЕТ, я применяю все модификаторы. Лучше, конечно, сохранять в отдельный файл или делать дубликат модели перед каждым важным шагом.
Переходим по вкладку UV Editing.
С помощью Alt + Shift + ЛКМ выбираем грани по которым будет проходить шов развертки.
Я выбрал центральную линию проходящую церез бок персонажа, область вокруг глаз, шею, ноги и промежность. С выбранным гранями нажимаем правой кнопкой мыши и выбираем Mark Seam.
Затем выделяем всю геометрию клавишей A, сверху кликаем UV > Unwrap Angle Based.







Получилась такая развертка.
В левом окошке можно манипулировать сеткой так же как и в правом. Если выделить кусочек развертки и нажать клавишу L, то выделится весь кусочек.
Располагаю развертку как удобно.
Идем во вкладку Shading, кликаем New.
Нажимаем Add > Texture > Image texture.
Задаем название и разрешение текстуры.
Соединяем либо с Base Color в Principled BSDF, либо с Surface в Material Output.
Переходим во вкладку Texture Paint. Сверху выбираем созданную ранее текстуру, меняем режим на Paint.
Затем выбираем инструмент заливки слева, и пипеткой (Shift + X + Средняя кнопка мыши) берем зеленый цвет прямо с картинки-референса.
Кисти выбираются снизу. Настроить размер можно зажав F, а силу Shift + F.
Рисовать можно как по модели справа, так и в окошечке слева.
Нажав на Image > Save as... можно сохранить текстуру отдельно.
Рисовать можно и в любой другой программе вроде фотошопа. Для этого удобно экспортировать развертку из вкладки UV Editing.
UV > Export UV Layout и там поставить галочку All UVs.
Какой-то странный чел поставил плюс моему прошлому посту с моделирование головы, а значит пора выпускать вторую часть где будет закончено тело.
Результатом этой части будет (текстура для наглядности):
Клавиша A - выделить все.
Клавиша X - удалить.
Shift + A - создать примитив.
Клавиша G - перемещать объект.
Клавиша R - вращать объект.
Клавиша S - масштабировать объект.
Tab - режим редактирования.
1, 2, 3 - (в режиме редактирования) режим выделения вершин, граней и полигонов.
Ctrl + R - разделение сетки модели.
E - выталкивание.
Z - изменение режима отображения.
F - соединение вершин и граней.
Shift + D - дублирование выделенного.
Ё (~) \ цифры на numpad - вид с разных углов.
Alt + (R,G,S) - сбросить вращение, перемещение, размерность выделенного объекта.
K - Разрез в режиме редактирования.
Ctrl + J - объединить выделенное.
Ctrl + Z - отменить действие (можно много раз).






























Добавляем кольцо (Shift + A > Mesh > Circle) для пояса и основы руки.
Чуть вытягиваем основу руки (E) и соединяем (F) с головой через один loop cut (Ctrl + R).
Делим одну грань на поясе (Ctrl + R) и соединяем с основой руки через один loop cut.
Делим грань пояса сзади на 3 части с помощью двух loop cut (Ctrl + R).
Соединяем заднюю часть пояса с головой и плечом.
Делим полигоны спины на 4 части с помощью трех loop cut (Ctrl + R).
Соединяем полигоны.
Придаем базовые изгибы спины.
Добавляем полигоны на бок и делим переднюю грань пояса на 3 части.
Соединяем полигонами переднюю часть.
Вытягиваем часть полигонов пояса вниз.
Заполняем.
Соединяем полигонами грани пояса спереди и сзади.
Делим на 4 части с помощью трех loop cut (Ctrl + R) и придаем изгиб.
Выделяем все свободные грани и вытягиваем основу ноги, скругляем.
Вытягиваем грани до лодыжки с дополнительным кольцом.
Формируем изгибы ноги.
Вырезаем (K) топологию на колено.
Вытягиваем полигоны в основу ступни.
Три передних полигона вытягиваем вперед.
Вытягиваем каждый полигон вперед формируя пальцы и утолщения в конце.
Если активировать отображение модификатора Subdivision можно видеть как будут выглядеть пальцы в итоге.
Если с активным Subdivision стопа кажется слишком округлой, можно добавить дополнительный loop cut (Ctrl + R) снизу.
Вытягиваем руку до кисти, деля полигоны тремя loop cut (Ctrl + R) для локтя.
Вырезаем (K) топологию на изгиб локтя.
Выделяем все полигоны пальцев на ноге.
Дублируем выделение (Shift + D).
Размещаем в области руки, вытягиваем грани для соединение с рукой и для основы большого пальца.
Формируем большой палец под небольшим углом.
Соединяем с рукой и добавляем грани для изгибов пальцев.
В конце можно добавить несколько граней для формирования изгибов руки:
С этого поста, как и обещал, будет моделирование персонажа. Так как сегодня среда, мои чуваки, в качестве персонажа я выбрал антропоморфную жабку. Из-за ограничений на количество файлов в посте я разобью этот гайд на несколько частей.
Результатом этой части будет голова (текстура для наглядности):
Я пытался преподнести это так, чтобы даже домохозяйка после 8 часов за токарным станком взяла и повторила все это. По идее, если потратить 5 минут и прочесть раз, два, три, вы должны суметь без особых сложностей сделать такую модель.
Клавиша A - выделить все.
Клавиша X - удалить.
Shift + A - создать примитив.
Клавиша G - перемещать объект.
Клавиша R - вращать объект.
Клавиша S - масштабировать объект.
Tab - режим редактирования.
1, 2, 3 - (в режиме редактирования) режим выделения вершин, граней и полигонов.
Ctrl + R - разделение сетки модели.
E - выталкивание.
Z - изменение режима отображения.
F - соединение вершин и граней.
Shift + D - дублирование выделенного.
Ё (~) \ цифры на numpad - вид с разных углов.
Alt + (R,G,S) - сбросить вращение, перемещение, размерность выделенного объекта.
K - Разрез в режиме редактирования.
Ctrl + J - объединить выделенное.
Ctrl + Z - отменить действие (можно много раз).
Чтобы разделить экран как на скриншотах, нужно потянуть за уголок активного окна вида.
Трансформации (G, R, S) объекта без задачи координат ( просто выделив что-либо, нажав G и потянув мышкой) происходит относительно вида камеры.
Как разместить референсное изображение на сцене я показывал в прошлый раз.















1. Добавляем два референсных изображения на сцену, сбрасываем вращение (Alt + R) и размещаем. Создаем (Shift + A > Mesh > Circle) кольцо и задаем ему 8 вершин (Vertices). Удаляем две боковые вершины и применяем модификатор Mirror (F3 > Mirror) или как я показывал ранее.
2. Дублируем (Shift + D) созданное ранее кольцо в режиме редактирования (Tab) или в режиме редактирования создаем новое с теми же параметрами или, если создали второй объект, то их нужно выделить и объединить (Ctrl + J) в один. Одно кольцо располагаем примерно в области шеи, второй — в области рта. Соединяем (F) грани колец полигонами между собой.
3. Создаем еще одно кольцо с 8 вершинами и располагаем примерно в области глаза (Numpad 3 - вид справа, Numpad 1 - вид спереди). Вытягиваем (E + G и вытягиваем) грань переднего полигона создавая область носа, соединяем (F) выбранную боковую вершину носа и вершину глаза. Вытягиваем(E + G и вытягиваем) центральную вершину ближе к макушке головы.
4. Выделяем кольцо глаза в режиме выбора граней (2 + Alt + ЛКМ по грани), немного вытягиваем и масштабируем (S), затем заполняем глаз полигонами.
5. Разделяем полигоны через (Ctrl + R + Вращения колесика), создавая 2 новые грани в области носа и 1 новое кольцо граней между шеей и ртом.
6. Объединяем (F) грани носа и глаза полигонами (Красное) , затем создаем одно разделение (Ctrl + R) этих полигонов (Оранжевое), а в конце с помощью ножа (K) режем центральные 2 полигона как изображено (Зеленое).
7. Вытягиваем (E) три грани в полигоны.
8. Разделяем полигоны (Красное) и соединяем (F) поочередно полигоны в области щеки носа и глаз.
9. Создаем два полигона чтобы объединить нос и затылок.
10. Разделяем оба ранее созданных полигона двумя гранями.
11. Выделяем вершины глаза и макушки и соединяем их гранями.
12. Ранее созданные грани делим (Ctrl + R) каждую на 3 части и соединяем полигонами, добавляем полигон между щекой и затылком.
13. Соединяем полигонами область за глазом.
14. Заполняем оставшуюся часть модели полигонами.
15. Добавляем модификатор (F3 > Subdivision Surface) или нажав на иконку гаечного ключа. В окне модификаторов у Subdivision Surface выбираем все синие квадратные иконки. В этом режиме удобно подгонять итоговый вид модели. Чтобы модификатор перестал применяться, достаточно выключить иконку с мониторчиком у модификатора, убирать или применять его пока не надо.
Чтобы модель выглядела сглаженной, выделяем ее (Object Mode) и через правую кнопку мыши >
Shade Smooth для визуального сглаживания.
Shade Flat для стандартного угловатого вида.
Shade Auto Smooth можно совместить поигравшись с Angle в окне модификаторов.
В самом начале мы научились создавать крутые штуки. В части первой познакомились с базовым изменением полигональной сетки: перемещением вершин и граней, инструментами разделения сетки и выдавливания.
Продолжим тему с сеткой, рассмотрим вариант добавления референса, испытаем первый сексуальный опыт с модификаторами. В следующей части будем моделить персонажа (или нет).
Клавиша A - выделить все.
Клавиша X - удалить.
Shift + A - создать примитив.
Клавиша G - перемещать объект.
Клавиша R - вращать объект.
Клавиша S - масштабировать объект.
Tab - режим редактирования.
1, 2, 3 - (в режиме редактирования) режим выделения вершин, граней и полигонов.
Ctrl + R - разделение сетки модели.
E - выталкивание.
Z - изменение режима отображения.
F - соединение вершин и граней.
Shift + D - дублирование выделенного.
Ё (~) \ цифры на numpad - вид с разных углов.
Alt + (R,G,S) - сбросить вращение, перемещение, размерность выделенного объекта.
Клавиши дублируются визуальными элементами интерфейса:
Чаще всего используются режимы отображения Solid(стандартный) и Wireframe(только сетка), про Material Preview и Rendered напишу на моделировании персонажа (а может и нет).
Клавишей F в режиме редактирования (Edit Mode) можно объединить две вершины гранью, а грани - полигоном.
Референс
Для референса достаточно перетащить изображение, видео и многое другое из папки прямо в окно блендера. Настройки добавленного объекта отображаются в подвкладке Data.
Причина, почему котики такие няшные, а рожа вашего соседа - не очень, в наличии модификатора Mirror. Он отражает что-либо относительно центральной желтой Origin (pivot) точки, по различным осям, с пересечением, или без (clipping).
Прошлый раз, став профессиональным модельером, мы разобрались, как создавать примитивные формы, сегодня же, начнется настоящее аниме - редактирование сетки модели.
Клавиша A - выделить все.
Клавиша X - удалить.
Shift + A - создать примитив.
Клавиша G - перемещать объект.
Клавиша R - вращать объект.
Клавиша S - масштабировать объект.
Tab - режим редактирования.
1, 2, 3 - (в режиме редактирования) режим выделения вершин, граней и полигонов.
Ctrl + R - разделение сетки модели.
E - выталкивание.
Клавиши дублируются визуальными элементами интерфейса:
Режимы выбора элементов модельной сетки:
С помощью этих простых манипуляций, уже можно создать такие вещи как...
Вчера, буквально за час мы стали профессиональными модельерами и аниматронами, сегодня, как и обещал, будет компиляция в "игру". Разумеется, это будет самый простой на свете кликер, идея которого мне показалась забавной, но я конченый - мне можно с такого угорать.
Выбираете все объекты (A), жмете правую кнопку мыши > Shade Smooth.
В левом углу Blender > File > Export > FBX. Сохраняем куда угодно, кроме корзины.
Скачиваем Unity Hub (через него качается Unity3d).
Регистрируемся и заходим.
Installs > install Editor > любая LTS верия, галочки для телефонов ставим так:
Создаем проект, я создал Universal 3D.
Кликаем Window > Package Management > Package manager > Unity Registry > Device Simulator.
Кликаем Window > General > Device Simulator
Кликаем Window > Animation > Animator
Вы восхитительны!
Я обычно создаю несколько папок для удобства, но сейчас хватит и одной.
В этой папке создаем ( ПКМ > Create >) :
Два Material
Два NewMonoBehaviour Script (Назовем Main и AnimationEvents)
Animation > Animator Controller
Два Animation > Animation Clip (Назовем Tuda и Suda)
Rendering > Render Texture (Ставим в Inspector Size 512 x 512)
Перекинем сюда ранее сохраненную из Blender *.FBX - модель.
Добавим картинки.
Так как я не художник, картинки я сгенерировал в нейросети, слегка подмазал края, добавил Speech Bubble и вписал туда произвольный текст (Лучше, конечно, текст делать в Unity3d).
Закинул в Unity3d с параметрами Texture Type - Sprite (2D and UI), Sprite Mode - Single.
Вот сами картинки:







*.FBX - модель из окна Assets перетаскиваем в окно Hierarchy, затем назад, создавая Prefab.
Двойным нажатием в окне Assets открываем этот Prefab.
В окне справа (Inspector) добавляем Add Component > Animator
Из окна Assets перетаскиваем Animator Controller в Controller
Перетаскиваем AnimationEvent Script в Inspector.
Создаем и назначаем новый Layer на этот Prefab.
Назначаем Materials на нужные элементы в окне Hierarchy слева
Раскрываем в окне Assets оригинальную *.FBX - модель (белый кружок с треугольником), находим анимацию (светлый треугольник | Action), двойным нажатием мышки открываем ее, соглашаемся с Read Only, затем выделяем все ключи (Ctrl + A), копируем (Ctrl + C). Открываем Animation Clip Tuda и вставляем (Ctrl + V) ключи, то же самое делаем и с Animation Clip Suda.
ПКМ в окне Animator > Create State > Empty.
Перетаскиваем Animation Clip Tuda и Suda.
Последовательно соединяем (ПКМ по элементу > Make Transition)
В левом верхнем углу Animator видим вкладку Parameters, кликаем "+" создаем Trigger.
Настраиваем параметры анимаций и связей кликая на них ЛКМ.
Переход от New State к Tuda со снятой галочкой Has Exti Time и Conditions - Trigger.
Параметр Speed у Tuda - 2.
Переход от Tuda к Suda, Setting > Exit Time 1, Transition Duration 0.
Параметр Speed у Tuda - -2 (инвертируем анимацию)
Переход от Suda к Exit, Setting > Exit Time 0.7, Transition Duration 0.1.
Exti Time определяет какой процент анимации играется 0(не играется) - 1(играется вся).
UI > Canvas (Создаем 2)
Назовем ScoreCanvas и ImagesCanvas.
UI > Image (Создаем 3)
Назовем BackGroundImage, CharacterImage, Аi_image
UI > Raw Image
Назовем RenderTexture
UI > Text - TextMeshPro (Import TMP Essentials если нужно, создаем 2)
Назовем ScoreText и TimerText
UI > Button - TextMeshPro
Camera
Create Empty
Вкладываем объекты один в другой, иерархия должна быть примерно такой:
Main Camera, параметр Culling Mask снимаем слой нашей модели.
У Camera отключаем Post Processing, в Culling Mask отмечаем только слой нашей модели, Background Color ставим Solid Color и меняем Alpha - канал на 0 делая фон прозрачны, в Output Texture перетаскиваем Render Texture из Asset. Audio Listener удаляем иди выключаем.
Располагаем так, чтобы Camera смотрела под нужным углом на модель в сцене.
Настройки Canvas`oв, Sort Order на ImagesCanvas - 0, на ScoreCanvas - 1
ScoreText и TimerText располагаем где нужно, выбираем цвет и настройки шрифта.
BackGroundImage я оставил просто белым, растянул на весь Canvas.
CharacterImage в параметр Source Image назначаем любую картинку из Asset
Аi_image в параметр Source Image назначаем соответствующую картинку из Asset
RenderTexture в параметр Texture назначаем Render Texture из Asset
У кнопки удаляем текст, делаем фон прозрачным, она должна перекрывать RenderTexture.
На GameObject перетаскиваем Script Main из Asset
Подгоняем расположение и размеры элементов, у меня получилось так:
Находим в Assets скрипт Main и пишем:
В Hierarchy находим Button, в параметрах ищем OnClick(), жмём «+».
В none (object) кидаем Gameobject из Hierarchy (на котором Main.cs)
в выпадающем поле none (function) выбираем Main > ClickOnButton().
Если все в порядке, при клике проиграется анимация:
Дважды кликаем на анимации Tuda, создаем Event примерно на 95% анимации, справа в Inspector в поле object перетаскиваем Prefab из Asset, а в function пишем Event_0.
Для анимации Suda нужно сделать примерно (Зависит от Exit Time в Animator) также, но так как анимация играется в обратную сторону, ее конец будет ближе к началу :) у меня это где-то на 20%,, в function пишем Event_1
Находим в Asset AnimationEvent Script и вписываем туда:
Если в Animator замедлить анимацию (Снизить параметр Speed), можно в консоли слева увидеть когда вызывается Event:
Добавляем в AnimationEvent ссылку на Main script, меняем методы на вызов методов Main:
А в Main Скрипте добавляем ссылку на AnimationEvent script, на элементы интерфейса, создаем лист с картинками, добавляет функцию сокрытия\показа картинки и цикл для выбора каждый раз новой не повторяющейся картинки:
Выбираем GameObject в Hierarchy, заполняем все необходимые поля (кроме Animator):
Можно зайти в главном окну Unity3d в Edit > Project Settings > Player > Resolution and Presentation и поменять Orientation на, например, Landscape Left чтобы результат запускался всегда в горизонтальной ориентации.
Можно зайти в File > Build Profiles > Android > Switch Platform > Build.
Готовый APK-файл можно скачать на телефон и запустить.
Можно много чего сделать. Понятно, что чем больше игра, тем она сложнее в плане менеджмента, но всякую мелкоту пилить и заваливать ими Стим очень легко.
Сделал я это минут за 20, а расписывал сильно дольше. Я даже сам не уверен, что смогу повторить тупо по этому посту, так что...