This page has been translated automatically.
Видеоуроки
Interface
Essentials
Advanced
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Landscape Tool
Sandworm
Использование инструментов редактора для конкретных задач
Extending Editor Functionality
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World Nodes
Звуковые объекты
Объекты поиска пути
Players
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL
Плагины
File Formats
Rebuilding the Engine Tools
GUI
Двойная точность координат
API
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
Работа с контентом
Оптимизация контента
Материалы
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Tutorials
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Физические тела

Тела (Body) можно считать физическим приближением объектов. Они описывают поведение объекта и представляют собой набор его физических параметров, таких как масса, скорость и т.д. Именно тело обеспечивает взаимодействие объекта с другими объектами и внешними физическими силами. Каждый тип тела используется для моделирования определенного типа объекта:

  • Rigid body (также требует назначения shape ) - позволяет моделировать объекты в соответствии с динамикой твердого тела .
  • Ragdoll body (также требуется, чтобы для каждой кости был назначен shape ) - предоставляет персонажей с , анимацией на костях , с процедурной анимацией последовательности смерти.
  • Fracture body - позволяет моделировать разрушаемые объекты в реальном времени.
  • Rope body - позволяет физически моделировать различные типы веревок и проводов.
  • Cloth body - позволяет физически моделировать различные типы ткани.
  • Water body - позволяет физически моделировать жидкости различной плотности и вязкости, включая эффект плавучести и волновую динамику.

Также есть два типа вспомогательных тел :

  • Dummy body - статический тип тела без физических свойств. Оно используется для прикрепления других тел через сочленения (joints).
  • Path body - статический тип тела без физических свойств. Это путь, по которому можно перемещать произвольное твердое тело (rigid).

Для быстрого ознакомления со всеми типами тел посмотрите фрагмент нашего видеоурока по физике .

Динамика твердого тела#

Большинство физических симуляций основано на динамике твердого тела . Тело Rigid - это идеальное представление твердого тела, занимающего конечный объем пространства. Этот объем пространства определяется формой или набором фигур, назначенных телу. Жесткие тела нельзя деформировать, т.е. их геометрия не меняется, что бы с этим телом ни происходило. Динамика твердого тела применяется к следующим телам с заданными формами (shapes):

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

Run Lola Run

Рэгдоллы и твердые тела, движущиеся согласно динамике твердого тела

Посмотрите фрагмент нашего видеоурока по физике , чтобы проиллюстрировать эту статью.

Базовые концепции#

Состояние твердого тела в любой момент времени задается его положением, ориентацией в пространстве (относительно некоторой опорной точки - центра масс) и скоростью . Есть два типа движения тела и, следовательно, две компоненты скорости:

  • Линейное движение . Если мы представим, что ориентация тела фиксирована, то единственное движение, которое может совершить тело, - это поступательное движение - изменение линейного положения. Это изменение выполняется с линейной скоростью (Linear Velocity).
  • Угловое движение . С другой стороны, если мы заморозим центр масс нашего тела в пространстве, единственное движение, которое сможет совершить тело, - это вращение, которое описывается угловой скоростью (Angular Velocity).
Примечание
Установка линейной или угловой скорости тела немедленно заставит его двигаться или вращаться в указанном направлении.

По мере движения тела его линейный и угловой моменты изменяются. Линейный импульс (Linear Impulse) можно представить как степень, до которой тело будет продолжать двигаться по прямому пути. Это произведение массы и линейной скорости тела:

p = m * v

Тело будет продолжать двигаться вечно, если на него не будет воздействовать внешняя сила или импульс. Сила (Force) равна массе тела, умноженной на ускорение:

F = м * a

Заставляя тело испытывать ускорение (то есть изменять его скорость с течением времени), сила косвенно управляет его скоростью и положением.

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

Импульс (Impulse) - это интеграл силы во времени. Это можно рассматривать как изменение количества движения объекта, к которому приложена равнодействующая сила. Например, когда два тела сталкиваются, они обмениваются импульсами, которые равны и противоположны, как применяется третий закон Ньютона, и в результате расходятся.

