This page has been translated automatically.
Видеоуроки
Interface
Essentials
Advanced
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Landscape Tool
Sandworm
Использование инструментов редактора для конкретных задач
Extending Editor Functionality
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World Nodes
Звуковые объекты
Объекты поиска пути
Players
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
Унифицированный язык шейдеров UUSL
Плагины
File Formats
Rebuilding the Engine Tools
GUI
Двойная точность координат
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Art Samples
Tutorials

Физика

Unlike many other engines using third-party solutions, Unigine features its own built-in physics module. В отличие от многих других движков, использующих сторонние решения, Unigine имеет собственный встроенный физический модуль.

The advantages of using a built-in physics module: Преимущества использования встроенного модуля физики:

  • Memory efficiency — a single instance of the world is used (if an external solution is used, one more copy of the world has to be created and stored). Эффективность использования памяти - используется один экземпляр мира (если используется внешнее решение, необходимо создать и сохранить еще одну копию мира).
  • Performance — calls to external functions, excessive data conversion and transmission between integrated systems are avoided. Производительность - исключены вызовы внешних функций, чрезмерное преобразование данных и передача между интегрированными системами.

It should be clear that it is not a high-precision simulation of real world physics! The simulation is just an approximation based on simplified calculations and decreased accuracy providing a realistic look within the strict limits of the real-time mode. Achieving a true-to-life result always involves a trade-off between accuracy and performance. Должно быть ясно, что это не высокоточная симуляция физики реального мира! Моделирование - это всего лишь приближение, основанное на упрощенных вычислениях и пониженной точности , обеспечивающее реалистичный вид в строгих пределах режима реального времени. Достижение реалистичного результата всегда требует компромисса между точностью и производительностью.

Примечание
It is not recommended to use real values of mass, density, gravity, etc. To ensure realistic behavior, the values are to be chosen experimentally. Не рекомендуется использовать реальные значения массы, плотности, силы тяжести и т. д. Для обеспечения реалистичного поведения значения следует выбирать экспериментально.

Though in general Unigine uses a simplified Newtonian physics with an impulse-based approach, the integration of collision detection, gravity, friction, buoyancy, joints, and external physical forces provides realistic simulation of physical bodies and complex interactions between them. Хотя в целом Unigine использует упрощенную физику Ньютона с импульсным подходом, интеграция обнаружения столкновений , гравитации, трения , плавучести , суставы и внешние физические силы обеспечивают реалистичное моделирование физических тел и сложных взаимодействий между ними.

See alsoСмотрите также#

Use Cases and Limitations of Built-in PhysicsСценарии использования и ограничения встроенной физики#

UNIGINE's physics module is quite limited; however, in a number of cases it helps programmers and designers to make their work easier. Here is the list of the use cases where it is better to use built-in physics rather than hard-coding or bone-based animation: Физический модуль UNIGINE весьма ограничен; однако в ряде случаев это помогает программистам и дизайнерам упростить их работу. Вот список случаев, когда лучше использовать встроенную физику, а не жесткое кодирование или анимацию на основе костей:

It should be understood that the scope of simulation using built-in physics is limited to the cases listed above. Thus, there is a large number of cases that cannot be solved this way, including the following: Следует понимать, что объем моделирования с использованием встроенной физики ограничен перечисленными выше случаями. Таким образом, существует большое количество случаев, которые не могут быть решены таким образом, в том числе следующие:

Though some tasks involving a large number of objects can be solved using built-in physics, it may significantly reduce performance. In this case, as in the cases listed above, it is recommended to use alternative ways described in the next chapter. Хотя некоторые задачи, связанные с большим количеством объектов, можно решить с помощью встроенной физики, это может значительно снизить производительность. В этом случае, как и в случаях, перечисленных выше, рекомендуется использовать альтернативные способы, описанные в следующей главе.

Watch a fragment of our video tutorial on physics illustrating this chapter. Посмотрите отрывок из нашего видеоурока по физике , иллюстрирующий эту главу.

