Физические тела (Bodies)
Тела (Body) можно считать физическим приближением объектов. Они описывают поведение объекта и представляют собой набор его физических параметров, таких как масса, скорость и т.д. Именно тело обеспечивает взаимодействие объекта с другими объектами и внешними физическими силами. Каждый тип тела используется для моделирования определенного типа объекта:
- Rigid body (также требует назначения shape ) - позволяет моделировать объекты в соответствии с динамикой твердого тела .
- Ragdoll body (также требуется, чтобы для каждой кости был назначен shape ) - предоставляет персонажей с , анимацией на костях , с процедурной анимацией последовательности смерти.
- Fracture body - позволяет моделировать разрушаемые объекты в реальном времени.
- Rope body - позволяет физически моделировать различные типы веревок и проводов.
- Cloth body - позволяет физически моделировать различные типы ткани.
- Water body - позволяет физически моделировать жидкости различной плотности и вязкости, включая эффект плавучести и волновую динамику.
Также есть два типа вспомогательных тел :
- Dummy body - статический тип тела без физических свойств. Оно используется для прикрепления других тел через сочленения (joints).
- Path body - статический тип тела без физических свойств. Это путь, по которому можно перемещать произвольное твердое тело (rigid).
Для быстрого ознакомления со всеми типами тел посмотрите фрагмент нашего видеоурока по физике .
Динамика твердого тела#
Большинство физических симуляций основано на динамике твердого тела . Тело Rigid - это идеальное представление твердого тела, занимающего конечный объем пространства. Этот объем пространства определяется формой или набором фигур, назначенных телу. Жесткие тела нельзя деформировать, т.е. их геометрия не меняется, что бы с этим телом ни происходило. Динамика твердого тела применяется к следующим телам с заданными формами (shapes):
После включения все эти тела и их формы, которые приблизительно соответствуют объему объекта, обладают общими свойствами твердых объектов, подчиняющихся механике Ньютона.
Посмотрите фрагмент нашего видеоурока по физике , чтобы проиллюстрировать эту статью.
Базовые концепции#
Состояние твердого тела в любой момент времени задается его положением, ориентацией в пространстве (относительно некоторой опорной точки - центра масс) и скоростью . Есть два типа движения тела и, следовательно, две компоненты скорости:
- Линейное движение . Если мы представим, что ориентация тела фиксирована, то единственное движение, которое может совершить тело, - это поступательное движение - изменение линейного положения. Это изменение выполняется с линейной скоростью (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) |
Регулируемые параметры тела, определяющие его поведение в рамках динамики твердого тела, следующие:
Масса#
Масса объекта, умноженная на гравитацию , указанную для мира, определяет его вес:
центр масс автоматически рассчитывается как среднее расположение масс всех форм, которые приблизительно соответствуют объекту. Он служит точкой отсчета для линейного движения и вращения, а также приложения внешней силы и крутящего момента.
Массовые параметры тела можно настроить вручную или определить автоматически с помощью параметров shape-based . Это удобно, когда тело имеет несколько форм .
Плотность#
Плотность объекта определяется как его масса на единицу объема:
Очевидно, что значение плотности зависит от значения массы и наоборот: чем выше значения, тем тяжелее и плотнее объект.
Плотность определяет плавучесть тела по принципу Архимеда. Чем выше плотность, тем меньше у тела склонности к плаванию.
Линейное и угловое демпфирование#
Когда объект начинает двигаться в определенном направлении, линейная демпфирующая сила (linear damping force) замедляет его до полной остановки. Подобно линейному демпфированию, угловое демпфирование (angular damping) снижает угловую скорость объектов с течением времени, так что их вращение прекращается. К линейному демпфированию тела добавляется глобальное Linear Damp и вычисляется экспоненциальная функция. Точно так же, как и угловое демпфирование тела, добавляется глобальное Angular Damp.
Эти два параметра обеспечивают плавную остановку объектов и отсутствие необходимости вычислять ненужное движение.
Максимальные линейная и угловая скорость#
Максимальная линейная и угловая скорость определяют максимально возможные скорости тела. Скорости, превышающие этот предел, обрезаются. Например, параметр максимальной линейной скорости может помочь избежать эффекта туннелирования (проникновения).
Трение#
Коэффициент трения (Friction) позволяет моделировать более грубое трение поверхностей и противоположен направлению движения тела. Чем выше значение, тем меньше тенденция к скольжению тела. Учитываются значения трения обеих соприкасающихся поверхностей.
Полученное вычисленное трение зависит от масс и силы тяжести объектов, а также угла между соприкасающимися поверхностями. Например, если тело скользит по наклонной плоскости, трение становится меньше, потому что уменьшается сила тяжести, перпендикулярная поверхности.
Трение рассчитывается при контакте между физическими телами.
Восстановление#
Коэффициент восстановления (Restitution) определяет степень относительной кинетической энергии, сохраняющейся после столкновения. Он определяет степень упругости объекта при контакте с другим объектом. Это зависит от упругости материалов сталкивающихся тел. Смоделированная реституция, как и трение, учитывает общую стоимость обоих объектов, находящихся в контакте.
- Максимальное значение 1 моделирует упругое столкновение. Объекты отскакивают в соответствии с импульсом, который они получают при контакте.
- Минимальное значение 0 моделирует неупругое столкновение. Объекты вообще не отскакивают.
Опять же, как и трение, возмещение рассчитывается путем контакта между физическими телами.
Застывание (Freezing)#
Когда тело не движется и какое-то время остается в равновесии, оно, скорее всего, будет неподвижным, пока на него не будет воздействовать внешняя сила, которая заставит его снова двигаться. Во время этого периода бездействия фактически нет необходимости моделировать его. Это состояние называется застыванием и позволяет сэкономить много вычислительных ресурсов.
Замороженные синие и незамороженные красные коробки. Импульс, приложенный к пирамиде ящиков, разморозил все, кроме одного.
|
Тело заморожено, т.е. перестает моделироваться, если:
- Его линейная скорость меньше Frozen linear velocity, а угловая скорость меньше Frozen angular velocity. Оба значения скорости должны быть ниже одновременно, иначе симуляция не остановится.
Также для всего мира установлены пороги Frozen linear velocityиFrozen angular velocity. Эти глобальные пороги замораживания сравниваются с порогами, установленными для каждого тела, и выбирается максимальное значение, чтобы заморозить тело.
- Значения скорости остаются ниже фиксированных скоростей для числа Frozen frames. Это делается для того, чтобы тело действительно прекратило движение.
Когда тело заморожено, его линейная и угловая скорость устанавливаются на 0 . Моделирование движения тела начинается снова, когда к нему прикасается другой незамерзший объект или к нему прикладывается некоторая сила.
Установка параметров тела#
Параметры каждого кузова определяются его типом. Чтобы просмотреть или настроить эти параметры через UnigineEditor :
- Выберите узел в Editor Viewport или в окне иерархии World Nodes .
- Перейдите на вкладку Physics в окне Parameters .
- Укажите доступные параметры тела.