This page has been translated automatically.
Основы UNIGINE
1. Введение
2. Виртуальные миры и работа с ними
3. Подготовка 3D моделей
4. Материалы
5. Камеры и освещение
6. Реализация логики приложения
7. Создание кат-сцен и запись видео
8. Подготовка проекта к релизу
10. Основы оптимизации
11. ПРОЕКТ2: Шутер от первого лица
12. ПРОЕКТ3: Аркадная гонка по пересеченной местности от 3-го лица
13. ПРОЕКТ4: VR приложение с простым взаимодействием
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Встроенный модуль физики

UNIGINE features a built-in physics module that allows you to simulate various types of physical interactions and phenomena.В UNIGINE есть встроенный модуль физики, с помощью которого можно моделировать различные физические взаимодействия и явления.

Of course, it is just a simplified physics approximation with the impulse-based approach, so it isn’t suitable for high-precision scientific simulations. However, you still can handle a wide range of tasks, including:Конечно это упрощенная аппроксимация физики на основе импульсов, которую нельзя использовать для точных научных визуализаций. Но, несмотря на это, встроенный модуль физики позволяет решать такие задачи, как:

  • Collision detection (restricting interpenetration of solid bodies, preventing physical bodies from passing through walls, etc.)Обнаружение столкновений (предотвращение прохождения сквозь стены, взаимопроникновения твердых тел и т.д.)
  • Simulation of perfectly elastic collisions (making colliding bodies bounce off each other like rubber balls)Моделирование идеально упругих столкновений (перераспределение кинетической энергии)
  • Simulation of various joints, motors, and springsМоделирование различных сочленений, двигателей и пружин
  • Simulation of main physical phenomena: gravity, friction (static and sliding), buoyancy (for relatively calm water without big waves)Моделирование основных физических явлений: гравитации, трения (скольжения и покоя), упругости, плавучести (для относительно спокойной воды без больших волн)
  • Simulation of external forces (wind, force field)Моделирование внешних физических сил (ветер, силовые поля)
  • Procedural destruction of meshesПроцедурное разрушение мешей
  • Simulation of deformable cloth and ropesМоделирование деформируемой и рвущейся ткани и веревок
  • Ragdoll simulationСимуляция тел типа Ragdoll

Remember that some cases cannot be solved using built-in physics. Here are some examples:Однако, есть и такие задачи, которые не получится решить с помощью встроенной физики:

  • High-precision physics simulationВысокоточное физическое моделирование
  • Flight dynamics simulationМоделирование динамики полета
  • Fluid dynamics simulationМоделирование динамики жидкости
  • Simulation of gravitational fieldsМоделирование гравитационных полей
  • Simulation of inelastic collisionsМоделирование неупругих столкновений
  • Digging into the groundКопание земли
  • Physical destruction of complex objectsФизическое разрушение сложных объектов

Though some tasks involving a large number of objects can be solved using built-in physics, it may significantly reduce performance. In this case, you can consider alternative ways, such as bone-based animation, a code-based approach for changing transformations of objects and their behavior, and external physics engines.Несмотря на то, что некоторые задачи, связанные с взаимодействием большого количества объектов, можно решить с помощью встроенного модуля физики, это может сильно снизить производительность. В таких случаях рекомендуется использовать альтернативные решения – скелетную анимацию, программное изменение трансформаций объектов и их поведения, а также сторонние физические модули.

Basic Entities
Основные сущности#

Only Objects can have physical properties and interact with other objects and the environment.Обладать физическими свойствами и взаимодействовать с другими объектами и средой могут только объекты (Objects).

For these properties to be assigned, an object must have a physical Body — a physical approximation of the object, which determines the object’s behavior. Furthermore, the body must have at least one Collision Shape, which represents the volume of space occupied by the physical body. To connect bodies and restrict their movements relative to each other, Joints are used.Чтобы объект стал физическим и мог взаимодействовать со своим окружением, у него должно быть физическое тело (Body). Физическое тело определяет поведение объекта. Кроме того, тело должно иметь как минимум одну коллизионную форму (Collision Shape), которая задает объем пространства, занимаемого физическим телом. Для соединения тел и ограничения их движения относительно друг друга используются сочленения (Joints).

The picture below illustrates the interrelationships among these entities.На рисунке ниже показаны отношения между этими объектами.

To assign and configure a body, shape, and joints, navigate to the Physics tab of the Parameters window.Чтобы назначить и настроить тело, форму и сочленения, нужно перейти на вкладку Physics в окне Parameters.

Примечание
It's important not to scale objects participating in physical interactions. Before assigning a physical body, ensure that the object's scale has not changed since its creation. Otherwise, all changes will be reset once the physics simulation is started.Объекты, участвующие в физических взаимодействиях, нельзя масштабировать. Поэтому перед назначением физического тела необходимо убедиться, что масштаб объекта не менялся после его создания. В противном случае, изменения будут сброшены при запуске симуляции физики.

Body
Тело (Body)#

As previously discussed, the physical body defines the object's behavior and represents a set of its physical parameters, including mass, density, velocity, and so on. In UNIGINE, there are different types of bodies, and each is used for modeling a specific type of object.Как мы уже говорили, физическое тело определяет поведение объекта и представляет собой набор его динамических параметров, таких как масса, плотность, скорость и другие. В UNIGINE существует несколько типов тел, каждый из которых используется для моделирования определенного типа объектов.

Rigid Body
Тело Rigid#

The most commonly used type of body that enables simulation of physical bodies according to rigid body dynamics. Rigid bodies cannot be deformed — their geometry does not change no matter what happens.Самый распространенный тип тела, который используется для твердых недеформируемых объектов, чья геометрия не может меняться под внешним воздействием.

Примечание
A Rigid body must have a Collision shape assigned.Тело Rigid обязательно должно иметь коллизионную форму (Collision shape).

Ragdoll Body
Тело Ragdoll#

