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.

Физические тела (Body)

Тела (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 = m * 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. Это удобно, когда тело имеет несколько форм.

Плотность#

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

ρ = m / V

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

Кубики разной массы и плотности

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

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

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

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

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

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

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

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

Трение#

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

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

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

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

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

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

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

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

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

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

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

Примечание

Застывание применимо только к телам:

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

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

  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. Укажите значения для доступных параметров тела.
Последнее обновление: 16.08.2024
Build: ()