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