This type of body enables inverse kinematics and procedural animation for bone-animated characters. Essentially, this is a set of Rigid bodies, representing the character's bones connected by joints. These joints restrict the movement of the bones relative to each other, providing a realistic look.Включает инверсную кинематику для персонажей и объектов со скелетной анимацией. По сути, это совокупность тел Rigid, представляющих собой кости персонажа, соединенных вместе при помощи сочленений. Эти сочленения ограничивают движение костей относительно друг друга, что делает персонажа более реалистичным.

Примечание
A Ragdoll body can be assigned to Skinned Meshes only.Тело Ragdoll можно назначить только объектам Skinned Meshes.

To assign the Ragdoll body to the object, you should create a physical Ragdoll. You can automatically generate it based on the specified parameters or create it manually by preparing a Rigid body for each bone and then saving the bones hierarchy to a *.node file.Чтобы назначить объекту тело, необходимо создать физическую модель Ragdoll. Это можно сделать либо автоматически по заданным параметрам, либо вручную, создав для каждой кости тело Rigid и сохранив полученную иерархию костей в файл *.node.

For proper automatic Ragdoll generation, the mesh should be in the Reference Pose (T-pose for human-like characters).При автоматической генерации физической модели Ragdoll мы рекомендуем располагать Skinned Mesh в эталонной позе (для антропоморфных персонажей это Т-поза).

Fracture Body
Тело Fracture#

It enables real-time persuasive destruction of objects. A Fracture body is procedurally fractured into pieces when it collides with another body. Moreover, you can keep breaking these pieces until achieving the desired level of destruction.Создает эффект разрушения объектов в реальном времени. Тело Fracture процедурно разрушается при столкновении с другим физическим телом. Его обломки сохраняют все свойства целого тела, поэтому их также можно разрушить на более мелкие.

Примечание
A Fracture body can be assigned to Dynamic Meshes only.Тело Fracture можно назначить только выпуклым объектам Dynamic Meshes.

The Fracture body (along with all the pieces it fractures into) is, in fact, a Rigid body that moves according to rigid body dynamics. When the body fractures, its mass is distributed among the pieces.По сути, тело Fracture является телом Rigid, которое функционирует в соответствие с динамикой твердого тела. После разрушения, масса тела распределяется между обломками.

There are three patterns of fracturing: slicing, cracking, and shattering. You should choose the appropriate one depending on the mechanical properties of the material used to create the object.Существует три сценария разрушения: разрезание, растрескивание и разбивание. Сценарий следует выбирать в соответствии со свойствами материала, из которого сделан разрушаемый объект.

The fracture patterns are specified in the code.Сценарий разрушения задается программно.

Rope Body
Тело Rope#

It allows for the physical simulation of ropes, cables, and wires that can be torn. You can pin the ropes to the Rigid, Ragdoll, and Dummy bodies.Используется для симуляции веревок, проводов и канатов, которые можно разрывать. Тело Rope можно прикреплять к телам Rigid, Ragdoll и Dummy.

Примечание
A Rope body can be assigned to Dynamic Meshes only. We recommend using a cylinder mesh for the Rope body (for example, it can be a standard primitive cylinder).Тело Rope можно назначить только объектам Dynamic Meshes. Рекомендуется использовать меш в форме цилиндра.

To attach a rope to another body, use the Particles joint.Для крепления тела Rope к другому телу используется сочленение Particles.

Cloth Body
Тело Cloth#

It enables physical simulation of different types of textiles that can be torn. You can pin a Cloth body to the Rigid, Ragdoll, and Dummy bodies.Позволяет симулировать различные виды тканей, которые можно разрывать. Тело Cloth можно прикреплять к телам Rigid, Ragdoll и Dummy.

Примечание
A Cloth body can be assigned to Dynamic Meshes only.Тело Cloth можно назначить только объектам Dynamic Meshes.

Polygon triangulation of the mesh, for which the Cloth body is generated, should be as illustrated! Otherwise, it may not stretch properly and evenly in all directions.Важную роль играет правильная триангуляция полигонов меша, которому назначается тело Cloth. В противном случае, ткань может не растягиваться правильно и равномерно.

An example of proper triangulation

An example of proper triangulationПример правильной триангуляции

To pin a cloth to a body so it would hang like a cape or a curtain, use the Particles joint.Для крепления тела Cloth к другому телу используется сочленение Particles.

Water Body
Тело Water#

It enables the physical simulation of liquids of different densities and viscosities. It also allows creation of the buoyancy effect and wave dynamics.Используется для физической симуляции жидкостей различной плотности и вязкости, а также для создания эффекта плавучести и динамики волн.

Примечание
A Water body can be assigned only to Water Meshes and Dynamic Meshes.Тело Water можно назначить объектам Water Meshes и Dynamic Meshes.

A mesh to which the Water body is assigned should meet several requirements:Меш, которому назначается тело Water, должен соответствовать некоторым требованиям:

  • The mesh should be flat and have a uniform grid.Быть плоским и иметь равномерную сетку.
  • The mesh should be oriented strictly along the axes.Быть ориентирован строго по осям.
  • The mesh should have the UV map.Иметь UV-развертку.

Dummy Body
Тело Dummy#

It is a static body that does not move and has no physical properties. It can be used as a prop when connecting other bodies using joints.Это статическое вспомогательное тело, у которого нет физических свойств. Оно может использоваться как точка крепления при соединении других тел с помощью сочленений.

For example, by using a Dummy body assigned to a Dummy object, you can fix a physical cloth (a Cloth body) so it can hang without any visible attachments. If the Dummy body does not have any Collision shape assigned, it will not fall or interact with other physical bodies.Например, с помощью тела Dummy, назначенного объекту Dummy, можно зафиксировать ткань (тело Cloth) в нужном положении без использования видимых креплений. При этом, если телу Dummy не назначить коллизионную форму (Collision shape), то оно не будет падать и взаимодействовать с другими физическими объектами.

An invisible Dummy body (with an assigned shape) which is used to attach a cloth bodyТело Dummy без коллизионной формы, к которому прикреплено тело Cloth (красная труба)

Path Body
Тело Path#

It is also a type of body without physical properties: it represents a spline along which an arbitrary rigid body can move. It can be used, for example, to create a physically simulated train moving along a rail track.Также является статическим вспомогательным телом без физических свойств: это кривая, вдоль которой может двигаться тело Rigid. Этот тип тела можно использовать, например, для создания поезда, движущегося по рельсам.

