This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Основы
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
VR Development
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Физика

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 весьма ограничен; однако в ряде случаев это упрощает работу программистов и дизайнеров. Вот список случаев, когда лучше использовать встроенную физику, а не заранее заданные через код условия или скелетную анимацию:

  • Collision detection (prevention of moving through walls, interpenetration of solid bodies, etc.)обнаружение столкновений (предотвращение прохождения сквозь стены, взаимопроникновения твердых тел и т. д.);
  • Simulation of perfectly elastic collisions (redistribution of kinetic energy)моделирование идеально упругих столкновений (перераспределение кинетической энергии);
  • Simulation of various joints, motors, and springsмоделирование различных сочленений, двигателей и пружин;
  • Simulation of basic 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моделирование деформируемой ткани и веревок;
  • Rag doll simulationсимуляция RagDoll.

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Меш и скелет

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.Первый вариант использования — моделирование деформации объекта в результате неупругого столкновения. Встроенная физика не реализует моделирование неупругих столкновений. Однако мы можем обнаружить столкновение и затем изменить меш деформированного объекта через скрипт (в 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" (форма — объем в пространстве, занимаемом телом). Для соединения тел и ограничения их движения относительно друг друга используются "joint" (сочленения). На рисунке ниже показаны отношения между этими объектами.

Отношения между сущностями

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

BodyТело (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: 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Форма (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Аппроксимация автомобиля с использованием одной и нескольких форм

Примечание
The maximum number of collision shapes for one body is limited to 32768.Максимальное количество коллизионных форм для одного тела - 32768.

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.Кроме того, объекты с формой падают под действием силы тяжести, отскакивают от статических поверхностей или скользят по ним. Скольжение и подпрыгивание определяются коэффициентами восстановления и трения, включенными в список параметров формы. Тело, которому не присвоено ни одной формы, ведет себя как фиктивное тело (dummy), которое можно соединять с другими телами с помощью сочленений, но оно не участвует в столкновениях и невосприимчиво к гравитации.

JointСочленение (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 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.Непрерывное обнаружение коллизий доступно только для форм сфера и капсула.

Дискретное и непрерывное обнаружение коллизий

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.Чтобы уменьшить вычислительную нагрузку, настоятельно рекомендуется по возможности использовать простые коллизионные формы вместо сложных.
  • 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.За обнаружением коллизии следует важный шаг — реакция на столкновение или результат столкновения (например, два шара отскакивают друг от друга). При расчете реакции на столкновение учитываются трение, упругое восстановление и другие параметры.

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Пересечение луча с кубом

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 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 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 в редакторе.

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