This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

RagDoll Body

Тело RagDoll включает обратную кинематику и процедурную анимацию последовательности смерти для персонажей со скелетной анимацией. Этот тип тела на самом деле представляет собой набор твердых тел, представляющих кости персонажа, которые связаны сочленениями. Эти сочленения ограничивают движение костей относительно друг друга, обеспечивая реалистичный вид.

Примечание
Тело RagDoll можно присвоить только объектам Mesh Skinned.

RagDoll animation

Анимация RagDoll

Дополнительная информация
#

Назначение тела RagDoll
#

Чтобы присвоить объекту тело RagDoll через UnigineEditor, выполните следующие действия:

  1. Откройте окно World Hierarchy.
  2. Выберите объект Mesh Skinned, которому нужно присвоить тело RagDoll.
  3. Перейдите на вкладку Physics в окне Parameters и назначьте физическое тело выбранному объекту, выбрав Body -> RagDoll.

    Adding a body

  4. Задайте имя тела и обратитесь к следующему разделу, чтобы создать RagDoll.

Создание физической симуляции RagDoll
#

Есть два способа создать RagDoll:

После того, как тело будет присвоено объекту Mesh Skinned, первым шагом будет создание тела Rigid, которое будет представлять каждую кость в физической симуляции.

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

Примечание
Для правильной автоматической генерации RagDoll меш должен быть в исходном положении (T-поза для человекообразных персонажей). Если к мешу уже была применена анимация, примените анимацию со статическим исходным положением.

Автоматическая генерация выполняется по следующим параметрам:

Форма аппроксимации
#

Кости можно аппроксимировать с помощью Convex hull или Capsule, если установлен флажок Capsule shape:

  • Capsule обеспечивает очень быстрое физическое моделирование и постоянное обнаружение столкновений.
  • Convex hull обеспечивает более точное приближение.

Если требуется какая-либо другая форма, необходимо выполнить аппроксимацию вручную.

Approximation with capsules and convex hulls

Аппроксимация капсулами и выпуклыми многогранниками
Примечание
Помните, что физические формы не обязательно должны точно воспроизводить меш. Грубое приближение обеспечивает реалистичное и достаточно убедительное физическое взаимодействие.

Total Mass
#

Общая масса тела RagDoll автоматически распределяется между всеми формами, аппроксимирующими кости. При распределении учитывается объем, который форма занимает. Если впоследствии масса изменится, массы всех форм пересчитываются. И наоборот, при изменении массы формы соответственно изменяется и общая масса.

Approximation Error
#

Если для аппроксимации костей используются выпуклые многогранники, результат может содержать слишком много деталей для коллизионной геометрии. Как правило, в этом нет необходимости, потому что высокодетализированная форма не обеспечивает заметной визуальной разницы, но существенно влияет на производительность. Approximation Error позволяет контролировать количество вершин в получившейся выпуклой оболочке:

  • Чем ниже значение, тем точнее форма аппроксимирует меш.
  • Максимальное значение 1 обеспечивает довольно грубую аппроксимацию, которая может не покрывать весь объем меша.

Если персонаж аппроксимируется капсулами, меньшее значение ошибки аппроксимации обеспечивает более точную ориентацию формы.

Volume Threshold
#

При создании RagDoll малые кости (например, кости пальцев) моделируются редко. Они слишком незначительны, чтобы изменить движение всего объекта, так как их масса и объем недостаточны для этого. Пороговое значение объема позволяет объединить все мелкие соседние кости, объем которых слишком мал, в одну форму:

  • При минимальном значении 0 все кости без исключения представлены твердыми телами и, следовательно, формами.
  • При максимальном значении 1 формы аппроксимации большие и следуют только за основными костями. В этот объем включены маленькие кости, но их индивидуальные трансформации не учитываются при физическом моделировании.
Minimum volume threshold     Maximum volume threshold
Пороговое значение объема определяет, должны ли все кости вплоть до самой маленькой, моделироваться отдельно или объединяться в более крупные формы.

 