A Path body which is used as a railway track for a trainТело Path используется в качестве железнодорожного пути, по которому движется поезд

To connect a Rigid body to a Path body, use a Path joint.Для соединения тел Rigid и Path используется сочленение Траектория (Path joint).

Collision Shape
Коллизионная форма (Collision Shape)#

A collision shape represents the volume of space a physical body occupies and is used to detect collisions. The collision shape is invisible and doesn’t have to be the same as the object’s mesh. In fact, a rough approximation — like a sphere, capsule, cylinder, or box — is often more efficient since it consumes fewer resources.Коллизионная форма определяет объем пространства, которое занимает физическое тело и используется для определения столкновений (коллизий) между объектами. Она невидима и может не совпадать с мешем объекта. Как правило даже предпочтительно, чтобы не совпадала, поскольку грубая аппроксимация объекта (например, сфера, капсула, цилиндр, куб) расходует значительно меньше ресурсов при расчетах.

The physical body can have one or more collision shapes.Физическое тело может иметь от одной до нескольких коллизионных форм.

Objects with shapes fall under gravity, bounce off static surfaces, or slide along them. How they slide and bounce depends on restitution and friction coefficients.Объекты с коллизионной формой падают под действием силы тяжести, отскакивают от неподвижных поверхностей или скользят по ним. Скольжение и подпрыгивание определяются коэффициентами восстановления и трения.

When a body does not have a single shape assigned, it behaves as a Dummy body. It can be connected to other bodies using joints but does not collide with them and is immune to gravity.Тело, не имеющее ни одной формы, ведет себя как фиктивное (Dummy body): его можно соединять с другими телами с помощью сочленений, однако оно не сталкивается с другими телами и на него не влияет гравитация.

A car approximation using one and several shapes

A car approximation using one and several shapesАппроксимация автомобиля с использованием одной и нескольких фигур

There are two basic types of collision shapes:Существуют следующие формы:

  • Simple primitives — a sphere, capsule, cylinder, box. They are very fast and memory efficient. It is a good idea to use them whenever you can. In addition, spheres and capsules use continuous collision detection, but we will consider it later.Простые примитивысфера, капсула, цилиндр, куб. Они очень быстрые и потребляют мало памяти. По возможности следует использовать именно их. Для сферы и капсулы доступна функция непрерывного обнаружения столкновений (об этом поговорим чуть позже).
  • Complex collision shapes — composed of polygons or several simple shapes. They are slower and need more memory. They also include a convex hull and a set of auto-generated convex hulls.Сложные коллизионные формы, состоящие из полигонов или нескольких простых коллизионных форм. Такие формы медленные и требуют больше памяти. К ним относятся выпуклая оболочка, а также набор автоматически сгенерированных выпуклых оболочек. Также есть формы, состоящие из нескольких простых форм.

The simple primitives, like spheres and boxes, make collision calculations easier while keeping performance high and accuracy acceptable. On the other hand, convex hulls are more precise but don't use continuous collision detection. So, they are not suitable for fast-moving objects.Простые примитивы упрощают вычисление столкновений, при этом сохраняя высокую производительность и приемлемую точность. Сложные коллизионные формы обеспечивают более высокую точность, однако, следует помнить, что непрерывное обнаружение столкновений для них недоступно. Поэтому их не следует использовать для быстро движущихся объектов.

Примечание

A shape doesn't have to duplicate the mesh it approximates. Try to use simple primitives whenever possible — they are fast and usually give correct results.Форма не должна дублировать меш, который она аппроксимирует. Старайтесь использовать простые примитивы – они быстрые и как правило дают корректный результат.

And keep the number of shapes as low as possible: fewer calculations - higher performance!Минимизируйте количество форм: меньше расчетов – выше производительность!

The collision shape can't exist without a physical body. It also doesn't have a position in world coordinates. It must be assigned to a body and positioned relative to it. There are several shape types:Коллизионная форма не может существовать без физического тела и не имеет собственной позиции в мировых координатах. Она всегда назначается телу и позиционируется относительно него. Существует несколько типов форм:

Sphere
Сфера (Sphere shape)#

A sphere is the simplest and the fastest shape, as it has only one parameter — a radius. For this shape type, continuous collision detection is available. So, you can be sure it will not go through other objects, even if it moves at high speed (we will learn about that later).Является самой простой и быстрой формой, единственный ее параметр – радиус. Для сферических форм доступно постоянное обнаружение столкновений (при использовании такой формы исключено прохождение объекта через другие объекты даже при движении с высокой скоростью, об этом чуть позже).

Using the spherical shape for any arbitrary mesh ensures collision detection.Кроме того, использование сферической формы для любого произвольного меша гарантирует, что ее столкновения всегда будут обнаруживаться.

Dynamic Meshes approximated using spherical shapes

Dynamic Meshes approximated using spherical shapesДинамические меши, аппроксимированные сферическими формами

To make the shape fit your object, you can adjust the sphere Radius:Настройте радиус (Radius) сферы, чтобы максимально приблизить ее размер к аппроксимируемому объекту:

Capsule
Капсула (Capsule shape)#

A capsule is another fast collision shape with continuous collision detection available. You can use capsule shapes to approximate elongated objects like pillars or even human-like characters. These shapes help the characters go up and down the stairs smoothly, without stumbling at each step, as long as the steps are not too high. Capsule shapes also ensure that the character's arms or legs do not get stuck unexpectedly.Также довольно быстрая форма с возможностью непрерывного обнаружения столкновений. Капсулы удобно использовать для аппроксимации удлиненных предметов (например, колонн), а также человеческих или антропоморфных персонажей, поскольку позволяют им плавно подниматься и спускаться по лестнице, исключая застревание конечностей персонажа.

Dynamic Meshes approximated using capsule shapes

Dynamic Meshes approximated using capsule shapesДинамические меши, аппроксимированные капсульными формами

To make the shape fit your object, you can adjust the capsule Radius and Height:Настройте радиус (Radius) и высоту (Height) капсулы, чтобы максимально приблизить ее размер к аппроксимируемому объекту:

