RagDoll Body
Тело RagDoll включает обратную кинематику и процедурную анимацию последовательности смерти для персонажей со скелетной анимацией. Этот тип тела на самом деле представляет собой набор твердых тел, представляющих кости персонажа, которые связаны сочленениями. Эти сочленения ограничивают движение костей относительно друг друга, обеспечивая реалистичный вид.
Дополнительная информация#
- Класс BodyRagdoll
- Фрагмент видеоурока по физике, иллюстрирующий обратную кинематику тела RagDoll
Назначение тела RagDoll#
Чтобы присвоить объекту тело RagDoll через UnigineEditor, выполните следующие действия:
- Откройте окно World Hierarchy.
- Выберите объект Mesh Skinned, которому нужно присвоить тело RagDoll.
-
Перейдите на вкладку Physics в окне Parameters и назначьте физическое тело выбранному объекту, выбрав Body -> RagDoll.
- Задайте имя тела и обратитесь к следующему разделу, чтобы создать RagDoll.
Создание физической симуляции RagDoll#
Есть два способа создать RagDoll:
- Автоматическая генерация.
- Создание вручную.
После того, как тело будет присвоено объекту Mesh Skinned, первым шагом будет создание тела Rigid, которое будет представлять каждую кость в физической симуляции.
На данный момент все кости свободны, то есть не связаны ни с каким телом Rigid. Чтобы автоматически генерировать RagDoll, т.е. твердые тела и аппроксимирующие формы вместе с сочленениями, необходимо нажать кнопку Create.
Автоматическая генерация выполняется по следующим параметрам:
Форма аппроксимации#
Кости можно аппроксимировать с помощью Convex hull или Capsule, если установлен флажок Capsule shape:
- Capsule обеспечивает очень быстрое физическое моделирование и постоянное обнаружение столкновений.
- Convex hull обеспечивает более точное приближение.
Если требуется какая-либо другая форма, необходимо выполнить аппроксимацию вручную.
Total Mass#
Общая масса тела RagDoll автоматически распределяется между всеми формами, аппроксимирующими кости. При распределении учитывается объем, который форма занимает. Если впоследствии масса изменится, массы всех форм пересчитываются. И наоборот, при изменении массы формы соответственно изменяется и общая масса.
Approximation Error#
Если для аппроксимации костей используются выпуклые многогранники, результат может содержать слишком много деталей для коллизионной геометрии. Как правило, в этом нет необходимости, потому что высокодетализированная форма не обеспечивает заметной визуальной разницы, но существенно влияет на производительность. Approximation Error позволяет контролировать количество вершин в получившейся выпуклой оболочке:
- Чем ниже значение, тем точнее форма аппроксимирует меш.
- Максимальное значение 1 обеспечивает довольно грубую аппроксимацию, которая может не покрывать весь объем меша.
Если персонаж аппроксимируется капсулами, меньшее значение ошибки аппроксимации обеспечивает более точную ориентацию формы.
Volume Threshold#
При создании RagDoll малые кости (например, кости пальцев) моделируются редко. Они слишком незначительны, чтобы изменить движение всего объекта, так как их масса и объем недостаточны для этого. Пороговое значение объема позволяет объединить все мелкие соседние кости, объем которых слишком мал, в одну форму:
- При минимальном значении 0 все кости без исключения представлены твердыми телами и, следовательно, формами.
- При максимальном значении 1 формы аппроксимации большие и следуют только за основными костями. В этот объем включены маленькие кости, но их индивидуальные трансформации не учитываются при физическом моделировании.
Пороговое значение объема определяет, должны ли все кости вплоть до самой маленькой, моделироваться отдельно или объединяться в более крупные формы.
|
Иерархия тела для костей#
После создания RagDoll все кости, представленные в твердых телах и формах и определяющие их движение, помечаются в иерархии как связанные. Все мелкие кости, не участвующие в движении физического тела, остаются свободными. Если автоматически сгенерированные формы недостаточно хорошо подогнаны, их можно настроить вручную до тех пор, пока аппроксимация не станет подходящей.
Иерархию тел и форм, которые приблизительно соответствуют костям, можно сохранить в файле *.node и загрузить из него. Установленную иерархию также можно удалить из тела RagDoll и создать заново.
Создание RagDoll вручную#
Также возможно создать RagDoll вручную. В этом случае можно использовать произвольные формы для аппроксимации костей тела RagDoll. Чтобы создать RagDoll вручную, выполните следующие действия:
- Создайте Node Dummy, которая будет родительской нодой для будущей иерархии RagDoll.
- Добавьте Dummy Object и сделайте его дочерней нодой. Присвойте ему тело Rigid и назовите тело так же, как кость, которую оно будет представлять. После этого аппроксимируйте кость любой подходящей формой.
- Создайте все тела и формы Rigid для костей RagDoll. Иерархия не имеет значения, важны только названия тел — они должны совпадать с именами костей. Если имена тел не совпадают с именами костей, это приведет к ошибке.
- Экспортируйте родительскую ноду в файл *.node.
- Выберите персонажа и загрузите этот файл для его тела RagDoll.
- Добавьте и настройте сочленения, которые соединяют твердые тела в пределах RagDoll.
Включение анимации RagDoll#
Когда персонаж сталкивается с каким-либо препятствием или, например, в него стреляют и он умирает, необходимо отключить воспроизведение анимации на основе костей и имитировать реалистичное падение персонажа в соответствии с законами физики. Когда флажок Frame-based снят, тело RagDoll больше не управляется трансформациями костей. Оно падает в соответствии с динамикой тела Rigid (массы всех твердых тел, которые представляют собой части RagDoll, демпфирование скорости и т. д.), ограничения сочленений и жесткость движения.
Жесткость движения#
Параметр Rigidity позволяет дополнительно ограничивать движение RagDoll. Он определяет, насколько равномерно движение частей RagDoll. Для этого как линейные, так и угловые скорости каждого отдельного твердого тела корректируются в соответствии с суммарными скоростями, интерполированными для всех тел.
- При минимальном значении 0 все части RagDoll, представленные в твердых телах, перемещаются независимо и неограниченно (конечно, за исключением ограничений сочленений). Это создает впечатление свободного и неустойчивого движения.
- При максимальном значении 1 части RagDoll перемещаются равномерно и жестко, что может показаться чрезмерно непластичным.
Комбинированная анимация и обратная кинематика#
Проблема с предварительно созданной анимацией заключается в том, что она не обеспечивает должного взаимодействия с окружающей средой. Например, при подъеме или спуске с холма ноги персонажа не приземляются плотно на поверхность земли. Или, когда он карабкается по лестнице, руки должны крепко держаться за перекладины. Этот эффект достигается с помощью комбинированной анимации: анимация движения воспроизводится для основных костей, в то время как меньшие кости (например, ноги или руки) моделируются физически.
Покадровую анимацию можно отключить для всех твердых тел, которые аппроксимируют кости. Вместо того, чтобы следовать за трансформациями костей, твердое тело провисает под собственным весом и соединяется с объектами-коллайдерами под ним.
Например, физически управляемое движение ноги требует отключения скелетной анимации всей конечности: бедра, голени и стопы. Обратная кинематика позволяет правильно позиционировать цепочку костей с учетом положения самой нижней кости в иерархии — стопы. Поэтому, когда персонаж ходит или бежит, его ступня сталкивается с землей, а колено сгибается и выпрямляется в соответствии с ограничением сустава.