Подобно линейному импульсу, угловой момент (Angular Momentum) является мерой «количества вращательного движения» и может рассматриваться как степень, до которой тело будет продолжать вращаться вокруг оси симметрии. Он выражается как произведение тензора инерции (Inertia tensor) тела и его угловой скорости.

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

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

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

Таким образом, движение характеризуется следующими основными параметрами:

Линейное движение Угловое движение
Mass (scalar) Inertia tensor (mat3)
Linear velocity (vec3) Angular velocity (vec3)
Force(vec3)

Impulse ( vec3)
Torque (vec3)

Регулируемые параметры тела, определяющие его поведение в рамках динамики твердого тела, следующие:

Масса#

Масса объекта, умноженная на гравитацию , указанную для мира, определяет его вес:

W = m * g

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

Массовые параметры тела можно настроить вручную или определить автоматически с помощью параметров shape-based . Это удобно, когда тело имеет несколько форм .

Плотность#

Плотность объекта определяется как его масса на единицу объема:

ρ = м / V

Очевидно, что значение плотности зависит от значения массы и наоборот: чем выше значения, тем тяжелее и плотнее объект.

Boxes of different mass and density

Плавающие ящики разной массы и плотности

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

Линейное и угловое демпфирование#

Когда объект начинает двигаться в определенном направлении, линейная демпфирующая сила (linear damping force) замедляет его до полной остановки. Подобно линейному демпфированию, угловое демпфирование (angular damping) снижает угловую скорость объектов с течением времени, так что их вращение прекращается. К линейному демпфированию тела добавляется глобальное Linear Damp и вычисляется экспоненциальная функция. Точно так же, как и угловое демпфирование тела, добавляется глобальное Angular Damp.

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

Максимальные линейная и угловая скорость#

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

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

Трение#

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

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

Трение рассчитывается при контакте между физическими телами.

Примечание
Если для поверхности включен параметр Collision, он также участвует в расчетах.

Восстановление#

Коэффициент восстановления (Restitution) определяет степень относительной кинетической энергии, сохраняющейся после столкновения. Он определяет степень упругости объекта при контакте с другим объектом. Это зависит от упругости материалов сталкивающихся тел. Смоделированная реституция, как и трение, учитывает общую стоимость обоих объектов, находящихся в контакте.

  • Максимальное значение 1 моделирует упругое столкновение. Объекты отскакивают в соответствии с импульсом, который они получают при контакте.
  • Минимальное значение 0 моделирует неупругое столкновение. Объекты вообще не отскакивают.

Опять же, как и трение, возмещение рассчитывается путем контакта между физическими телами.

Примечание
Если для поверхности включена опция Collision, она также способствует расчетам.

Застывание (Freezing)#

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

Примечание
Застывание применимо только к телам:
Frozen boxes     Simulation starts again as the impulse unfreezes boxes
Замороженные синие и незамороженные красные коробки. Импульс, приложенный к пирамиде ящиков, разморозил все, кроме одного.

Тело заморожено, т.е. перестает моделироваться, если:

  1. Его линейная скорость меньше Frozen linear velocity, а угловая скорость меньше Frozen angular velocity. Оба значения скорости должны быть ниже одновременно, иначе симуляция не остановится.

    Также для всего мира установлены пороги Frozen linear velocityиFrozen angular velocity. Эти глобальные пороги замораживания сравниваются с порогами, установленными для каждого тела, и выбирается максимальное значение, чтобы заморозить тело.

  2. Значения скорости остаются ниже фиксированных скоростей для числа Frozen frames. Это делается для того, чтобы тело действительно прекратило движение.

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

Установка параметров тела#

Параметры каждого кузова определяются его типом. Чтобы просмотреть или настроить эти параметры через UnigineEditor :

  1. Выберите узел в Editor Viewport или в окне иерархии World Nodes .
  2. Перейдите на вкладку Physics в окне Parameters .
  3. Укажите доступные параметры тела.
Последнее обновление: 13.12.2021
Build: ()