Cylinder
Цилиндр (Cylinder shape)#

A cylinder can be used to approximate elongated shapes with flat ends (for example, shafts, or pylons).Эту форму можно использовать для аппроксимации удлиненных форм с плоскими концами (например, валов, пилонов и т. д.).

Dynamic Meshes approximated using capsule shapes

Dynamic Meshes approximated using cylindrical shapesДинамические меши, аппроксимированные цилиндрическими формами

To make the shape fit your object, you can adjust the cylinder Radius and Height:Настройте радиус (Radius) и высоту (Height) цилиндра, чтобы максимально приблизить его размер к аппроксимируемому объекту:

Box
Куб (Box shape)#

A box is a cuboid shape that can approximate the volume of various objects: walls, doors, stairs, parts of mechanisms, car bodies, and many other things. You can choose the size of a box shape in each dimension arbitrarily.Куб можно использовать для аппроксимации объема различных объектов: стен, дверей, лестниц, деталей механизмов, кузовов автомобилей и многого другого. Длину в каждом измерении для формы можно выбрать произвольно.

Dynamic Meshes approximated using box shapes

Dynamic Meshes approximated using box shapesДинамические меши, аппроксимированные кубами

To make the shape fit your object, you can adjust the box size (Size X, Size Y, Size Z):Настройте размеры куба (Size X, Size Y, Size Z), чтобы максимально приблизить его размер к аппроксимируемому объекту:

Convex Hull
Выпуклая оболочка (Convex hull shape)#

A convex hull is the slowest of all shapes. Usually, it is used for objects with complex geometry. This shape is the smallest one that can enclose vertices of the approximated mesh. At that, it includes holes and cavities of the mesh in the shape volume.Самая медленная из всех форм. Обычно она используется для объектов со сложной геометрией. Это наименьшая форма, которая может покрыть все вершины меша, при этом все его отверстия и полости включаются в объем формы.

To generate a convex hull, specify the Approximation Error value that allows reducing the number of vertices of the created shape. Note that simple and rough convex hulls with a small number of vertices are processed faster, so we recommend keeping the number of vertices as low as possible.При создании выпуклой оболочки указывается значение Ошибки аппроксимации. Это позволяет уменьшить количество вершин создаваемой формы. Упрощенные выпуклые оболочки с небольшим количеством вершин обрабатываются быстрее.

The higher the error value, the fewer vertices in the generated shape, but the more mesh details are skipped.Чем выше значение ошибки, тем меньше вершин в созданной форме, но тем больше деталей меша игнорируется.

Zero Approximation Error
Approximation error = 0Approximation error = 0
  Higher value of Approximation Error
Approximation error = 0.1Approximation error = 0.1

Autogenerated
Автоматически сгенерированные формы (Autogenerated)#

An autogenerated shape is a set of convex hulls that can approximate a complex concave object and exclude cavities from its volume.Автоматически сгенерированная форма – это набор выпуклых оболочек, который используется для аппроксимации сложных вогнутых объектов. Из объема такой составной формы исключены все полости и впадины объекта.

In the picture below, you can see a complex concave object. On the left, it's approximated with a single convex hull. And on the right — with an autogenerated set of convex hulls.На рисунке ниже представлен один и тот же сложный объект, аппроксимированный одной выпуклой оболочкой (слева) и набором автоматически сгенерированных выпуклых оболочек (справа):

When generating this type of shape, you should specify the following beside the Approximation Error value:Кроме Ошибки аппроксимации, при генерации такой оболочки необходимо задать:

  • Recursion Depth that sets the degree of mesh decomposition.Глубину рекурсии (Recursion Depth), которая определяет степень декомпозиции меша: чем больше значение, тем больше выпуклых оболочек будет создано.
  • Merging Threshold that determines the volume threshold for merging convex shapes after decomposition.Порог слияния (Merging Threshold), который определяет объем слияния выпуклых форм после декомпозиции.

The values you specify affect how many shapes are generated and how well they fit the object.Указанные значения влияют на количество сгенерированных форм и точность аппроксимации объекта.

Joint
Сочленение (Joint)#

In the real world, we often see connected objects, such as a door fixed in a doorway, a helicopter propeller mounted on its fuselage, elements of a robotic arm, or even the bones forming a skeleton. Joints help us make these connections. They allow us to create complex objects consisting of several interconnected parts, each with a certain degree of freedom of movement relative to each other.В жизни мы часто встречаем соединение разных тел между собой: дверь, закрепленная в дверном проеме; винт вертолета, смонтированный на его фюзеляже; элементы роборуки, или все кости человека, объединенные в скелет. Создавать такие сложные объекты, состоящие из нескольких взаимосвязанных тел с заданными степенями свободы их движения друг относительно друга позволяют сочленения.

In simple terms, a joint connects two bodies and restricts their movement relative to each other. When you apply too much force to the joint, it can break.Итак, сочленение соединяет два твердых тела и накладывает определенные ограничения на движение соединяемых тел друг относительно друга. Когда сила, приложенная к сочленению, слишком велика, сочленение ломается.

A joint connecting two rigid bodies

A joint connecting two rigid bodiesСочленение, соединяющее два твердых тела

There are several types of joints:Существует несколько типов соединений:

  • FixedФиксированное (Fixed)
  • HingeПетельное (Hinge)
  • BallШаровое (Ball)
  • PrismaticПризматическое (Prismatic)
  • CylindricalЦилиндрическое (Cylindrical)
  • SuspensionПодвеска (Suspension)
  • WheelКолесо (Wheel)
  • ParticlesЧастицы (Particles)
  • PathТраектория (Path)

When you use joints, ensuring mass balance is crucial. Avoid connecting too heavy bodies to light ones. Remember, physics simulation uses approximate calculations, so if two connected bodies are very different in mass, accumulation of errors and precision issues lead to unstable results.При использовании сочленений очень важно соблюдать баланс масс – избегать соединения слишком тяжелых тел с легкими, иначе система может стать нестабильной. Как упоминалось ранее, при физическом моделировании используются приблизительные расчеты, поэтому, если разница масс между двумя соединенными телами значительна, накопление ошибок и проблем с точностью приведет к нестабильности результата.

