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