Иерархия тела для костей
#

После создания RagDoll все кости, представленные в твердых телах и формах и определяющие их движение, помечаются в иерархии как связанные. Все мелкие кости, не участвующие в движении физического тела, остаются свободными. Если автоматически сгенерированные формы недостаточно хорошо подогнаны, их можно настроить вручную до тех пор, пока аппроксимация не станет подходящей.

Иерархию тел и форм, которые приблизительно соответствуют костям, можно сохранить в файле *.node и загрузить из него. Установленную иерархию также можно удалить из тела RagDoll и создать заново.

Иерархия твердых тел, представляющих кости

Создание RagDoll вручную
#

Также возможно создать RagDoll вручную. В этом случае можно использовать произвольные формы для аппроксимации костей тела RagDoll. Чтобы создать RagDoll вручную, выполните следующие действия:

  1. Создайте Node Dummy, которая будет родительской нодой для будущей иерархии RagDoll.
  2. Добавьте Dummy Object и сделайте его дочерней нодой. Присвойте ему тело Rigid и назовите тело так же, как кость, которую оно будет представлять. После этого аппроксимируйте кость любой подходящей формой.
  3. Создайте все тела и формы Rigid для костей RagDoll. Иерархия не имеет значения, важны только названия тел.
  4. Экспортируйте родительскую ноду в файл *.node.
  5. Выберите персонажа и загрузите этот файл для его тела RagDoll.
  6. Добавьте и настройте сочленения, которые соединяют твердые тела в пределах RagDoll.

Включение анимации RagDoll
#

Когда персонаж сталкивается с каким-либо препятствием или, например, в него стреляют и он умирает, необходимо отключить воспроизведение анимации на основе костей и имитировать реалистичное падение персонажа в соответствии с законами физики. Когда флажок Frame-based снят, тело RagDoll больше не управляется трансформациями костей. Оно падает в соответствии с динамикой тела Rigid (массы всех твердых тел, которые представляют собой части RagDoll, демпфирование скорости и т. д.), ограничения сочленений и жесткость движения.

Примечание
Включение анимации RagDoll влияет только на те кости, которые были физически аппроксимированы. Например, мелкие кости, которые были исключены с учетом порогового значения объема, по-прежнему будут двигаться. Чтобы этого не произошло, анимацию меша необходимо остановить явным образом.

Жесткость движения
#

Параметр Rigidity позволяет дополнительно ограничивать движение RagDoll. Он определяет, насколько равномерно движение частей RagDoll. Для этого как линейные, так и угловые скорости каждого отдельного твердого тела корректируются в соответствии с суммарными скоростями, интерполированными для всех тел.

  • При минимальном значении 0 все части RagDoll, представленные в твердых телах, перемещаются независимо и неограниченно (конечно, за исключением ограничений сочленений). Это создает впечатление свободного и неустойчивого движения.
  • При максимальном значении 1 части RagDoll перемещаются равномерно и жестко, что может показаться чрезмерно непластичным.

Комбинированная анимация и обратная кинематика
#

Проблема с предварительно созданной анимацией заключается в том, что она не обеспечивает должного взаимодействия с окружающей средой. Например, при подъеме или спуске с холма ноги персонажа не приземляются плотно на поверхность земли. Или, когда он карабкается по лестнице, руки должны крепко держаться за перекладины. Этот эффект достигается с помощью комбинированной анимации: анимация движения воспроизводится для основных костей, в то время как меньшие кости (например, ноги или руки) моделируются физически.

Покадровую анимацию можно отключить для всех твердых тел, которые аппроксимируют кости. Вместо того, чтобы следовать за трансформациями костей, твердое тело провисает под собственным весом и соединяется с объектами-коллайдерами под ним.

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

Inverse Kinematics

При обратной кинематике ноги персонажей плотно приклеиваются к полу независимо от того, насколько наклонена поверхность.
Последнее обновление: 07.03.2023
Build: ()