Alternatives to Built-in PhysicsАльтернативы встроенной физике#

When a problem cannot be solved by means of the built-in physics module or takes too much time, several other approaches can be used: bone-based animation, hard coding, or using an external physics engine. Когда проблема не может быть решена с помощью встроенного физического модуля или занимает слишком много времени, можно использовать несколько других подходов: анимация на основе кости, жесткое кодирование или использование внешнего физического движка.

Bone-based AnimationКостная анимация#

In some cases, when an object's behavior cannot be implemented by using physics simulation or requires too many calculations, the bone-based animation can be used instead. В некоторых случаях, когда поведение объекта невозможно реализовать с помощью моделирования физики или требуется слишком много вычислений, вместо этого можно использовать анимацию на основе костей.

Bone-based animation is a technique in which animated object is represented by two components: Костная анимация - это техника, в которой анимированный объект представлен двумя компонентами:

  • Surface representation used to draw the object (called skin or mesh) Представление поверхности, используемое для рисования объекта (называемое кожей или сеткой )
  • Hierarchical set of interconnected bones (called the skeleton or rig) used to animate (pose and keyframe) the mesh Иерархический набор взаимосвязанных костей (называемых скелетом или ригом), используемый для анимации (позы и ключевого кадра) сетки.

Mesh and skeleton

Mesh and skeleton Сетка и скелет

This technique serves to make the animation process more convenient. Each bone of the rig is associated with some part of the object's mesh. Skinning is the process of creating this association. Changing bone transformations modifies the mesh. Этот прием позволяет сделать процесс анимации более удобным. Каждая кость рига связана с некоторой частью меша объекта. Снятие шкур - это процесс создания этой ассоциации. При изменении преобразований костей изменяется сетка.

There are two ways of using bone animation: Есть два способа использования костной анимации:

  • Baked bone animation using pre-baked keyframes stored in .anim file Анимация запеченных костей с использованием предварительно запеченных ключевых кадров, хранящихся в файле .anim
  • Procedural bone animation using ObjectMeshSkinned class to change bone transformations in real time Процедурная анимация костей с использованием класса ObjectMeshSkinned для изменения преобразований костей в реальном времени

