This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Режимы вывода изображения
Физика
Браузер SDK 2
Лицензирование и типы лицензий
Дополнения (Add-Ons)
Демонстрационные проекты
API Samples
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Cloth Body

Cloth body позволяет физически моделировать текстиль, одежду и листву, а также листы любого мягкого материала. Ткань можно разорвать на куски, а также прикрепить к телам следующих типов:

Чтобы прикрепить ткань к телу так, чтобы она свисала как плащ или занавеска, используйте сочленение Particles.

Cloth body значительно улучшает внешний вид одетых персонажей (в остальном полностью анимированных) и экономит время игровых художников. Однако моделирование этого типа тела довольно затратно, и настоятельно рекомендуется использовать оптимизацию расстояния, чтобы избежать снижения производительности.

Примечание
Cloth body можно присвоить только объектам Dynamic mesh.

Дополнительная информация#

Требования к мешу#

В большинстве случаев важно, чтобы триангуляция полигонов меша, для которого генерируется Cloth body, была такой, как показано! В противном случае растяжение по всем направлениям не будет правильным и равномерным.

Required mesh triangulation

Например, в 3ds Max топологию меша необходимо отредактировать вручную: выберите в меню Modify > Selection > Edit Edges и щелкните Turn, чтобы превратить треугольники в полигоны.

Имитационная модель массы-пружины#

Cloth body моделируется как набор точечных масс (частиц), расположенных в вершинах меша. Каждая частица имеет форму шара и связана с другими частицами внутренними пружинными сочленениями, расположенными по краям меша. Внутренние сочленения позволяют воссоздать топологию меша, с одной стороны, и ограничивают растяжение и складывание, с другой.

Каждая частица характеризуется положением, массой и скоростью и имеет постоянную сферическую форму с заданным радиусом. Общая масса всего тела равномерно распределяется между ними. В соответствии со вторым законом Ньютона на частицы могут действовать сила или импульс, приложенный внутренними сочленениями и внешними силами (столкновение, сила тяжести, сопротивление воздуха, ветер и т. д.).

Столкновение частиц с самими собой и столкновения между различными телами Cloth не рассчитываются. Однако ткань взаимодействует с окружающей средой, сталкиваясь с другими физическими телами, если установлен флажок Collision. Поведение ткани при контакте контролируется такими параметрами, как трение и восстановление. Селективное физическое взаимодействие доступно через соответствующие битовые маски.

Таким образом, Cloth body можно рассматривать как ограниченную систему твердых частиц и, следовательно, разделяет некоторые параметры с твердыми телами:

Радиус частицы#

Как уже было сказано, каждая частица представляет собой сферу с заданным радиусом. Это дает следующее:

  • Частицы ткани используют непрерывное обнаружение столкновений, поэтому более высокие значения предпочтительнее для более надежного поведения. Столкновения между частицами не рассчитываются и не должны учитываться при установке радиуса. Однако будьте осторожны, поскольку частицы слишком большого диаметра могут привести к некорректному взаимодействию с окружающей средой (подергиванию или иному нестабильному поведению ткани). Слишком малый радиус приводит к плохой обработке столкновений.
  • Поскольку частицы ткани приближены к сферам, ткань никогда не ложится на землю ровно или плотно прилегает к поверхностям. Всегда есть зазор, размер которого соответствует заданному радиусу.
Примечание
Предмет может пройти сквозь ткань, если радиус частицы мал, а ткань растянута. Причина в том, что непрерывное обнаружение столкновений выполняется только для сфер частиц, расположенных в вершинах меша ткани.

Итерации решения сочленений#

Количество итераций контролирует точность решения внутренних сочленений ткани. Это число указывает, сколько раз сочленения решаются за кадр физических расчетов. сочленения решаются в случайном порядке, чтобы обеспечить более предсказуемые результаты растяжения.

  • Меньшее количество итераций приводит к более быстрому моделированию. Однако в этом случае ткань более склонна к растяжению и выглядит более эластичной. Минимальное значение — 1.
  • Большое количество итераций обеспечивает более точное решение ограничений. В этом случае ткань выглядит более жесткой. Максимальное значение — 16.

    Примечание
    Увеличение количества итераций обходится значительно дороже и в какой-то момент перестает приносить заметную пользу, поэтому его следует удерживать в разумных пределах.

Увеличение количества повторений может помочь избежать подергивания ткани.