Thus, when making a car model, do not set the mass of the car body equal to 2000 kg and the wheels — to 10 kg. It might be better to use 5 kg for the body and 1 kg for each wheel to provide realistic behavior.Таким образом, при создании модели автомобиля не устанавливайте массу кузова 2000 кг, а колес – 10 кг, возможно, лучше использовать 5 кг для кузова и по 1 кг для каждого колеса, чтобы обеспечить реалистичное поведение.

Fixed Joint
Фиксированное сочленение (Fixed Joint)#

A fixed joint connects two bodies in a manner that strictly preserves their positions relative to each other. An example of such a connection in real life is welding or gluing two objects together. Такое сочленение связывает два тела таким образом, что их положения жестко фиксированы относительно друг друга. Примером такого соединения в жизни является сварка или склеивание двух предметов.

Hinge Joint
Петельное сочленение (Hinge Joint)#

A hinge joint allows the connected bodies to rotate along the joint's axis at the anchor point. The joint has an angular motor attached. Hinge joints are used for doors and the arms and legs of characters.В этом сочленении компоненты могут вращаться вдоль одной оси, этот тип используется для дверей или конечностей персонажа.

Ball Joint
Шаровое сочленение (Ball Joint)#

A ball joint provides a point around which the connected objects can rotate. It is similar to the hip joint. You can limit rotation by using the corresponding parameters.В таком сочленении есть точка, вокруг которой могут вращаться компоненты. Оно аналогично тазобедренному суставу. Вращение можно ограничить соответствующими параметрами.

Cylindrical and Prismatic Joints
Цилиндрическое и призматическое сочленения (Cylindrical and Prismatic Joints)#

These joints are similar — they both allow movement along the joint axis, which can be used for piston simulation. The cylindrical joint has an additional degree of freedom — rotation around the joint axis. Эти сочленения схожи: они оба разрешают движение вдоль оси соединения, что можно использовать для имитации движения поршня. У цилиндрического соединения есть дополнительная степень свободы – вращение вокруг своей оси.

Prismatic JointПризматическое сочленение Cylindrical JointЦилиндрическое сочленение

Hinge, Ball, Cylindrical, and Prismatic joints are used to create connections in mechanisms with the specific restrictions of the movement of bodies relative to each other. In addition to these main types of joints, UNIGINE also provides auxiliary ones.Петельное, шаровое, цилиндрическое и призматическое сочленения (Hinge, Ball, Cylindrical и Prismatic) используются для создания соединений в механизмах с характерным ограничением движения тел друг относительно друга. Помимо этих основных типовсочленений в UNIGINE есть еще и вспомогательные.

Wheel Joint and Suspension Joint
Сочленения Колесо (Wheel Joint) и Подвеска (Suspension Joint)#

These joints are intended to simulate vehicles and the interaction of vehicle wheels with the ground.Они предназначены для моделирования транспортных средств и взаимодействия колеса с землей.

They both simulate wheel suspension and have angular motors attached. The main difference is that the suspension joint operates with the physical shape of the wheel, which serves for accurate collision detection. While the wheel joint handles a virtual wheel and checks for intersections with the ground via ray-casting. This approach is faster and provides an acceptable result on smooth terrain. In case of a stepped ground surface, it is better to use the suspension joint.Оба сочленения имитируют работу подвески и у них есть моторчики, передающие крутящий момент на колесо. Разница в том, что Suspension работает с физической формой колеса, которая позволяет точно определять коллизии, а Wheel – работает с виртуальным колесом и проверяет пересечение с землей при помощи лучей (ray casting). Такой подход быстрее и дает хороший результат на ровной поверхности. Для неровных поверхностей лучше использовать Suspension.

Примечание
When creating a wheel or suspension joint, the order of connecting bodies matters: first, you add a joint to the vehicle frame and then specify the wheel to be attached.При создании колесного сочленения важен порядок, в котором вы соединяете тела: сначала колесное сочленение добавляется к раме автомобиля (или к тому телу, которое выполняет ее функцию), а затем указывается колесо, которое с ней соединяется.

Particles Joint
Сочленение Частицы (Particles Joint)#

A Particles joint allows pinning a Cloth or Rope body to a Rigid, Ragdoll, or Dummy body. For example, you can use it to hang a flag or attach a cloth to a character.Это сочленение используется для прикрепления шнура или ткани к телам Rigid, Ragdoll, Dummy. Например, чтобы повесить флаг на флагшток или надеть плащ на персонажа.

Path Joint
Сочленение Траектория (Path Joint)#

A Path joint is used to attach a Rigid body to a Path body and to make the Rigid body move along this path.Такое сочленение привязывает тело Rigid к телу Path и заставляет его двигаться по этой траектории.

Physical Effects
Физические явления#

Various physical effects can affect physical objects — wind, force fields, Archimedes' force when a body is immersed in a fluid. In UNIGINE, we use the Physical objects to represent these effects.На физические объекты в мире могут влиять различные физические явления, ветер, силовые поля, сила Архимеда при погружении тела в жидкость. В UNIGINE они представляются объектами Physical.

You can add a physical effect to a scene via UnigineEditor. Just click Create → Physics in the Menu Bar and choose the required object. You can adjust its settings in the corresponding tab of the Parameters window.Для добавления физического явления в сцену, в главном меню нажмите Create → Physics и выберите нужный объект. Настройки объекта находятся в соответствующем разделе окна Parameters.

Also UNIGINE SDK Browser provides a set of samples demonstrating the usage of the Physical objects. You can easily find them in the Samples → UnigineScript → Force Fields section and run in UnigineEditor to see how they work.В UNIGINE SDK Browser есть набор сэмплов с простыми примерами использования физических явлений. Вы можете найти их в разделе Samples → UnigineScript → Force Fields и открыть с помощью Редактора для подробного изучения.

Physical Wind
Ветер#

Physical Wind is a cuboid-shaped object simulating wind blowing within its volume.Для создания ветра используется объект Physical Wind. Он представляет собой куб, внутри которого моделируется ветер.

