Cloth Body
Cloth body позволяет физически моделировать текстиль, одежду и листву, а также листы из любого мягкого материала. Ткань может быть разорвана на куски, а также ее можно приколоть к телам следующих типов:
Чтобы прикрепить ткань к телу так, чтобы она свисала как плащ или занавеска, используйте Соединение частиц .
Cloth body значительно улучшает внешний вид одетых персонажей (в остальном полностью анимированных) и экономит время игровых художников. Однако моделирование этого типа тела довольно затратно, и настоятельно рекомендуется использовать оптимизация расстояния чтобы избежать снижения производительности.
Смотрите также#
- BodyCloth класс
- An пример иллюстрируя использование Cloth body и Соединение частиц
- Фрагмент видеоурока по физике, иллюстрирующий моделирование ткани с использованием Cloth body
Требования к сетке#
В большинстве случаев важно, чтобы триангуляция полигона сетки, для которой генерируется Cloth body, была такой, как показано! В противном случае это может не протяжение правильно и равномерно по всем направлениям.
Например, в 3ds Max топологию сетки необходимо отредактировать вручную: выберите свиток Modify > Selection > Edit Edges и щелкните Turn, чтобы превратить треугольники в поли.
Имитационная модель масс-пружины#
Cloth body моделируется как набор точечных масс (частиц), расположенных в вершинах сетки. Каждая частица имеет форму шара и связана с другими частицами внутренними пружинными соединениями, расположенными по краям сетки. Внутренние стыки позволяют воссоздать топологию сетки, с одной стороны, и ограничивают растяжение и складывание, с другой.
Каждая частица характеризуется положением, массой и скоростью и имеет постоянную сферическую форму с набором радиус . Общая масса всего тела равномерно распределяется между ними. В соответствии со вторым законом Ньютона на частицы могут действовать сила или импульс приложенный внутренними суставами и внешними силами ( столкновение , сила тяжести , сопротивление воздуха, ветер и т. д.).
Самоудаление частиц и столкновения между различными тканевыми телами не рассчитываются. Однако ткань взаимодействует с окружающей средой, сталкиваясь с другими физическими телами, если установлен флажок Collision. Его поведение при контакте контролируется такими параметрами, как трение а также реституция . Селективное физическое взаимодействие доступно через соответствующие битовые маски .
Таким образом, Cloth body можно рассматривать как ограниченную систему твердых частиц и, следовательно, разделяет некоторые параметры с твердыми телами:
Радиус частицы#
Как уже было сказано, каждая частица представляет собой сферу с заданным радиусом . Это дает следующее:
- Частицы ткани используют непрерывное обнаружение столкновений, поэтому более высокие значения предпочтительнее для более надежного поведения. Столкновения между частицами не рассчитываются и не должны учитываться при установке радиуса. Однако будьте осторожны, поскольку частицы слишком большого диаметра могут привести к некорректному взаимодействию с окружающей средой (подергиванию или вздутию ткани). Слишком малый радиус приводит к плохой обработке столкновений.
- Поскольку частицы ткани приближены к сферам, ткань никогда не ложится на землю ровно или плотно прилегает к поверхностям. Всегда есть зазор, размер которого соответствует заданному радиусу.
Итерации решателя суставов#
Количество итераций контролирует точность решения внутренних стыков ткани. Это число указывает, сколько раз соединения решаются за физическая рамка . Соединения решаются в случайном порядке, чтобы обеспечить более предсказуемые результаты растяжения.
- Меньшее количество итераций приводит к более быстрому моделированию. Однако в этом случае ткань более склонна к растяжению и выглядит более эластичной. Минимальное значение - 1.
-
Большое количество итераций обеспечивает более точное решение ограничений. В этом случае ткань выглядит более жесткой. Максимальное значение - 16.
Увеличение количества итераций обходится значительно дороже и в какой-то момент перестает приносить заметную пользу, поэтому его следует удерживать в разумных пределах рентабельности.
Увеличение количества повторений может помочь избежать подергивания ткани.
Растяжка и складывание#
Ткань может деформироваться при растяжении и складывании . Эти деформации контролируются связями двух типов:
- Линейная реституция контролирует растяжку.
- Угловая реституция управляет складыванием.
С помощью этих типов ограничений можно получить желаемый внешний вид ткани и имитировать множество различных деформируемых материалов, от жесткого картона до мягкой лайкры.
Линейная реституция#
Линейное восстановление определяет, насколько частицы ткани могут быть растянуты друг от друга. Он заставляет тканевые стыки восстановить расстояние, которое было между вершинами исходной сетки:
- При максимальном значении 1 частицы отскакивают с большой силой, и ткань трудно растянуть. Создает эффект жесткой неэластичной ткани, например льняной или твидовой.
-
Чем ниже значение, тем легче частицы удаляются друг от друга и тем более растяжимой и эластичной будет ткань, например нейлон или спандекс.
0 и близкие к нулю значения не допускаются, потому что они вызывают нестабильную симуляцию и взрыв ткани.
Угловая реституция#
Угловое восстановление определяет возможный угол между треугольниками ткани, образованными частицами. Он ограничивает складывание ткани, усиливая стыки, чтобы сохранить угол, который был между треугольниками исходной сетки:
-
При максимальном значении 1 углы сохраняются, и ткань сопротивляется складыванию. Ткань кажется жесткой и без складок (например, бумага).
Максимальное значение может привести к неустойчивому поведению. - При минимальном значении 0 ткань можно легко складывать и гнуть в любом направлении, независимо от исходной топологии сетки.
Если ткань слишком эластичная и эластичная, попробуйте одно из следующих действий:
- Установите для линейного восстановления значение 1.
- Увеличить количество стыков решателя итерации .
- Используйте сетку с меньшим количеством вершин.
Жесткость движения#
Параметр жесткости - это дополнительное ограничение движения ткани, которое делает ее более жесткой и негибкой. Для этого линейная и угловая скорости каждой частицы ткани корректируются в соответствии с полными скоростями, интерполированными для всех частиц.
- Минимальное значение 0 делает ткань эластичной, гибкой и легко деформируемой.
- Максимальное значение 1 делает ткань более жесткой и менее склонной к деформации.
Разрывая#
Когда ткань растягивается до предела эластичности или складывается, она рвется и рассыпается на куски. Разрыв вызывается приложением силы или столкновением с физическим телом и зависит от жесткости ткани (контролируется линейный а также угловая реституция параметры). Например, представьте, как пушечное ядро попадает в парус и оставляет в нем дыру. Ткань рвется только по краям треугольников ткани, разделяя вершины сетки и дублируя частицы.
Линейное пороговое расстояние#
Линейный порог устанавливает предел расстояния для растяжение ткань. Когда две частицы удаляются друг от друга дальше этого предела, соединяющие их соединения ломаются, и появляется разрыв.
- Если установлено значение бесконечности (inf), ткань растягивается без разрывов. Это значение установлено по умолчанию.
Угловой пороговый угол#
Так же, как и линейный порог, угловой порог представляет собой максимальный угол к складывать ткань относительно исходного состояния. Если треугольники ткани сгибаются дальше, стык разрывается, и треугольники разделяются по соседнему краю.
-
Если установлено на бесконечность (inf), ткань складывается без разрывов. Это значение установлено по умолчанию.
Рекомендуется поддерживать угловой порог ниже или равным 180 градусов.
Оптимизация моделирования#
Обновление каждого кадра огромного количества объектов, расположенных далеко от камеры, которые трудно различить или наблюдать как массу, является пустой тратой ресурсов.
Чтобы улучшить производительность и избежать чрезмерной нагрузки, можно моделировать ткань. обновлено с уменьшенной частотой кадров . Когда игрок находится за пределами области, указанной параметром Update Distance Limit, ткань перестает обновляться и статически замерзает.
Приведенный ниже набор частот кадров позволяет указать, как часто моделирование ткани должно обновляться, когда объект виден, когда видна только его тень или когда он не виден вообще.
Эта функция включена с настройками по умолчанию, обеспечивающими оптимальную производительность, и может быть настроена для каждого объекта в UnigineEditor или через API во время выполнения.
Назначение тканевого тела#
Чтобы присвоить объекту Cloth body через UnigineEditor выполните следующие действия:
- Откройте окно World Hierarchy.
-
Выберите объект Dynamic Mesh, которому нужно присвоить Cloth body.
Убедитесь, что сетка объекта соответствует требования ! -
Перейдите на вкладку Physics в окне Parameters и назначьте физический тело к выбранному объекту, выбрав Body -> Cloth.
- Задайте название тела и при необходимости измените другие параметры.
Прикрепление ткани#
Полотно можно прикрепить к телам следующих типов:
Чтобы прикрепить ткань к телу, используйте Particles Joint. В случае тел Rigid (статических или динамических) и тел Dummy закрепленные частицы остаются фиксированными в своем положении и следуют преобразованиям прикрепленных объектов, вытягивая за собой ткань.
- Выберите Rigid body, Ragdoll body или Dummy body.
- Добавьте Particles Joint.
- Укажите Cloth body.
- Отрегулируйте область закрепления, используя параметры Threshold и Size соединения частиц.
Присоединение к сетке со скелетом#
Убедительная симуляция одежды персонажа без кожи требует другого подхода. Чтобы отслеживать преобразования костей, каждая вершина ткани, которая находится в области Particles Joint, отображается на ближайшую вершину скелетного меша (до расстояния, указанного параметром Threshold соединения частиц).
Например, нам нужно создать плащ, который приклеивается к плечам персонажа с кожей, а остальные складываются свободно. Это делается в следующие шаги:
- При создании Mesh Skinned добавьте поверхность плаща, идентичную плащу, который будет носить персонаж. Это может быть как целая накидка, так и только ее обрезанная часть, которую нужно приколоть. Последнее предпочтительнее при моделировании сложной одежды, что требует более гибкого контроля над тем, какие части моделировать физически, а какие перемещать с персонажем без кожи. В нашем случае это тканевая часть на плечах.
- Добавьте сетку со скелетом, которой назначен Ragdoll body. Убедитесь, что накидка активирована .
- Добавьте отдельную динамическую сетку ткани и синхронизируйте ее положение с персонажем со скелетом. Отключите физическое моделирование (CTRL + SPACE) и назначать а Cloth body.
- Прикреплять От Cloth body до Ragdoll body. Если расстояние Threshold соединения частиц установлено достаточно низким, физический плащ будет автоматически прикреплен только к поверхности плаща (то есть плечам). После этого накидка просто отключается и не несет никакой нагрузки.