Растяжение и складывание#

Ткань может деформироваться при растяжении и складывании. Эти деформации контролируются связями двух типов:

С помощью этих типов ограничений можно получить желаемый внешний вид ткани и имитировать множество различных деформируемых материалов, от жесткого картона до мягкой лайкры.

Линейное восстановление#

Линейное восстановление определяет, насколько частицы ткани могут быть удалены друг от друга при растяжении. Оно заставляет тканевые стыки восстановить расстояние, которое было между вершинами исходного меша:

  • При максимальном значении 1 частицы отскакивают с большой силой, и ткань трудно растянуть. Создает эффект жесткой неэластичной ткани, например льняной или твидовой.
  • Чем ниже значение, тем легче частицы отдаляются друг от друга и тем более растяжимой и эластичной будет ткань, например нейлон или спандекс.

    Примечание
    0 и близкие к нулю значения не допускаются, потому что они вызывают нестабильную симуляцию ткани.

Угловое восстановление#

Угловое восстановление определяет возможный угол между треугольниками ткани, образованными частицами. Он ограничивает складывание ткани, усиливая сочленения, чтобы сохранить угол, который был между треугольниками исходного меша:

  • При максимальном значении 1 углы сохраняются, и ткань сопротивляется складыванию. Ткань кажется жесткой и без складок (например, бумага).

    Примечание
    Максимальное значение может привести к неустойчивому поведению.
  • При минимальном значении 0 ткань можно легко складывать и гнуть в любом направлении, независимо от исходной топологии меша.
Примечание

Если ткань слишком эластичная, попробуйте одно из следующих действий:

  • Установите для линейного восстановления значение 1.
  • Увеличьте количество итераций решения сочленений.
  • Используйте меш с меньшим количеством вершин.

Жесткость движения#

Параметр жесткости — это дополнительное ограничение движения ткани, которое делает ее более жесткой и негибкой. Для этого линейная и угловая скорости каждой частицы ткани корректируются в соответствии с полными скоростями, интерполированными для всех частиц.

  • Минимальное значение 0 делает ткань эластичной, гибкой и легко деформируемой.
  • Максимальное значение 1 делает ткань более жесткой и менее склонной к деформации.

Разрыв#

Когда ткань растягивается до предела эластичности или складывается, она рвется и рассыпается на куски. Разрыв вызывается приложением силы или столкновением с физическим телом и зависит от жесткости ткани (контролируется параметрами линейного и углового восстановления). Например, представьте, как пушечное ядро попадает в парус и оставляет в нем дыру. Ткань рвется только по краям треугольников ткани, разделяя вершины меша и дублируя частицы.

Cloth tearing

Разрыв ткани
Примечание
Если оторванные куски ткани падают на одну плоскость, они вызывают мерцание (Z-fighting).

Линейное пороговое значение#

Линейное пороговое значение устанавливает предел расстояния для растяжения ткани. Когда две частицы удаляются друг от друга дальше этого предела, соединяющие их сочленения ломаются, и появляется разрыв.

  • Если установлено значение бесконечности (inf), ткань растягивается без разрывов. Это значение установлено по умолчанию.

Угловое пороговое значение#

Так же, как и линейное, угловое пороговое значение представляет собой максимальный угол складки ткани относительно исходного состояния. Если треугольники ткани сгибаются дальше, сочленение разрывается, и треугольники разделяются по соприкасающемуся ребру.

  • Если установлено на бесконечность (inf), ткань складывается без разрывов. Это значение установлено по умолчанию.

    Примечание
    Рекомендуется поддерживать угловой порог ниже или равным 180 градусов.

Оптимизация моделирования#

Каждый кадр обновлять огромное количество объектов, расположенных далеко от камеры, а поэтому трудно различимых или наблюдаемых как общая масса, является пустой тратой ресурсов.

Чтобы улучшить производительность и избежать чрезмерной нагрузки, для моделирования ткани можно выбрать режим обновления с меньшей частотой кадров. Когда игрок находится за пределами области, указанной параметром Update Distance Limit, ткань перестает обновляться и застывает в статичном положении.

Приведенные ниже режимы частоты кадров позволяют задать частоту обновления моделирования ткани в случаях, когда объект виден, когда видна только его тень или когда он не виден вообще.

