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
Учебные материалы

Rope Body

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

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

Примечание
Тело Rope можно присвоить только объектам Mesh Dynamic.

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

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

Единственный допустимый тип меша для тела Rope — это цилиндр. Вы можете использовать стандартный примитивный цилиндр для создания веревки. В этом случае рекомендуем использовать следующий подход:

  1. В панели инструментов нажмите Create -> Primitive -> Cylinder.
  2. Задайте желаемые параметры веревки (длина, радиус) для цилиндра, например, следующие:

    Create Cylinder

  3. Нажмите OK и добавьте цилиндр в сцену. Он создан как объект Static Mesh. Сам объект можно удалить, а его меш будет доступен в папке data/.
  4. Создайте объект Dynamic Mesh и используйте для него меш цилиндра.
  5. Назначьте тело Rope на созданный объект Dynamic Mesh.

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

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

Mass-Spring Simulation Model

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

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

Таким образом, тело Rope можно рассматривать как ограниченную систему жестких частиц, и поэтому некоторые параметры такие же, как у тела Rigid:

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

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

Поскольку столкновения между частицами не рассчитываются, их не следует учитывать при установке радиуса:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Разрыв#

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

Примечание
Если порванные куски веревки падают на одну плоскость, они вызывают мерцание (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).

Назначение тела веревки#

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

  1. Откройте окно World Hierarchy.
  2. Выберите объект MeshDynamic, которому нужно присвоить тело Rope.

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

    Adding a body

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

Прикрепление веревки#

Веревка, прикрепленная к Mesh Skinned

Веревка, прикрепленная к персонажу со скелетной анимацией

Веревки могут быть прикреплены к телам следующих типов:

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

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

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

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

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

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

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