Skeletal Mesh в Unreal Engine

Приветствую, друзья, с Вами Будуев Антон. В данной статье мы разберём ассет, предназначенный для создания анимированных 3D-моделей в Unreal Engine — Skeletal Mesh, или, как говорят по-русски, скелетный Меш (скелетная сетка) в UE5, UE4.

Но сначала определимся, что такое Mesh.

Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Unreal Engine Mesh

Mesh (Меш, сетка) — это компонент в Unreal Engine, представляющий собой 3D-модель. По сути, это набор соединённых между собой вершин, рёбер и граней, определяющих форму объекта в трёхмерном пространстве. Где:

  • вершина (Vertex) — это точка в 3D-пространстве, определяющая положение объекта. Множество вершин создаёт каркас модели;
  • ребро — линия, соединяющая две вершины;
  • грань  — поверхность, образованная тремя (или более) вершинами, соединёнными ребрами. В Unreal Engine в целях оптимизации используются треугольные грани (Triangles).
Mesh оружия в Unreal Engine, состоящий из 10317 Triangles и 8503 Vertex
Mesh оружия в Unreal Engine, состоящий из 10317 Triangles и 8503 Vertex

Более подробно о Мешах и их основных типах Вы можете узнать в отдельной статье: Unreal Engine Mesh.

А в этой статье далее перейдём к разбору Skeletal Mesh.

Skeletal Mesh в Unreal Engine

Skeletal Mesh — это тип 3D-модели в Unreal Engine, предназначенный для создания персонажей, существ и любых других объектов, которые должны быть анимированы. В отличие от Static Meshes, которые представляют собой цельные, неанимированные объекты, Skeletal Mesh позволяет создавать сложные анимационные движения, управляемые скелетом костей.

Анимированный Skeletal Mesh (скелетный Меш)
Анимированный Skeletal Mesh (скелетный Меш)

Необходимо отметить, что скелетные Меши используются не только для персонажей или живых существ, но и для любых других механических объектов, содержащих внутри себя скелеты, которые должны быть анимированы. Например, для автомобилей, оружия, шкафов и прочего.

Skeletal Mesh автомобиля
Skeletal Mesh автомобиля

Skeletal Mesh состоит из двух ключевых компонентов:

  1. Геометрия (Mesh) — видимая часть модели (поверхность), состоящая из вершин (Vertex), имеющих позицию в 3D-пространстве, рёбер, соединяющих каждые 2 вершины, и треугольников (Triangles), объединяющих каждые 3 вершины. Вершины и рёбра определяют форму модели, а треугольники формируют её поверхность, на которую накладываются текстуры с материалами.
Геометрия (Mesh)
Геометрия (Mesh)
  1. Скелет (Skeleton) — иерархическая структура, состоящая из соединенных между собой костей. Где каждая кость имеет имя, положение и ориентацию в пространстве. Именно скелет отвечает за деформацию геометрии Skeletal Mesh при анимации. Причём один и тот же скелет может использоваться разными Мешами, если внутри них описана структура и наименования костей этого общего скелета.
Скелет (Skeleton)
Скелет (Skeleton)

Важно отметить, что вершины Mesh связаны с костями скелета посредством весов (Skin Weights), определяющих степень влияния каждой кости на движение вершины.

Skinning (скининг) — процесс, при котором вершины Skeletal Mesh трансформируются в соответствии с движениями костей. Веса скининга (Skin Weights) определяют, как каждая кость влияет на каждую вершину.

Причём каждая вершина может зависеть сразу от нескольких костей в соответствии с весом скининга. Это позволяет создавать плавные изменения поверхности Mesh при движении костей.

Принципы анимации Skeletal Mesh

Reference Pose

Первое, о чём следует сказать при анимации Skeletal Mesh — это Pose (поза). Дело в том, что любая анимация — это сдвиг костей скелета. Но сдвиг должен осуществляться относительно чего-то. То есть, например, если мы говорим об анимации движения ноги вперёд, то мы должны изменить координаты костей ноги, переместив их вперёд. Но что такое «вперёд»? Нужно что-то, относительно чего всё будет рассчитываться. Этим что-то и является опорная поза.

