Rope Body
Тело Rope обеспечивает физическое моделирование канатов, кабелей, проводов и т. д. Канаты могут прикрепляться к телам следующих типов:
Чтобы прикрепить веревку к телу так, чтобы она свободно свисала, или связать несколько тел, используйте сочленение Particles. Тело Rope можно разорвать как тело Cloth. Веревка повышает реалистичность моделируемой среды и экономит время художников, поскольку заменяет анимацию. Однако моделирование этого типа тела довольно затратно, и настоятельно рекомендуется использовать оптимизацию расстояния, чтобы избежать снижения производительности.
Дополнительная информация#
- Класс BodyRope
- Пример, иллюстрирующий использование тела Rope и сочленения Particles
- Фрагмент видеоурока по физике, иллюстрирующий моделирование проводов и веревок с использованием тела Rope
Требования к мешу#
Единственный допустимый тип меша для тела Rope — это цилиндр. Вы можете использовать стандартный примитивный цилиндр для создания веревки. В этом случае рекомендуем использовать следующий подход:
- В панели инструментов нажмите Create -> Primitive -> Cylinder.
-
Задайте желаемые параметры веревки (длина, радиус) для цилиндра, например, следующие:
- Нажмите OK и добавьте цилиндр в сцену. Он создан как объект Static Mesh. Сам объект можно удалить, а его меш будет доступен в папке data/.
- Создайте объект Dynamic Mesh и используйте для него меш цилиндра.
- Назначьте тело Rope на созданный объект Dynamic Mesh.
Имитационная модель массы-пружины#
Тело Rope моделируется как набор точечных масс (частиц), расположенных в вершинах меша. Каждая частица имеет форму шара и связана с другими частицами внутренними пружинными сочленениями, расположенными по краям меша. С одной стороны, внутренние сочленения позволяют воссоздать топологию меша, а с другой — ограничивают растяжение и складывание.
Каждая частица характеризуется положением, массой и скоростью и имеет постоянную сферическую форму с заданным радиусом. Общая масса всего тела равномерно распределяется между ними. В соответствии со вторым законом Ньютона на частицы могут действовать сила или импульс, приложенные внутренними сочленениями и внешними силами (коллизия, сила тяжести, сопротивление воздуха, ветер и т. д.).
Столкновении частиц друг с другом и столкновения между разными телами веревки не рассчитываются. Однако веревка взаимодействует с окружающей средой, сталкиваясь с другими физическими телами, если установлен флажок Collision. Его поведение при контакте контролируется такими параметрами, как трение и восстановление. Выборочное физическое взаимодействие доступно через соответствующие битовые маски.
Таким образом, тело Rope можно рассматривать как ограниченную систему жестких частиц, и поэтому некоторые параметры такие же, как у тела Rigid:
Радиус частицы#
Как уже было сказано, каждая частица представляет собой сферу с заданным радиусом. Таким образом, частицы используют непрерывное обнаружение столкновений. Веревка никогда не лежит на земле ровно и не прилегает плотно к поверхности. Всегда есть зазор, равный радиусу частицы.
Поскольку столкновения между частицами не рассчитываются, их не следует учитывать при установке радиуса:
- Для более устойчивого поведения предпочтительнее более высокие значения. Однако слишком большой радиус может привести к некорректному взаимодействию с окружающей средой (подергиванию или разрыву веревки).
- Более низкие значения уменьшают разрыв между телом Rope и поверхностью. Однако слишком малый радиус приводит к плохой обработке столкновений.
Итерации решения сочленений#
Количество итераций контролирует точность решения внутренних сочленений веревки. Это число указывает, сколько раз сочленения решаются за физический кадр. Сочленения решаются в случайном порядке, чтобы обеспечить более предсказуемые результаты растяжения.
- Меньшее количество итераций приводит к более быстрому моделированию. Однако в этом случае веревка более подвержена растяжению и выглядит более эластичной. Минимальное значение — 1.
-
Большое количество итераций обеспечивает более точное решение ограничений. В этом случае веревка выглядит более жесткой. Максимальное значение — 16.
Увеличение количества итераций обходится значительно дороже и в какой-то момент перестает приносить заметную пользу, поэтому его следует удерживать в разумных пределах.
Увеличение количества итераций может помочь избежать подергивания веревки.
Растяжение и складывание#
Веревку можно деформировать путем растяжения и складывания. Эти деформации контролируются связями двух типов:
- линейное восстановление контролирует растяжение;
- угловое восстановление контролирует складывание.
С помощью этих типов ограничений можно получить желаемый внешний вид веревки и смоделировать множество различных деформируемых материалов, от жесткой металлической проволоки до эластичного резинового шланга.
Линейное восстановление#
Линейное восстановление определяет, насколько далеко частицы веревки могут быть растянуты друг от друга. Оно заставляет сочленения веревки восстановить расстояние, которое было между вершинами исходного меша:
- При максимальном значении 1 частицы отскакивают с большой силой, и веревку трудно растягивать. Это дает эффект жесткой нерастягивающейся веревки, например металлической проволоки.
-
Чем ниже значение, тем легче частицы удаляются друг от друга и тем более растяжимым и эластичным является веревка, например резиновый шнур.
0 и близкие к нулю значения не допускаются, потому что они вызывают нестабильную симуляцию и разрыв модели веревки.
Угловое восстановление#
Угловое восстановление определяет возможный угол между треугольниками веревки, образованными частицами. Оно ограничивает складывание веревки, усиливая сочленения, чтобы сохранить угол между треугольниками исходного меша:
-
При максимальном значении 1 углы сохраняются, и веревка сопротивляется складыванию. Веревка кажется жесткой.
Максимальное значение может привести к неустойчивому поведению. - При минимальном значении 0 веревку можно легко складывать и сгибать в любом направлении, независимо от исходной топологии меша.
Если веревка слишком эластичная, попробуйте одно из следующих действий:
- Установите для линейного восстановления значение 1.
- Увеличьте количество итераций решения сочленений.
- Используйте меш с меньшим количеством вершин.
Жесткость движения#
Параметр Rigidity является дополнительным ограничением движения веревки, чтобы сделать ее более жесткой и негибкой. Для этого линейная и угловая скорости каждой частицы веревки корректируются в соответствии с полными скоростями, интерполированными для всех частиц.
- Минимальное значение 0 делает веревку эластичной, гибкой и легко деформируемой.
- Максимальное значение 1 делает веревку более жесткой и менее подверженной деформации.
Разрыв#
Когда веревка растягивается или сгибается сверх предела упругости, она рвется и рассыпается на куски. Разрыв вызывается приложением силы или столкновением с физическим телом и зависит от жесткости веревки (контролируется параметрами линейного и углового восстановления). Веревка рвется только по краям треугольников, разделяя вершины меша и дублируя частицы.
Линейное пороговое значение#
Линейное пороговое значение устанавливает предел расстояния для растяжения веревки. Когда две частицы удаляются друг от друга дальше этого предела, соединяющие их сочленения ломаются, и происходит разрыв.
- Если указано значение бесконечность (inf), веревка растягивается без разрывов. Это значение установлено по умолчанию.
Угловое пороговое значение#
Как и линейное пороговое значение, угловое пороговое значение представляет собой максимальный угол складывания веревки относительно исходного состояния.
-
Если указано значение бесконечность (inf), веревка складывается без разрывов. Это значение установлено по умолчанию.
Рекомендуется поддерживать угловой порог ниже или равным 180 градусов.
Оптимизация моделирования#
Обновление в каждом кадре огромного количества объектов, расположенных далеко от камеры, поэтому трудно различимых или наблюдаемых как масса, является пустой тратой ресурсов.
Чтобы улучшить характеристики и избежать чрезмерной нагрузки, можно уменьшить частоту кадров обновления при моделировании веревки. Когда игрок находится за пределами области, указанной параметром Update Distance Limit, веревка перестает обновляться и статически застывает.
Приведенный ниже набор частот кадров позволяет указать, как часто моделирование веревки должно обновляться, когда объект виден, когда видна только его тень или когда он не виден вообще.
Эта функция включена с настройками по умолчанию, обеспечивающими оптимальную производительность, и может настраиваться для каждого объекта в UnigineEditor или через API во время выполнения.
Назначение тела веревки#
Чтобы присвоить объекту тело Rope через UnigineEditor, выполните следующие действия:
- Откройте окно World Hierarchy.
-
Выберите объект MeshDynamic, которому нужно присвоить тело Rope.
Убедитесь, что меш объекта соответствует требованиям! -
Перейдите на вкладку Physics в окне Parameters и назначьте физическое тело выбранному объекту, выбрав Body -> Rope.
- Задайте название тела и при необходимости измените другие параметры.
Прикрепление веревки#
Веревки могут быть прикреплены к телам следующих типов:
Чтобы прикрепить веревку к телу, используйте сочленение Particles. В случае тел Rigid (статического или динамического) и Dummy закрепленные частицы остаются фиксированными в своем положении и следуют преобразованиям прикрепленных объектов, таща за собой веревку.
- Выберите тело Rigid, RagDoll или Dummy.
- Добавьте сочленение Particles.
- Укажите тело Rope.
- Отрегулируйте область закрепления с помощью параметров Threshold и Size сочленения Particles.
Присоединение к Mesh Skinned#
Убедительная симуляция веревки на персонаже Mesh Skinned требует другого подхода. Чтобы отслеживать преобразования костей, каждая вершина веревки, которая находится в области сочленения Particles, проецируется на ближайшую вершину Mesh Skinned (до расстояния, указанного параметром Threshold сочленения Particles).
Например, нам нужно создать веревку, которая приклеивается к руке персонажа Mesh Skinned, в то время как остальная часть веревки висит и свободно движется. Это делается следующим образом:
- При создании Mesh Skinned добавьте поверхность сегмента веревки, идентичную той части, которую необходимо закрепить. В нашем случае это часть веревки, которая находится в руке.
- Добавьте Mesh Skinned с назначенным телом RagDoll. Убедитесь, что поверхность сегмента веревки включена.
- Добавьте отдельный динамический меш веревки и синхронизируйте его положение с персонажем Mesh Skinned. Отключите физическое моделирование (CTRL + SPACE) и назначьте тело Rope.
- Прикрепите тело Rope к телу RagDoll. Если пороговое расстояние сочленения Particles достаточно низкое, физическая веревка автоматически прикрепится только к поверхности сегмента веревки (то есть к руке). После этого поверхность сегмента веревки просто отключается и не создает никакой нагрузки.