The wind only affects objects placed inside the Physical Wind box and having physical bodies assigned.Ветер влияет только на объекты, находящиеся внутри объема Physical Wind и имеющие физическое тело (body).

Примечание
The Physical Wind can affect only the Cloth and Rigid bodies. At that, the Rigid body must have a collision shape assigned.Объект Physical Wind влияет только на тела Rigid и Cloth. При этом тело Rigid должно иметь коллизионную форму.

The wind differently affects objects with different physical properties. So, besides changing the Physical Wind parameters, you should adjust the parameters of the physical body.Ветер по-разному влияет на объекты в зависимости от их физических свойств. Поэтому при его настройке вы должны настроить и параметры физического тела.

For example, if you place an object with the Cloth body inside the Physical Wind volume, the way it "waves in the wind" will vary depending on the Cloth body mass, rigidity, and other parameters.Например, если поместить объект с телом Cloth в пространство Physical Wind, то такой объект будет “развеваться на ветру” по-разному в зависимости от его массы, жесткости и других параметров.

When you set up the wind, you can change the size of the volume in which the wind blows, specify the wind velocity, attenuation threshold, and damping of the linear and angular velocities of the objects when they get inside the wind volume.При настройке ветра вы можете изменить размер объема, в котором дует ветер, указать его скорость, порог затухания этой скорости от границ объема до его центра, а также изменение линейной и угловой скорости объектов, подвергающихся воздействию ветра.

You can also choose which physical bodies are affected by the wind. For example, you can make only one flag flutter in the wind while the others stay still. For this purpose, there is the Physical mask — it must match the Physical mask of the physical body affected by the wind.Воздействие ветра можно сделать выборочным. Например, для того, чтобы только флаг развевался на ветру, а все остальные объекты оставались неподвижными. Для этого есть специальная маска Physical mask: она должна совпадать с Physical mask объекта, на который влияет ветер.

Force Fields
Силовые поля#

The Physical Force and Physical Noise are objects for creating force fields.Силовые поля представлены объектами Physical Force и Physical Noise.

The Physical Force is a spherical object with a force that is applied to its center and attenuates within a specified radius. Objects within the sphere can pull up to or away from the center and rotate around it.Объект Physical Force представлен сферой, в центре которой действует сила в пределах указанного радиуса. Объекты внутри сферы могут притягиваться к ее центру и вращаться вокруг него.

Objects are pulled up to the center and rotated around it by the Physical Force

Objects are pulled up to the center and rotated around it by the Physical ForceТела под воздействием Physical Force притягиваются к центру и вращаются вокруг него

You can control the attenuation of the force affecting the object that moves away from the force center. In addition, you can adjust the intensity of the attraction and rotation forces that define the speed and direction of rotation.Вы можете задать коэффициент затухания интенсивности силы при движении от центра к границам сферы. Также можно изменить интенсивность притяжения и вращательное усилие, которое определяет скорость и направление вращения.

The Physical Noise is a cuboid-shaped area that adds a distribution flow based on a volumetric noise texture. This effect simulates a force field that affects particles and physical bodies.Объект Physical Noise – это объект кубической формы, в котором создается распределяющий поток на основе объемной текстуры шума. Этот эффект можно использовать для имитации силового поля, которое влияет на частицы и физические тела.

Примечание
  • Physical Noise affects only the Cloth, Rope, and Rigid bodies. At that, the Rigid body must have a collision shape assigned.Объект Physical Noise влияет только на тела Cloth, Rope и Rigid. При этом Rigid тело должно иметь коллизионную форму.
  • Physical Noise will affect particles only if their physical mass is non-zero. You can set this in the settings of the Particles object.Physical Noise при взаимодействии с объектом Particles будет влиять только на частицы, имеющие физическую массу отличную от нуля. Ее можно задать в настройках объекта Particles.

The direction of the force affecting particles and physical bodies within the Physical Noise volume is stored in the Noise texture — a 3D texture, where each texel stores the force direction.Направление силы, воздействующей на частицы и физические тела внутри объема Physical Noise, сохраняется в текстуре шума (Noise Texture): трехмерной текстуре, каждый тексель которой хранит направление силы.

To be sure that the force at the current point affects the physical body entering the Physical Noise volume according to the Noise texture, you need to provide the texture generation and sampling parameters for the Noise texture, along with the Force multiplier.Чтобы при попадании физического тела в объем Physical Noise сила в текущей точке влияла на него в соответствии с данными текстуры, вам нужно указать параметры генерации и сэмплирования текстуры шума, а также множитель силы (параметр Force).

Floating Bodies
Плавающие тела#

The Physical Water is a cuboid-shaped object that allows the simulation of water interaction effects within its volume.Объект Physical Water – это объект кубической формы, внутри которого моделируются эффекты взаимодействия с водой.

This effect is helpful for the simulation of physical interactions of bodies with the Water Global, as this water object doesn't support the Water body because of large-scale computations. You can use the Physical Water to simulate the floating physical bodies within a certain area.Плавание тел для объекта Water Mesh обеспечивается с помощью тела Water. Однако, для объекта Water Global этот способ не применим: физические тела не взаимодействуют с ним из-за большого объема вычислений. Но можно использовать Physical Water для плавания тел в пределах определенного объема.

To add the Physical Water to your scene, select Create → Water → Physical Water in the Menu Bar of UnigineEditor.Для добавления Physical Water в сцену, в главном меню выберите Create → Water → Physical Water.

Примечание
  • The Physical Water can only interact with the Cloth and Rigid bodies. At that, the Rigid body must have a collision shape assigned.Physical Water воздействует только на тела Cloth и Rigid. При этом Rigid тело должно иметь коллизионную форму.
  • Physical Water does not simulate waves.Physical Water не симулирует волны.

The bodies with different physical properties act differently in the Physical Water. So, besides changing the Physical Water parameters, you should adjust the parameters of the physical body as well.Тела с разными физическими свойствами ведут себя по-разному внутри объема Physical Water. Поэтому при настройке вы должны настроить и параметры физического тела.