Reference Pose (опорная поза) — это исходное, нейтральное положение костей скелета, которое служит основой для всех анимаций и деформаций. Это, по сути, поза «по умолчанию», в которой модель находится, когда к ней не применяется никакая анимация.

Все анимации создаются относительно Reference Pose. При каждой анимации Unreal Engine вычисляет разницу между положением костей в текущем кадре анимации и их положением в Reference Pose. Эта разница (дельта) применяется к текущему положению костей скелета, чтобы анимировать персонажа.

Идеальная Reference Pose должна быть максимально нейтральной и естественной. Исторически часто использовалась T-Pose (руки вытянуты в стороны). Сейчас чаще используется A-Pose (руки слегка опущены и разведены). A-Pose часто более естественна и меньше искажает текстуры на плечах.

A-поза Skeletal Mesh
A-поза Skeletal Mesh

Анимация скелета

В Unreal Engine анимация хранится в специальных ассетах, называемых анимационными последовательностями (Animation Sequence). Эти файлы содержат информацию о смещениях костей скелета во времени.

Animation Sequence (анимационные последовательности)
Animation Sequence (анимационные последовательности)

При создании анимации для конкретного игрового объекта этот анимационный ассет применяется к соответствующему скелету, который необходимо анимировать. У скелета берётся его Reference Pose, и при расчёте каждого кадра игры к каждой кости Reference Pose добавляются дельты положения костей из анимационного файла. Таким образом создаётся анимация скелета.

Skinning

Как уже говорилось ранее, каждая вершина Mesh связана с костями скелета посредством весов (Skin Weights), определяющих степень влияния каждой кости на движение вершин. И если происходит движение кости, то и вершины Mesh вслед за костями, в соответствии со своими весами, также следуют за движением кости. Этим самым осуществляется анимация самого Skeletal Mesh.

Animation Blueprint

Чтобы связать для конкретного Skeletal Mesh все анимации воедино, нужно описать для этого анимационную логику. Такая логика описывается в отдельных ассетах, анимационных блюпринтах.

Animation Blueprint — это специализированные чертежи, управляющие анимацией Skeletal Mesh во время симуляции или игрового процесса. Анимационные блюпринты редактируются внутри отдельного редактора Animation Blueprint Editor, в котором создаётся логика, определяющая конечную позу анимации.

Анимационный Blueprint в UE5
Анимационный Blueprint в UE5

Animation Blueprint позволяют:

  • переключаться между анимациями в зависимости от логики игры;
  • смешивать анимации для создания плавных переходов;
  • управлять параметрами анимаций (например, скоростью воспроизведения);
  • применять процедурные анимации и физические эффекты.

Анимационные блюпринты подключаются к Skeletal Mesh через специальные настройки Details в Skeletal Mesh Component, о котором мы поговорим в отдельной статье.

Импорт Skeletal Mesh

Skeletal Mesh обычно создаются в специализированных 3D-редакторах, таких как BlenderMaya3ds Max. И импортируются в движок в наиболее распространённом формате для импорта Мешей — FBX (Filmbox).

Для импорта Skeletal Mesh в Unreal Engine перейдите в Content Browser, нажмите кнопку Import и выберите файл Меша на компьютере. Откроется окно настроек импорта FBX Import Options.

Импорт Skeletal Mesh
Импорт Skeletal Mesh

В данном диалоговом окне содержится множество опций для импорта Меша, изучить детально которые Вы можете в отдельной статье: FBX Import Options.

После определения настроек нажмите кнопку Import. Как результат, ассет импортированного файла появится в Content Browser, двойной щелчок по которому откроет специализированный редактор Skeletal Mesh Editor, где можно настроить различные свойства ассета скелетного Меша во вкладке Asset Details, а именно:

  • назначить материалы в соответствующие слоты;
  • настроить уровни детализации LOD;
  • назначить ассеты Animation Rig, Physics Asset, Shadow Physics Asset, Post Process Anim Blueprint.

* Данные настройки вкладки Asset Details мы разберём в отдельной статье, посвящённой редактору Skeletal Mesh Editor.