Вкладка Parameters -> Physics → раздел Periodic Update
FPS When Object Is Rendered To Viewport Значение частоты обновления, когда объект отображается в области просмотра.
FPS When Only Object Shadows Are Rendered Значение частоты обновления, когда сам объект находится за пределами области просмотра, и только его тень отображается в области просмотра.
FPS When Object Is Not Rendered At All Значение частоты обновления, когда объект и его тень не отображаются в области просмотра.
Update Distance Limit Расстояние от камеры, в пределах которого необходимо обновить объект.
Примечание
Эти значения не являются фиксированными и могут изменяться движком в любое время для обеспечения наилучшей производительности.

Эта функция включена с настройками по умолчанию, обеспечивая оптимальную производительность, и может быть настроена для каждого объекта в UnigineEditor или через API во время выполнения.

Внимание
Помните, что использование пониженной частоты кадров обновления для объекта должно быть тщательно продумано в логике вашего приложения, так как это может привести к различным проблемам с рендерингом объектов Mesh Skinned и Mesh Dynamic (мерцание из-за несовпадения, например, в случае прикрепления ткани к Mesh Skinned).

Назначение тела Cloth#

Чтобы присвоить объекту Cloth body через UnigineEditor, выполните следующие действия:

  1. Откройте окно World Hierarchy.
  2. Выберите объект Dynamic Mesh, которому нужно присвоить Cloth body.

    Примечание
    Убедитесь, что меш объекта соответствует требованиям!
  3. Перейдите на вкладку Physics в окне Parameters и назначьте физическое тело выбранному объекту, выбрав Body -> Cloth.

    Adding a body

  4. Задайте название тела и при необходимости настройте параметры.

Прикрепление ткани#

I'm Batman!

Ткань, прикрепленная к анимированному персонажу

Полотно можно прикрепить к телам следующих типов:

Чтобы прикрепить ткань к телу, используйте сочленение Particles. В случае тел Rigid (статических или динамических) и тел Dummy закрепленные частицы остаются фиксированными в своем положении и повторяют преобразования объектов, к которым они крепятся, вытягивая за собой ткань.

  1. Выберите тело Rigid, Ragdoll или Dummy.
  2. Добавьте сочленение Particles.
  3. Укажите тело Cloth.
  4. Настройте область прикрепления, используя параметры Threshold и Size сочленения Particles.
Примечание
Чтобы обеспечить стабильную симуляцию, установите соответствующие массы для ткани и тела, к которому она крепится. Несбалансированные массы могут вызвать подергивание сочленений ткани.

Присоединение к Skinned Mesh#

Убедительная симуляция одежды персонажа со скелетной анимацией требует другого подхода. Чтобы отслеживать преобразования костей, каждая вершина ткани, которая находится в области сочленения Particles, сопоставляется с ближайшей вершиной Mesh Skinned (до расстояния, указанного параметром Threshold для сочленения Particles).

Примечание
Не рекомендуется прикреплять ткань непосредственно к персонажу со скелетной анимацией, потому что различие в топологии может привести к визуальным артефактам. Вместо этого лучше создать идентичную тканевую поверхность на меше персонажа со скелетной анимацией, сделать ее невидимой и прикрепить к ней физическую ткань.

Например, нам нужно создать плащ, который одной стороной приклеен к плечам персонажа со скелетной анимацией, а остальные части свободно провисают складками. Это делается следующим образом:

  1. При создании Mesh Skinned добавьте поверхность плаща, идентичную плащу, который будет носить персонаж. Это может быть как целый плащ, так и только его обрезанная часть, которую нужно приколоть. Последнее предпочтительнее при моделировании сложной одежды, что требует более гибкого контроля над тем, какие части моделировать физически, а какие перемещать с персонажем со скелетной анимацией. В нашем случае это часть ткани на плечах.
  2. Добавьте меш со скелетной анимацией, на который назначено тело Ragdoll. Убедитесь, что поверхность плаща включена.
  3. Добавьте отдельный Mesh Dynamic для ткани и синхронизируйте его положение с персонажем со скелетной анимацией. Отключите моделирование физики (CTRL + SPACE) и назначьте тело Cloth.
  4. Прикрепите тело Cloth к телу Ragdoll. Если расстояние, заданное в параметре Threshold сочленения Particles, достаточно низкое, физический плащ будет автоматически прикреплен только к поверхности плаща (то есть плечам). После этого плащ просто отключается и не создает никакой нагрузки.
Последнее обновление: 16.08.2024
Build: ()