You can also create additional water effects with Physical Water — for example, foam on the water surface or water splashes — by generating particles in the contacts between the Rigid bodies and Physical Water. Add your Particles object as a child to Physical Water to implement the required effect.Вы можете создавать дополнительные эффекты на воде (пену, брызги и т.д.), генерируя частицы в области контакта между телом Rigid и объектом Physical Water. Для этого нода Object Particles должна быть добавлена как дочерняя к ноде Physical Water.

Примечание
You cannot generate particles in the contact between the water and the Cloth body since these bodies cannot float in the water.Частицы нельзя сгенерировать для тела Cloth, так оно не может плавать в воде: оно может только смещаться по течению.

Physical Triggers
Физические триггеры#

The Physical Trigger is an effect that fires callbacks when physical objects get inside or outside its volume.Физический триггер (Physical Trigger) – это эффект, который активирует определенные события при входе или выходе физических объектов из его пространства.

The trigger can be of the box, sphere, capsule, or cylinder shape.Триггер может иметь форму куба, сферы, капсулы или цилиндра.

To add the Physical Trigger to your scene, select Create → Logic → Physical Trigger in the Menu Bar of UnigineEditor.Для добавления Physical Trigger в сцену, в главном меню необходимо выберите Create → Logic → Physical Trigger.

To be detected by the trigger, a physical object must have both:Чтобы триггер сработал, объект должен иметь:

  • A physical body with the Physical mask that matches the Physical mask of the trigger.Физическое тело (body), у которого Physical mask совпадает с аналогичной маской триггера.
  • A shape with the Collision mask that matches the Collision mask of the trigger.Коллизионную форму (shape), у которой Collision mask совпадает с маской триггера.

You can obtain the physical bodies participating in the contact with the Physical Trigger and their collision shapes via API. In addition, you can get values such as the depth of penetration of the body into the trigger, the coordinates of the contact point and the normal to it.Физические объекты, взаимодействующие с триггером, и их коллизионные формы, доступны через API. Кроме того, вы можете получить такие значения, как глубина проникновения объекта в триггер, координаты точки контакта и нормали к ней.

To define actions to be performed when the body enters and leaves the trigger, do the following:Чтобы определить действия, которые должны выполняться при входе физического объекта в триггер или выходе из него, нужно сделать следующее:

  1. In UnigineEditor, create a C# component and open it.В редакторе UnigineEditor создать C# компонент.
  2. Implement handler functions for the Enter and Leave events receiving a Body as the first argument.Реализовать в нем функцию обратного вызова, которая получает Body в качестве своего первого аргумента.
  3. In the Init() function, get the instance of the Physical Trigger and subscribe for the Enter or Leave event via the Connect method specifying the corresponding implemented handler function.В функции Init() для триггера вызвать метод addEnterCallback() или addLeaveCallback(), передав в него функцию обратного вызова в качестве аргумента.
  4. Assign the implemented component to the Physical Trigger node in UngineEditor.Назначить компонент ноде Physical Trigger в редакторе.