Meshes and animation can be created using third-party graphics software (3ds Max, Maya, etc.), then imported to UNIGINE in their native format (.mesh and .anim) and used in the world. Меши и анимацию можно создавать с помощью стороннего графического программного обеспечения (3ds Max, Maya и т. д.), затем импортировать в UNIGINE в собственном формате (.mesh и .anim) и использовать в мире.

  • The first use case is creation of a complex mechanism with a large number of various joints working in the background of a factory workshop. Simulation of this mechanism using physics will significantly reduce performance. You can use a baked bone-based animation instead. Первый вариант использования - создание сложного механизма с большим количеством различных узлов, работающих на фоне заводского цеха. Моделирование этого механизма с помощью физики значительно снизит производительность. Вместо этого вы можете использовать запеченную анимацию на основе кости.
  • The second use case is determined by the fact that bones cannot be affected physically. Imagine that we have an antenna, which is represented by a single mesh containing a number of bones, attached to a vehicle. To make it move realistically we have to write a script (in C++ or C#) calculating necessary bone transformations and providing desired behavior of the antenna. Второй вариант использования определяется тем фактом, что кости нельзя повредить физически. Представьте, что у нас есть антенна, которая представлена ​​единственной сеткой , содержащей несколько костей, прикрепленной к транспортному средству. Чтобы заставить его двигаться реалистично, мы должны написать сценарий (на C ++ или C # ), вычисляющий необходимые преобразования костей и обеспечивающий желаемое поведение антенны.

Code-based ApproachКодовый подход#

Another way to replace physics simulation achieving a realistic result without performance drops is code-based approach, which involves writing some code to programmatically change transformations of objects and their behavior. Другой способ заменить симуляцию физики с достижением реалистичного результата без падения производительности - это подход на основе кода, который включает в себя написание некоторого кода для программного изменения преобразований объектов и их поведения.

  • The first use case is simulation of the object deformation as a result of an inelastic collision. The built-in physics does not implement inelastic collision simulation. However, we can detect a collision and then change the deformed object's mesh in the script (in UnigineScript, C++ or C#) providing the desired deformation.
    Примечание
    Deformation (i.e. changing positions of mesh vertices) is available for dynamic meshes only!Deformation (i.e. changing positions of mesh vertices) is available for dynamic meshes only!
    Deformation (i.e. changing positions of mesh vertices) is available for dynamic meshes only!
    Первый вариант использования - моделирование деформации объекта в результате неупругого столкновения. Встроенная физика не реализует моделирование неупругих столкновений. Однако мы можем обнаружить столкновение и затем изменить сетку деформированного объекта в скрипте (в UnigineScript , C ++ или C # ), обеспечивая желаемую деформацию .
    Примечание
    Deformation (i.e. changing positions of mesh vertices) is available for dynamic meshes only! Деформация (т.е. изменение положения вершин сетки) доступна только для динамических сеток !
  • The second use case is when there is a large number of interacting elements, e.g. tank tracks and suspension. If we have many tanks, the calculation of physics will drop FPS down. Moreover, due to approximation errors the whole mechanism may blow up or look unnatural. We write a script, which calculates the movement of suspension and track plates, providing stability and a desired degree of realism. Второй вариант использования - это большое количество взаимодействующих элементов, например танковые гусеницы и подвеска. Если у нас много танков, расчет физики упадет FPS. Более того, из-за ошибок аппроксимации весь механизм может взорваться или выглядеть неестественно. Мы пишем скрипт, который рассчитывает движение пластин подвески и гусеницы, обеспечивая устойчивость и желаемую степень реализма.

Using code-based tricks makes it possible to maintain acceptable FPS and tweak the behavior of objects. Использование трюков на основе кода позволяет поддерживать приемлемый FPS и настраивать поведение объектов.

External Physics EnginesМеханизмы внешней физики#

In cases where a precise physical simulation is required (e.g. flight dynamics, fluid dynamics, etc.) it is recommended to use a specialized third-party solution that provides required functionality. Unigine does not currently offer a solution for third-party physics integration. Therefore, all necessary product-specific guidelines on how to integrate a certain third-party solution into your application are to be obtained from the party offering this solution. В случаях, когда требуется точное физическое моделирование (например, динамика полета, гидродинамика и т. д.), рекомендуется использовать специализированное стороннее решение, обеспечивающее необходимую функциональность. Unigine в настоящее время не предлагает решения для интеграции сторонней физики. Таким образом, все необходимые руководящие принципы для конкретного продукта о том, как интегрировать определенное стороннее решение в ваше приложение, должны быть получены от стороны, предлагающей это решение.

Combined ApproachКомбинированный подход#

Very often, the best results can be achieved using a combination of different methods or techniques. So, the approaches described above can be successfully combined to provide a convincing look and acceptable performance. Очень часто наилучших результатов можно достичь, используя комбинацию различных методов или приемов. Таким образом, описанные выше подходы можно успешно комбинировать, чтобы обеспечить убедительный внешний вид и приемлемую производительность.

The use case illustrating a successful combination of several approaches is associated with simulation of physical destruction of complex objects, e.g. collapsing bridges, exploding buildings, etc. Realistic simulation in this case is impossible in real time. However, it can be pre-computed using third-party offline physics simulation software and then converted to a baked bone-based animation to be used in a real-time application. Вариант использования , иллюстрирующий успешное сочетание нескольких подходов, связан с моделированием физического разрушения сложных объектов, например рушатся мосты, взрываются здания и т. д. Реалистичное моделирование в этом случае невозможно в реальном времени. Однако его можно предварительно вычислить с помощью стороннего программного обеспечения для автономного моделирования физики, а затем преобразовать в запеченную анимацию на основе кости для использования в приложении реального времени.

Physical Interaction of Objects. Basic EntitiesФизическое взаимодействие объектов. Основные сущности#

While the majority of node types in the scene serve as auxiliary means or decorations, the Object type can have physical properties and interact with other objects and the environment. For these properties to be assigned, the object should have a "body" (a physical approximation of the object), and the body should have at least one "shape " (a volume in space occupied by a body). To connect bodies and restrict their movement relative to each other, the "joints" are used. The picture below illustrates relationships between these entities. В то время как большинство типов узлов в сцене служат вспомогательными средствами или украшениями, тип Object может иметь физические свойства и взаимодействовать с другими объектами и средой. Для назначения этих свойств объект должен иметь " body " (физическое приближение объекта), а тело должно иметь по крайней мере одну " shape " ( объем в пространстве, занимаемом телом). Для соединения тел и ограничения их движения относительно друг друга используются « суставы ». На рисунке ниже показаны отношения между этими объектами.

Relationships between the entities

Relationships between the entities Отношения между сущностями

BodyТело#

To interact with other objects as well as external physical forces, an object must have a body. The body can be considered a physical approximation of the object, it describes its behavior and represents a set of its dynamic parameters, such as mass, velocity, etc. There are several types of bodies: dummy, rigid, ragdoll, fracture, rope, cloth, water, path. Each type of body is used for simulation of a specific type of object. Для взаимодействия с другими объектами, а также с внешними физическими силами объект должен иметь тело. Тело можно рассматривать как физическое приближение объекта, оно описывает его поведение и представляет собой набор его динамических параметров, таких как масса, скорость и т.д. Существует несколько типов тел: dummy, rigid, ragdoll, fracture, rope, cloth, water, path. Каждый тип тела используется для моделирования определенного типа объекта.

Scene with several types of bodies

Scene with several types of bodies: water, ragdoll, rigid Сцена с несколькими типами тел: вода, тряпичная кукла, жесткое

Mass parameters of the body can be set up manually or determined automatically using the shape-based parameters. It is convenient when a body has several shapes. Массовые параметры тела можно настроить вручную или определить автоматически с помощью параметров формы. Это удобно, когда тело имеет несколько форм.

Body mass and density are used for buoyancy simulation in accordance with the Archimedes' principle. Масса и плотность тела используются для моделирования плавучести в соответствии с принципом Архимеда.

ShapeФорма#

While the body determines the object’s behavior, the shape represents the volume of space occupied by a physical body. The shape is invisible and doesn’t have to be the same as the object’s mesh. Actually a rough approximation (sphere, capsule, cylinder, box, convex hull) is often more efficient and indistinguishable. A physical body has one or several collision shapes allowing objects to collide with each other. В то время как тело определяет поведение объекта, форма представляет собой объем пространства, занимаемого физическим телом. Эта форма невидима и не обязательно должна совпадать с сеткой объекта. На самом деле грубое приближение (sphere, capsule, cylinder, box, convex hull) часто более эффективно и неотличимо. Физическое тело имеет одну или несколько форм столкновения, позволяющих объектам сталкиваться друг с другом.

A car approximation using one and several shapes

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

Objects with shapes also fall down under gravity, bounce off static surfaces, or slide along them. Sliding and bouncing are determined by restitution and friction coefficients included in the list of shape parameters. A body without a single shape assigned behaves as a dummy body that can be connected to other bodies using joints, but does not collide and is immune to gravity. Объекты с формой также падают под действием силы тяжести, отскакивают от статических поверхностей или скользят по ним. Скольжение и подпрыгивание определяются коэффициентами восстановления и трения, включенными в список параметров формы. Тело, которому не присвоена единственная форма, ведет себя как фиктивное тело , которое может быть соединено с другими телами с помощью суставов, но не сталкивается и невосприимчиво к гравитации.

JointСовместное#

In virtual worlds, like in the real world, we would like to have complex objects consisting of several interconnected parts (for example, a robotic arm or a car). That's exactly what the joints are used for. В виртуальных мирах, как и в реальном мире, мы хотели бы иметь сложные объекты, состоящие из нескольких взаимосвязанных частей (например, манипулятор или автомобиль). Именно для этого и используются суставы.

A joint connecting two rigid bodies

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

A joint connects two rigid bodies and represents certain constraints i.e. it restricts the movement of connected bodies relative to each other. When the force applied to a joint is too much, the joint breaks. The implementation of destructible joints includes the limits of linear and angular motion, so if a force exceeds these limits, the joint is broken. There are several types of joints: fixed, hinge, ball, prismatic, cylindrical, suspension, wheel, path. Соединение соединяет два твердых тела и представляет определенные ограничения, то есть ограничивает движение связанных тел относительно друг друга. Когда сила, приложенная к суставу, слишком велика, сустав ломается. Реализация разрушаемых соединений включает пределы линейного и углового движения, поэтому, если сила превышает эти пределы, соединение разрушается. Есть несколько типов стыков: fixed, hinge, ball, prismatic, cylindrical, suspension, wheel, path.

When using joints, it is very important to ensure mass balance — avoid connection of too heavy bodies to light ones, otherwise the system may become unstable. As mentioned before, physics simulation uses approximate calculations, therefore, if the difference of mass between two connected bodies is significant, accumulation of errors and precision issues lead to instability of the result. При использовании шарниров очень важно соблюдать баланс масс - избегать соединения слишком тяжелых тел с легкими, иначе система может стать нестабильной. Как упоминалось ранее, при физическом моделировании используются приблизительные расчеты, поэтому, если разница масс между двумя соединенными телами значительна, накопление ошибок и проблем с точностью приведет к нестабильности результата.

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 кг для каждого колеса, чтобы обеспечить реалистичное поведение.

Collision and Intersection DetectionОбнаружение столкновений и пересечений#

To restrict interpenetration of solid bodies, prevent moving through walls, and make things look more natural and familiar to the eye, the collision detection is used. Чтобы ограничить взаимопроникновение твердых тел, предотвратить перемещение сквозь стены и сделать вещи более естественными и привычными для глаз, используется обнаружение столкновений .

There are two types of collision detection implemented in Unigine: В Unigine реализовано два типа обнаружения столкновений:

  • Discrete collision detection is performed in certain intervals of time and each frame is treated separately from others. In general, discretization improves performance. However, when a project framerate is already low, a small fast-moving object is likely to teleport from one point to another instead of moving there smoothly, and a collision will not be detected. Дискретное обнаружение столкновений выполняется через определенные промежутки времени, и каждый кадр обрабатывается отдельно от других. В целом дискретизация улучшает производительность. Однако, когда частота кадров проекта уже низкая, небольшой быстро движущийся объект, скорее всего, телепортируется из одной точки в другую вместо того, чтобы плавно перемещаться туда, и столкновение не будет обнаружено.
  • Continuous collision detection does not suffer this problem as the moving body is extruded along its trajectory (between two adjacent frames). If something gets into this volume and a collision is detected, the body is taken back in time to correct the collision reaction.
    Примечание
    Continuous collision detection is available for sphere and capsule shapes only.Continuous collision detection is available for sphere and capsule shapes only.
    Continuous collision detection is available for sphere and capsule shapes only.
    Непрерывное обнаружение столкновений не сталкивается с этой проблемой, поскольку движущееся тело выдавливается по своей траектории (между двумя соседними кадрами). Если что-то попадает в этот объем и обнаруживается столкновение, тело отправляется назад во времени, чтобы исправить реакцию на столкновение.
    Примечание
    Continuous collision detection is available for sphere and capsule shapes only. Непрерывное обнаружение столкновений доступно только для форм сфера и капсула .

Discrete and continuous collision detection

Discrete (a) and continuous (b) collision detection Дискретное (a) и непрерывное (b) обнаружение столкновений

Collision detection is a very expensive operation, and since our scene may have hundreds of objects, a lot of effort is put into optimization. Обнаружение столкновений - очень дорогостоящая операция, и поскольку наша сцена может содержать сотни объектов, много усилий вкладывается в оптимизацию.

  • The first parameter contributing to the cost is collision shape complexity. As a rule, most 3D objects are represented by a complex and detailed visible mesh and an invisible simplified shape used by a physics engine for collision detection. Types of shapes available are listed above.
    Примечание
    To reduce computational load it is strongly recommended to use simple collision shapes instead of complex ones wherever possible.To reduce computational load it is strongly recommended to use simple collision shapes instead of complex ones wherever possible.
    To reduce computational load it is strongly recommended to use simple collision shapes instead of complex ones wherever possible.
    Первый параметр, влияющий на стоимость, - сложность формы столкновения. Как правило, большинство трехмерных объектов представлено сложной и подробной видимой сеткой и невидимой упрощенной формой shape , используемой физическим движком для обнаружения столкновений. Доступные типы фигур перечислены выше .
    Примечание
    To reduce computational load it is strongly recommended to use simple collision shapes instead of complex ones wherever possible. Чтобы уменьшить вычислительную нагрузку, настоятельно рекомендуется по возможности использовать простые формы столкновения вместо сложных.
  • The second parameter is a number of checks to be performed — the worst case would be all-against-all. To exclude unnecessary checks (e.g. two objects hardly collide if they are far from each other) the scene is to be split into sections. Второй параметр - это количество проверок, которые необходимо выполнить - в худшем случае все будет против всех. Чтобы исключить ненужные проверки (например, два объекта вряд ли столкнутся, если они находятся далеко друг от друга), сцена должна быть разбита на секции.

There is an important step which follows collision detection — collision response, or the result of collision (e.g. two balls bounce off each other). Friction, restitution, and other parameters are taken into account in calculation of the collision response. За обнаружением столкновения следует важный шаг - реакция на столкновение или результат столкновения (например, два шара отскакивают друг от друга). Friction , restitution и другие параметры учитываются при расчете реакции на столкновение.

If some surfaces of an object participate in collisions, and others don't, collision detection can be enabled on a per-surface basis. For example, you can disable collision detection for a dashboard inside a cockpit, as it is covered by other surfaces. Если некоторые поверхности объекта участвуют в столкновениях, а другие - нет, обнаружение столкновений можно включить для каждой поверхности. Например, вы можете отключить обнаружение столкновений для приборной панели внутри кабины, так как она закрыта другими поверхностями.

Примечание
Масштабирование сеток, участвующих в обнаружении столкновений, не поддерживается.

Intersection detection lies at the heart of collision detection, but is a particular case of ray intersection (ray casting) that serves slightly different purposes. Calculation of the intersection between a ray cast from a certain point in a certain direction and a surface is fast and inexpensive and therefore sometimes can be used instead of computing a collision. For example, calculation of collisions of car wheels with the ground takes time and decreases framerate. In this case we can use intersection of rays cast from the bottom of the car with the ground instead of precise collision detection using collision shapes, thus reducing computational costs and increasing performance. Обнаружение пересечения лежит в основе обнаружения столкновений, но представляет собой частный случай пересечения лучей (ray casting), который служит немного другим целям. Вычисление пересечения луча, направленного из определенной точки в определенном направлении, и поверхности выполняется быстро и недорого, поэтому иногда его можно использовать вместо вычисления столкновения. Например, расчет столкновений колес с землей требует времени и снижает частоту кадров. В этом случае мы можем использовать пересечение лучей, падающих из днища автомобиля с землей, вместо точного обнаружения столкновений с использованием форм столкновения, что снижает вычислительные затраты и увеличивает производительность.

Ray-box intersection

Ray-box intersection Пересечение лучевого бокса

To make collision and intersection detection flexible and selective, and to reduce calculation costs, the mechanism of bit masking is used. For example, we have an object that does not participate in interactions with others, but we want it to lie on the ground. Matching the collision bit masks of this object and the ground (at least one bit in the masks should match) provides the necessary effect. One object can participate in several collision and intersection checks as only one bit in the mask is required to match for a pair of objects. Чтобы сделать обнаружение столкновений и пересечений гибким и выборочным, а также снизить затраты на вычисления, используется механизм битового маскирования . Например, у нас есть объект, который не участвует во взаимодействии с другими, но мы хотим, чтобы он лежал на земле. Соответствие битовых масок столкновения этого объекта и земли (хотя бы один бит в масках должен совпадать) дает необходимый эффект. Один объект может участвовать в нескольких проверках столкновений и пересечений, поскольку для сопоставления пары объектов требуется только один бит в маске.

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

Simulation of physics is performed in a looped sequence of the following stages on a per-frame basis: Моделирование физики выполняется в циклической последовательности следующих этапов покадрово:

Physics simulation loop

Physics simulation loop Цикл физического моделирования

Physics in UNIGINE is simulated in the multi-threaded mode, when some operations are performed in parallel. Физика в UNIGINE моделируется в многопоточном режиме , когда некоторые операции выполняются параллельно.

Physics is simulated with its own fixed FPS, which does not depend on the rendering framerate: a variable FPS cannot be used here because it makes calculation results unstable. Физика моделируется со своим собственным фиксированным FPS , который не зависит от частоты кадров рендеринга: здесь нельзя использовать переменную FPS, потому что это делает результаты вычислений нестабильными.

Calculation of physics for all dynamic objects on the scene takes too much time. To ensure a consistent framerate and exclude unnecessary calculations, some optimization approaches are used: Расчет физики для всех динамических объектов на сцене занимает слишком много времени. Чтобы обеспечить постоянную частоту кадров и исключить ненужные вычисления, используются некоторые подходы к оптимизации:

  • When a body is moving slower than a specified minimum linear or angular velocity for a specified period (freeze frames), it is assumed that it has come to a halt. During this period of inactivity, there is actually no need to simulate it. If this happens, the object remains in a resting state until it is affected by another object or force. Therefore, such object is excluded from all steps of the simulation except collision detection. This state is called freezing and it allows to save a great deal of computational resources.

    Frozen blue and unfrozen red boxes: the impulse applied to the pyramid of boxes unfroze all but oneFrozen blue and unfrozen red boxes: the impulse applied to the pyramid of boxes unfroze all but one
    Frozen blue and unfrozen red boxes: the impulse applied to the pyramid of boxes unfroze all but one
    Когда тело движется медленнее, чем указанная минимальная линейная или угловая скорость в течение определенного периода ( стоп-кадры ), предполагается, что оно останавливаться. Во время этого периода бездействия фактически нет необходимости моделировать его. Если это происходит, объект остается в состоянии покоя, пока на него не воздействует другой объект или сила. Следовательно, такой объект исключается из всех этапов моделирования, кроме обнаружения столкновений . Это состояние называется замораживанием и позволяет сэкономить много вычислительных ресурсов.

    Frozen blue and unfrozen red boxes: the impulse applied to the pyramid of boxes unfroze all but one Замороженные синие и незамороженные красные коробки: импульс, приложенный к пирамиде коробок, разморозит все, кроме одного
  • If interacting objects are far away from the viewer, they do not make a noticeable contribution to the whole image and thus can be neglected. The Simulation distance setting specifies the distance from the viewer when physical interactions are no longer calculated. Если взаимодействующие объекты находятся далеко от зрителя, они не вносят заметного вклада в изображение в целом, поэтому ими можно пренебречь. Параметр Расстояние моделирования определяет расстояние от зрителя, когда физические взаимодействия больше не рассчитываются.

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

Global physics settings (FPS, gravity, simulation distance, freeze frames and velocities, penetration factor, penetration tolerance) can be accessed via the Physics settings panel in the Editor. Глобальные настройки физики (FPS, гравитация, расстояние моделирования, стоп-кадры и скорости, коэффициент проникновения, допуск проникновения) доступны через панель Physics settings в Editor .

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