Также при импорте Skeletal Mesh движок Unreal Engine импортирует (если эти компоненты были созданы в сторонних 3D-редакторах совместно со Skeletal Mesh) или создаёт автоматически (если этих компонентов нет в импортируемом FBX-файле) дополнительные ассеты.

То есть после импорта в текущей папке Content Browser появится не только сам файл Skeletal Mesh, но и файл скелета (Skeleton), файлы материалов и текстур, файл физического ассета (Physics Asset), в котором описывается специальная коллизия для скелетных Мешей, состоящая из физических тел и ограничений, а также, если в FBX-файле была описана анимация, то и ассеты анимации.

Ассеты Skeletal Mesh, Physics Asset и Skeleton, созданные движком Unreal Engine при импорте Skeletal Mesh
Ассеты Skeletal Mesh, Physics Asset и Skeleton, созданные движком Unreal Engine при импорте Skeletal Mesh

Коллизия в Skeletal Mesh

В Skeletal Mesh, в отличие от Static Mesh, используется совсем другой вид коллизии. Напомню, в статических Мешах доступны 2 вида коллизии: Simple Collision и Complex Collision. А в Skeletal Mesh применяются физические коллизионные тела и ограничения, описанные в отдельном ассете Physics Asset. Иначе эту коллизию еще называют Ragdoll («тряпичная кукла»).

Ragdoll состоит из набора Physics Bodies (физических тел) или, по-другому, коллизий, которые регистрируют столкновения, а также прикреплённых к этим телам Constraints (ограничений вращения этих тел). Эти ограничения определяют естественные движения физических тел, что позволяет моделировать реалистичные физические реакции Skeletal Mesh.

Ragdoll в Unreal Engine состоит из набора Physics Bodies и Constraints
Ragdoll в Unreal Engine состоит из набора Physics Bodies и Constraints

Детально останавливаться на Ragdoll в этой статье мы не будем, так как статья посвящена Skeletal Mesh, а не Physics Asset.

Подробнее о коллизиях для скелетных Мешей Вы можете узнать в отдельной статье: Ragdoll для Skeletal Mesh.

Skeletal Mesh Actor

При размещении объекта Skeletal Mesh на игровом уровне он становится объектом Skeletal Mesh Actors, а иначе говоря, Актором.

Actor в Unreal Engine — это абсолютно любой объект, который можно разместить на игровом уровне. Это может быть как статичная 3D-модель, так и анимированный персонаж, камера, звуковой файл и многое другое. Таким образом, Актором является всё, что размещается на уровне. И не обязательно, чтобы этот объект отображался визуально. Кроме того, все Акторы поддерживают 3D-преобразования, такие как перемещение, вращение и масштабирование в игровом мире.

Один и тот же файл ассета Skeletal Mesh может иметь неограниченное число объектов Skeletal Mesh Actors, размещённых в мире. Причём, наследуя одни и те же настройки от родительского Skeletal Mesh, объекты-Акторы могут переопределять их. Таким образом, используя один объект скелетного Меша несколько раз на уровне, можно придать каждому Актору этого Меша уникальный внешний вид.

Отдельно стоит заметить, что на самом деле любые Акторы содержат в себе 3D-модель скелетного Меша не напрямую, а через специальный компонент Skeletal Mesh Component, который является неким «держателем» Skeletal Mesh в этом Акторе.

Именно через данный компонент в конкретном Акторе движком предоставляется возможность детальной настройки модели скелетного Меша (настроек материала, коллизии, освещения и теней, рендера, физики и много другого).

Skeletal Mesh Actor, содержащий в себе компонент Skeletal Mesh Component
Skeletal Mesh Actor, содержащий в себе компонент Skeletal Mesh Component

Blueprint-функции, связанные в Unreal Engine со Skeletal Mesh

  • Get Imported Bounds — возвращает исходные границы (Bounding Box) импортированного ассета Skeletal Mesh.
  • Get Bounds — возвращает расширенные границы (Bounding Box) импортированного ассета Skeletal Mesh (исходные импортированные границы + расширенные границы, включающие все компоненты Актора).
  • Get All Morph Target Names — возвращает массив названий всех Morph Target существующих на текущем Skeletal Mesh.

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.


наш Телеграм канал

Оцените статью
( 1 оценка, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.