Сочленения (Joints)
Сочленения (Joints) обеспечивают ограничения, ограничивающие степени свободы тела, и используются для соединения пар тел. У каждого сочленения есть точка привязки, которая по умолчанию размещается между центрами масс соединенных тел. Свойства каждого сочленения зависят от выбранного типа и его параметров. Параметры сочленений можно разделить на две группы:
- Общие параметры — базовый набор параметров, общий для всех сочленений.
- Параметры для конкретного типа — набор конкретных параметров для каждого типа сочленения.
Дополнительная информация#
Программная реализация:
- Класс Joint
- Класс JointFixed
- Класс JointHinge
- Класс JointBall
- Класс JointPrismatic
- Класс JointCylindrical
- Класс JointWheel
- Класс JointSuspension (устарел)
- Класс JointPath
- Класс JointParticles
Примеры использования:
Фрагмент видеоурока по физике про сочленения
Добавление сочленения#
Предположим, у вас есть два объекта с назначенными физическими телами. Помните, что телу (body) должна быть назначена форма (shape). Чтобы соединить их с помощью сочленения в UnigineEditor, выполните следующие шаги:
- Откройте окно World Hierarchy.
- Выберите первое тело для соединения.
- Перейдите на вкладку Physics в окне Parameters.
-
В разделе Joints выберите подходящий тип сочленения и щелкните Add.
- Выберите второе тело, указав его имя в диалоговом окне, и нажмите Ok.
- Задайте параметры сочленения в разделе Joints.
Вы можете включить визуализацию сочленения, выбрав панель Helpers → элемент Physics → параметр Joints (Visualizer должен быть включен).
Фиксированное сочленение (Fixed Joint)#
Фиксированные сочленения соединяют два тела таким образом, чтобы их положение строго сохранялось по отношению друг к другу.
Фиксированное сочленение
|
Параметры фиксированного сочленения
|
Основные параметры ограничения этого сочленения включают:
Rotation 0 | Задает ориентацию первого тела относительно точки привязки. |
Rotation 1 | Задает ориентацию второго тела относительно точки привязки |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Для получения дополнительной информации см. описание класса JointFixed. Пример, иллюстрирующий соединение двух тел с помощью фиксированного сочленения, можно найти здесь.
Посмотрите иллюстрацию фиксированного сочленения в нашем видеоуроке по физике.
Шарнирное сочленение (Hinge Joint)#
Шарнирные сочленения позволяют соединенным телам вращаться вдоль оси шарнира в точке привязки. К этому шарниру прикреплен угловой привод.
Шарнирное сочленение
|
Параметры шарнирного сочленения
|
Основные параметры ограничения этого сочленения включают:
Joint axis | Координаты оси сочленения, вокруг которой вращаются тела. |
Angular damping | Угловой коэффициент демпфирования шарнирного сочленения. |
Angular limit from | Минимальный угол в диапазоне движения, при котором шарнир останавливается. Угол указывается в градусах в диапазоне [-180; 180]. |
Angular limit to | Максимальный угол в диапазоне движения, при котором шарнир останавливается. Угол указывается в градусах в диапазоне [-180; 180]. |
Angular spring | Коэффициент жесткости пружины, определяет, насколько сильно сочленение сопротивляется вращению. Если жесткость установлена на 0, пружина отключена. |
Angular angle | Целевой угол прикрепленной угловой пружины. Пружина (если она включена) пытается сохранить заданный угол между соединенными телами. |
Параметры привода | |
---|---|
Angular Torque | Максимальный крутящий момент углового привода. 0 отключает привод. |
Angular Velocity | Целевая скорость присоединенного углового привода. |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Для получения дополнительной информации см. описание класса JointHinge. Пример, иллюстрирующий соединение двух тел с помощью шарнирного сочленения, можно найти здесь.
Посмотрите иллюстрацию настроек шарнирного сочленения в нашем видеоуроке по физике.
Шаровое соединение (Ball Joint)#
Шаровые сочленения представляют собой точку, вокруг которой могут вращаться соединенные объекты.
Шаровое сочленение
|
Параметры шарового сочленения
|
Основные параметры ограничения этого сочленения включают:
Joint axis | Координаты оси сочленения. |
Angular limit angle | Предел угла поворота, который определяет, насколько соединенные тела могут изгибаться от оси соединения. |
Angular limit from | Минимальный угол в диапазоне скручивания вокруг оси сочленения. Угол указывается в градусах в диапазоне [-180; 180]. |
Angular limit to | Максимальный угол в диапазоне скручивания вокруг оси сочленения. Угол указывается в градусах в диапазоне [-180; 180]. |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Дополнительные сведения см. в описании класса JointBall. Пример, иллюстрирующий соединение двух тел с помощью шарового сочленения, можно найти здесь.
Посмотрите иллюстрацию настроек шарового сочленения в нашем видеоуроке по физике.
Призматическое сочленение (Prismatic Joint)#
Призматические сочленения допускают движение вдоль оси шарнира. К этому сочленению прикреплен линейный привод.
Призматическое сочленение
|
Параметры призматического сочленения
|
Основные параметры ограничения этого сочленения включают:
Joint axis | Координаты оси сочленения. |
Linear damping | Линейный коэффициент демпфирования призматического сочленения. |
Linear limit from | Минимальное расстояние между телами по оси сочленения. |
Linear limit to | Максимальное расстояние между телами по оси сочленения. |
Linear spring | Коэффициент жесткости пружины, определяет, насколько прочно сочленение сопротивляется линейному движению. Если жесткость установлена на 0, пружина отключена. |
Linear distance | Целевое линейное расстояние прикрепленной пружины. Пружина (если она включена) пытается сохранить заданное расстояние между соединенными телами. |
Параметры привода | |
---|---|
Linear Force | Максимальное усилие присоединенного линейного привода. 0 отключает привод. |
Linear Velocity | Целевая скорость присоединенного линейного привода. |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Для получения дополнительной информации см. описание класса JointPrismatic. Пример, иллюстрирующий соединение двух тел с помощью призматического сочленения, можно найти здесь.
Посмотрите иллюстрацию призматического сочленения в нашем видеоуроке по физике.
Цилиндрическое сочленение (Cylindrical Joint)#
Цилиндрические сочленения похожи на призматические с дополнительной степенью свободы: вращением вокруг оси сочленения. К этому сочленению прикреплены линейный и угловой приводы.
Цилиндрическое сочленение
|
Параметры цилиндрического сочленения
|
Основные параметры ограничения этого сочленения включают:
Joint axis | Координаты оси сочленения. |
Linear damping | Линейный коэффициент демпфирования цилиндрического сочленения. |
Linear limit from | Минимальное расстояние между телами по оси сочленения. |
Linear limit to | Максимальное расстояние между телами по оси сочленения. |
Linear spring | Коэффициент жесткости пружины, определяет, насколько прочно сочленение сопротивляется линейному движению. Если жесткость установлена на 0, пружина отключена. |
Linear distance | Целевое линейное расстояние прикрепленной пружины. Пружина (если она включена) пытается сохранить заданное расстояние между соединенными телами. |
Angular damping | Угловой коэффициент демпфирования цилиндрического сочленения. |
Angular limit from | Минимальный угол в диапазоне вращения вокруг оси сочленения. Угол указывается в градусах в диапазоне [-180; 180]. |
Angular limit to | Максимальный угол в диапазоне вращения вокруг оси сочленения. Угол указывается в градусах в диапазоне [-180; 180]. |
Angular spring | Коэффициент жесткости пружины, определяет, насколько сильно сочленение сопротивляется вращению. Если жесткость установлена на 0, пружина отключена. |
Angular angle | Целевой угол прикрепленной угловой пружины. Пружина (если она включена) пытается сохранить заданный угол между соединенными телами. |
Параметры привода | |
---|---|
Angular Torque | Максимальный крутящий момент углового привода. 0 отключает привод. |
Angular Velocity | Целевая скорость присоединенного углового привод. |
Linear Force | Максимальное усилие присоединенного линейного привода. 0 отключает привод. |
Linear Velocity | Целевая скорость присоединенного линейного привода. |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Для получения дополнительной информации см. описание класса JointCylindrical. Пример, иллюстрирующий соединение двух тел с помощью цилиндрического сочленения, можно найти здесь.
Посмотрите иллюстрацию цилиндрического сочленения в нашем видеоуроке по физике.
Сочленение Wheel (Wheel Joint)#
Сочленения Wheel используются для моделирования колес транспортных средств. Оно соединяет два твердых тела: первое тело представляет собой кузов, второе — колесо. Присваивать форму (shape) колесу не нужно: для обнаружения столкновения колеса с поверхностью используется метод ray-casting. К этому сочленению прикреплен угловой привод.
Порядок соединения тел при помощи данного сочленения имеет значение!
-
Если тела соединяются с помощью UnigineEditor:
- Выберите раму автомобиля.
- Добавьте колесный шарнир.
- Укажите колесо, которое нужно прикрепить.
-
Если тела соединяются программно:
- b0 — это рама.
- b1 — это колесо.
Сочленение Wheel |
Параметры сочленения Wheel |
Основные параметры ограничения этого сочленения включают:
Ось подвески (Axis 0) | Координаты вертикальной оси, которая действует как цилиндрическое сочленение, обеспечивающее управление и демпфирование. |
Ось шпинделя колеса (Axis 1) |
Координаты горизонтальной оси, вокруг которой вращается колесо. Они задаются в следующих полях:
|
Linear damping | Линейный коэффициент демпфирования подвески. |
Linear limit from | Нижний предел хода подвески. |
Linear limit to | Верхний предел хода подвески. |
Linear spring | Коэффициент жесткости пружины подвески, определяет, насколько прочно соединение выдерживает вертикальное линейное движение. Если жесткость установлена на 0, пружина отключена. |
Linear distance | Целевая высота подвески. Пружина подвески (если она включена) пытается сохранить заданную высоту. |
Angular damping | Угловой коэффициент демпфирования вращения колеса. |
Параметры привода | |
---|---|
Angular Torque | Максимальный крутящий момент углового привода. 0 отключает привод. |
Angular Velocity | Целевая скорость присоединенного углового привода. |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Для получения дополнительной информации см. описание класса JointWheel. Пример использования сочленения Wheel см. в статье Создание автомобиля с сочленениями Wheel.
Посмотрите, как смоделировать колесо, используя сочленение Wheel, в нашем видеоуроке по физике.
Сочленение подвески (Suspension Joint)#
Подвеска используется для создания подвески колес автомобилей. Она соединяет два твердых тела: первое тело представляет собой раму, второе — колесо. К этому шарниру прикреплен угловой привод.
-
Если тела соединяются с помощью UnigineEditor:
- Выберите раму автомобиля.
- Добавьте сочленение Suspension.
- Укажите колесо, которое нужно прикрепить.
-
Если тела соединяются программно:
- b0 is a frame.
- b1 is a wheel.
Suspension Joint
|
Параметры Suspension Joint
|
Основные параметры ограничения этого сочленения включают:
Ось подвески (Axis 0) | Координаты вертикальной оси, которая действует как цилиндрическое сочленение, обеспечивающиее управление и демпфирование. |
Ось шпинделя колеса (Axis 1) |
Координаты горизонтальной оси, вокруг которой вращается колесо. Они задаются в следующих полях:
|
Linear damping | Линейный коэффициент демпфирования подвески. |
Linear limit from | Нижний предел хода подвески. |
Linear limit to | Верхний предел хода подвески. |
Linear spring | Коэффициент жесткости пружины подвески, определяет, насколько прочно сочленение выдерживает вертикальное линейное движение. Если жесткость установлена на 0, пружина отключена. |
Linear distance | Целевая высота подвески. Пружина подвески (если она включена) пытается сохранить заданную высоту. |
Angular damping | Угловой коэффициент демпфирования вращения колеса. |
Параметры привода | |
---|---|
Angular Torque | Максимальный крутящий момент углового привода. 0 отключает привод. |
Angular Velocity | Целевая скорость присоединенного углового привода. |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Для получения дополнительной информации см. описание класса JointSuspension. Пример, иллюстрирующий соединение двух кузовов с помощью шарнира подвески, можно найти здесь.
Чтобы узнать о различиях между сочленениями Wheel и Suspension, см. наш видеоурок по физике.
Сочленение Path (Path Joint)#
Сочленение Path используется для прикрепления твердого тела к телу Path и для его перемещения по этому пути. Это сочленение можно использовать для движения поезда по рельсам. К этому сочленению прикреплен линейный привод.
Назначьте фигуру твердому телу перед тем, как соединить его с телом контура!
Порядок соединения тел при помощи данного сочленения имеет значение!
- Если тела соединяются с помощью UnigineEditor:
- Выберите твердое тело (Rigid).
- Добавить сочленение Path.
- Укажите тело Path.
- Если тела соединяются программно:
- b0 — это BodyRigid.
- b1 — это BodyPath.
Сочленение Path
|
Параметры сочленения Path
|
Основные параметры ограничения этого сочленения включают:
Rotation | Задает ориентацию тела относительно пути. |
Linear damping | Линейный коэффициент демпфирования сочленения Path. |
Параметры привода | |
---|---|
Linear Force | Максимальное усилие присоединенного линейного привода. 0 отключает привод. |
Linear Velocity | Целевая скорость присоединенного линейного привода. |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Для получения дополнительной информации см. описание класса JointPath. Пример, иллюстрирующий соединение двух тел с помощью сочленения Path, можно найти здесь.
В нашем видеоуроке по физике показано, как прикрепить тело Rigid к телу Path с помощью сочленения Path.
Сочленение Particles (Particles Joint)#
Сочленение Particles используется для прикрепления ткани или веревки к твердому телу, телу Ragdoll или телу Dummy.
Порядок соединения тел при помощи данного сочленения имеет значение!
-
Если тела соединяются с помощью UnigineEditor:
- Выберите тело: твердое, ragdoll или dummy.
- Добавьте соединение частиц.
- Укажите тело Cloth или Rope.
-
Если тела соединяются программно:
- b0 — это BodyRigid / BodyRagdoll / BodyDummy.
- b1 — это BodyCloth / BodyRope.
Сочленение Particles
|
Параметры сочленения Particles
|
Основные параметры ограничения этого сочленения включают:
Threshold | Определяет расстояние для прикрепления вершин ткани или веревки к другому телу. |
Size | Определяет область для закрепления вершин ткани или веревки на другом теле. |
Это сочленение также имеет набор общих параметров, которые есть у всех типов сочленений.
Для получения дополнительной информации см. описание класса JointParticles. Пример, иллюстрирующий прикрепление тела Cloth с помощью соединения частиц, можно найти здесь.
Пример, иллюстрирующий использование тела Rope и сочленения Particles, можно найти здесь.
В нашем видеоуроке по физике показано, как прикрепить веревку или ткань к другим телам с помощью сочленения Particles.
Общие параметры сочленений#
Общие параметры сочленений
|
Все сочленения, независимо от их типа, имеют некоторые общие параметры:
Enabled | Флаг, указывающий, включено ли сочленение. |
Collision | Флаг, указывающий, включено ли обнаружение столкновений между соединенными телами. |
Anchor | Положение точки привязки, вокруг которой ограничено движение сочленения. По умолчанию якорь размещается между центрами масс соединенных тел. |
Linear restitution |
Линейная жесткость сочленения. Определяет, насколько быстро он компенсирует линейное изменение координат между двумя телами. Когда тела оттаскиваются друг от друга, восстановление управляет величиной силы, которая применяется к обоим телам, чтобы их опорные точки снова выровнялись.
Максимальное значение 1 может привести к дестабилизации физики (поскольку прилагаются слишком большие силы). |
Angular restitution |
Угловая жесткость сочленения. Определяет, насколько быстро он компенсирует изменение угла между двумя телами. Когда тела поворачиваются относительно друг друга, восстановление управляет величиной силы, которая применяется к обоим телам, так что их опорные точки снова выравниваются.
Максимальное значение 1 может привести к дестабилизации физики (поскольку прилагаются слишком большие силы). |
Linear softness |
Линейная эластичность сочленения. Определяет, усредняются ли линейные скорости тел при растяжении сочленения.
|
Angular softness |
Угловая эластичность сочленения. Определяет, усредняются ли линейные скорости тел при скручивании сочленения.
|
Max force | Максимальное усилие, которое можно приложить к сочленению. Если этот предел превышен, сочленение разрывается. Значение по умолчанию — inf, т. е. сочленение неразрывно. |
Max torque | Максимальный крутящий момент, который можно приложить к сочленению. Если этот предел превышен, сочленение разрывается. Значение по умолчанию — inf, т. е. сочленение неразрывно. |
Number of iterations | Сочленения, как и столкновения, рассчитываются итеративно. Этот параметр указывает количество итераций, используемых для решения сочленений. Обратите внимание: если это значение будет слишком низким, пострадает точность вычислений. |
Приводы и пружины#
Сочленения могут иметь приводы и связанные с ними пружины.
Пружины пытаются удерживать тела, соединенные сочленением, на определенном расстоянии (линейном) или под углом (угловой). Поведение конкретной пружины зависит от ее жесткости и коэффициента демпфирования.
Приводы обеспечивают движение или вращение тел, связанных с шарниром, относительно друг друга за счет приложения крутящего момента (или силы) к степени свободы сочленения. Существуют линейные и угловые приводы, которые оказывают ограниченное усилие на сочленение, толкая или вращая связанные объекты.
У приводов есть два параметра:
- Целевая скорость
- Максимальное усилие (или крутящий момент), которое доступно для достижения этой скорости.
Это очень простая модель реальных приводов. Тем не менее, это очень полезно при моделировании привода, который перед подсоединением к сочленению приводится в действие редуктором. Такие устройства часто управляются путем установки целевой скорости и могут генерировать только максимальное количество энергии для достижения этой скорости (что соответствует определенному количеству силы, доступной в сочленении).
Чтобы активировать угловой привод, выполните следующие действия:
-
Установите angular velocity — целевую угловую скорость привода. Это значение определяет, насколько быстро привод может вращаться.
- положительное значение — привод вращается против часовой стрелки.
- отрицательное значение — привод вращается по часовой стрелке.
-
Установите angular torque — максимальный крутящий момент, прилагаемый приводом для достижения целевой скорости. Это значение определяет, насколько быстро привод достигает максимальной скорости.
- 0 отключает привод.
- Если указано отрицательное значение, вместо него будет использоваться 0.
Чтобы активировать линейный привод, выполните следующие действия:
-
Установите linear velocity — целевая линейная скорость привода. Это значение определяет, насколько быстро привод может толкать.
- положительное значение — привод толкает вперед.
- отрицательное значение — привод движется назад.
-
Установите linear force — максимальное усилие, прилагаемое приводом для достижения заданной скорости. Это значение определяет, насколько быстро привод достигает максимальной скорости.
- 0 отключает привод.
- Если указано отрицательное значение, вместо него будет использоваться 0.
Транспортные средства#
Транспортные средства важны в играх в реальном времени, поэтому их следует описывать отдельно. Есть два подхода к моделированию движущихся транспортных средств. У каждого подхода есть соответствующий тип соединения для соединения колес с кузовом автомобиля.
- Первый подход использует сочленение Suspension и предполагает, что колеса представлены как физические тела с формами (shapes). Поскольку у каждого колеса есть коллизионная форма, столкновения с объектами на земле обрабатываются правильно. Например, такая машина плавно едет по бордюру. Этот подход требует дополнительных расчетов и должен использоваться, когда требуется более точное моделирование, особенно для ступенчатой поверхности земли и колес сложной формы.
- Второй подход использует сочленение Wheel и предполагает, что колеса виртуальные. Колеса не сталкиваются с поверхностью дороги. Вместо этого лучи падают от кузова автомобиля, чтобы обнаружить неровности поверхности. В этом случае резкие изменения рельефа обрабатываются неточно. Этот подход быстрее первого и обеспечивает приемлемые результаты для ровной местности, например для моделирования гоночных автомобилей. Однако на пересеченной местности он может работать некорректно.
Оба сочленения имеют связанный с ними привод, который вращает колеса и толкает автомобиль вперед.