Исходный код (C#)
// функции обработки событий
void trigger_enter(Body body){...}
void trigger_leave(Body body){...}

PhysicalTrigger physicalTrigger;
EventConnections trigger_event_connections = new EventConnections();

private void Init()
{
	// приводим ноду к типу PhysicalTrigger
	physicalTrigger = node as PhysicalTrigger;

	if (physicalTrigger != null)
	{
	   // подписываемся на событие Enter с функцией, которая будет выполняться при входе тела в пространство триггера
	   physicalTrigger.EventEnter.Connect(trigger_event_connections, trigger_enter);

	   // подписываемся на событие Leave с функцией, которая будет выполняться при выходе тела из пространства триггера
	   physicalTrigger.EventLeave.Connect(trigger_event_connections, trigger_leave);
	}
}

private void ShutDown()
{
	// удаляем подписки на события Enter и Leave
	trigger_event_connections.DisconnectAll();
}

Simulation of Physics
Моделирование физики#

In physics simulation, physics calculations are in the multi-threaded mode — some operations are performed in parallel. Physics is simulated with its own fixed frame rate, which doesn’t depend on the rendering frame rate. You can also synchronize the Engine frame rate with the physics one.При моделировании физических процессов вычисления выполняются в многопоточном режиме — некоторые операции выполняются параллельно. Моделирование выполняется с собственной фиксированной частотой, которая не зависит от частоты кадров рендеринга (при необходимости частоту обновления движка также можно синхронизировать с физикой).

If physics takes more than the assigned budget, further calculations are delayed. These calculations shall be performed during the subsequent rendering frames, making the physics simulation look like in the slow-motion mode. The default budget is 50ms, but you can increase it if necessary.Если физические расчеты выходят за рамки установленного бюджета, дальнейшие расчеты задерживаются. Эти расчеты должны выполняться во время последующих кадров рендеринга, что делает моделирование физики похожим на "замедленную съемку". Бюджет по умолчанию равен 50 мс, но при необходимости его можно увеличить.

During each tick, several calculation iterations can be performed. This includes the full cycle of physics simulation:Во время каждого кадра может выполняться несколько итераций расчета. Одна итерация включает полный цикл физического моделирования:

  • Updating physicsОбновление физики
  • Collision detectionОбнаружение столкновений
  • Solving jointsРешение сочленений (joints)
  • Collision responseРеакция на столкновение
  • Physics synchronizationСинхронизация физики

There are two update modes available for physics simulation (each of them has its advantages and use cases):Физика имеет два режима обновления (каждый из них имеет свои преимущества и варианты использования):

  • Before Rendering — the physics update (along with the spatial tree update and user callbacks) is executed in the Main thread just before rendering is performed (render). The number of physics ticks executed before the rendering frame here is defined by the physics and Engine frame rates. This update mode is the most clear and straightforward (everything is executed safely in a strictly determined order) with no frame lag (results of physics calculations are applied in the current frame). But, on the other hand, this mode is the slowest as there are no asynchronous parallel calculations (everything is in the Main thread). Use this mode if the time lag is unacceptable for your application (you need all physics calculations to be applied in the current frame) and you want maximum simplicity and strictly determined order of execution for user code (physicsUpdate and physics callbacks).Before Rendering — обновление физики (вместе с обновлением пространственного дерева и пользовательскими колбэками) выполняется в основном потоке непосредственно перед выполнением рендеринга (render). Количество кадров физики, выполняемых перед кадром рендеринга, определяется частотой кадров движка и частотой обновления физики. Этот режим самый понятный и простой (все выполняется безопасно в строго определенном порядке) без задержки кадров (результаты физических расчетов применяются в текущем кадре). С другой стороны, этот режим самый медленный, поскольку все считается в главном потоке, без асинхронных параллельных вычислений. Используйте этот режим, если нужно, чтобы все физические расчеты применялись в текущем кадре и вы хотите максимальной простоты и строго определенного порядка выполнения пользовательского кода (physicsUpdate и колбэки физики).
  • Async Rendering — physics update is performed asynchronously to rendering. In the case of several physics ticks per one rendering frame (when the Engine frame rate is lower or catching up is performed), only the first one is executed in parallel. Then the physics module waits for the completion of the rendering process, returns to the Main thread, and executes the rest of the physics ticks. There is a frame lag (results of physics calculations are applied in the next frame) and some ambiguity regarding the time when the user code (physicsUpdate and physics callbacks) is to be executed in case of several physics ticks per one rendering frame (some part is executed before rendering while the other just after it). This mode is the fastest one and is used by default.Async Rendering — обновление физики выполняется асинхронно с рендерингом. В случае нескольких кадров физики на один кадр рендеринга (когда частота кадров движка ниже или осуществляется сокращение отставания), параллельно выполняется только первый, затем модуль физики дожидается завершения процесса рендеринга, возвращается в основной поток и выполняет остальные кадры физики. Присутствует задержка кадра (результаты физических расчетов применяются в следующем кадре) и некоторая неясность относительно времени, когда должен выполняться пользовательский код (physicsUpdate и колбэки физики) в случае нескольких кадров физики на один кадр рендеринга (какая-то часть выполняется до рендеринга, а другая сразу после него). Этот режим является самым быстрым и используется по умолчанию.

As the Engine has a variable framerate while the physics framerate is fixed, the execution of physics calculations always adapts to the current situation.Поскольку движок имеет переменную частоту кадров, а частота кадров физики фиксирована, выполнение физических расчетов всегда адаптируется к текущей ситуации.

If the Engine framerate drops below the physics frame rate (which is a rare case), some physics frames do not have enough time for execution and become missing. The physics module keeps such missed frames in memory for a certain period (called Missed Frame Lifetime) and tries to execute them when the situation gets better (Engine FPS grows) or when the CPU is idle while waiting for the GPU to complete rendering (if there is enough time). This approach is called catching up and helps to avoid the slow-motion effect occurring when physics frames are dropped off. In case of insufficient hardware capabilities, missed frames are removed from the buffer as their lifetime expires, and they become lost forever.Если частота кадров движка падает ниже частоты кадров физики (что бывает очень редко), некоторые кадры физики не успевают выполниться и пропускаются. Физический модуль хранит такие пропущенные кадры в памяти в течение определенного периода времени (Missed Frame Lifetime) и пытается выполнить их, когда ситуация улучшается (рост FPS движка) или когда процессор простаивает во время ожидания завершения рендеринга GPU (если времени достаточно). Это называется сокращением отставания и помогает избежать эффекта «замедленного движения», который возникает при выпадании физических кадров. При низкой производительности “железа” пропущенные кадры удаляются из буфера по мере истечения срока их жизни и теряются навсегда.

The actual time of physics calculations can go beyond the current budget as the ones performed while waiting for the GPU are not taken into account. So, the budget is not strict in this respect and can be exceeded if the CPU is idle.Фактическое время физических расчетов может выходить за пределы текущего бюджета поскольку те, которые выполняются во время ожидания GPU, не учитываются. Таким образом, бюджет в этом отношении не является абсолютно строгим и может быть превышен, если ЦП простаивает.

Physics also has the Deterministic mode that ensures that all contacts are solved in the predefined order and visualization of physics in the world is repetitive (on one computer).У физики также есть детерминированный режим, который гарантирует, что все контакты решаются в заданном порядке, а визуализация физики в мире повторяема (на одном компьютере и одной и той же версии движка).

At that, the Deterministic mode is unavailable in case there are missed frames. This mode may eat up to 10-20% of the frame rate, and it also depends on the scene a lot.Детерминированный режим недоступен, если пропускаются кадры физики. Этот режим может понизить производительность на 10-20%, а также сильно зависит от сцены.

Global Physics Settings
Глобальные настройки физики#

As you already know, every virtual world has a set of global settings. The same goes for physics. You can find the physics settings in the Runtime → World → Physics section of the Settings window.Как вы уже знаете, у каждого мира есть набор глобальных настроек, это относится и к физике. Найти их можно в разделе Runtime → World → Physics окна Settings.

These settings serve for optimization (we will talk about this later) and additional adjustment of physical interactions in the world. For example, you can use them to simulate a planet with its gravity.Эти настройки используются для оптимизации (о ней мы расскажем немного позже) и дополнительной настройки физических процессов в мире. Например, они пригодятся при моделировании планеты с иной гравитацией.

The current physics settings can be saved to a separate *.physics file for later re-use.Текущие настройки физики можно сохранить в отдельный файл *.physics для последующего переиспользования.

Using these settings, you can set the gravity, physics frame rate, and distance from the camera at which physics is simulated. Also, you can define the optimal number of iterations for physics during one physics tick and find the appropriate physics simulation time budget.С помощью этих настроек можно задать силу тяжести, частоту кадров физики, расстояние от камеры, на котором происходит симуляция физики, указать оптимальное количество вычислительных итераций за 1 кадр, а также подобрать подходящий бюджет времени, в рамках которого происходят физические расчеты в текущем кадре.

In addition, you can control the physics calculation time, speed up or slow down the simulation time, adjust the linear and angular velocity of physical objects, and define their behavior in collisions.Кроме того, можно контролировать время расчета физики, ускорять или замедлять время симуляции, контролировать линейную и угловую скорость физических объектов в мире и определять поведение объектов при столкновениях.

Последнее обновление: 16.08.2024
Build: ()