Оптимизация физики
Computation of physical interactions can be very demanding. There are optimization techniques providing high performance and overall stability for your interactive projects. Расчет физических взаимодействий может быть очень сложным. Существуют методы оптимизации, обеспечивающие высокую производительность и общую стабильность ваших интерактивных проектов.
Common SettingsОбщие настройки#
Keep the global physics settings at a reasonable demanding level. Поддерживайте глобальные настройки физики на разумном уровне.
-
Specify the Distance from the camera, from which physical interactions are not calculated. If the distance between the camera and the physics-based node exceeds this limit, the node freezes and its physical calculations are skipped until the node gets closer to the camera.Укажите расстояние от камеры, от которого не рассчитываются физические взаимодействия. Если расстояние между камерой и физическим узлом превышает этот предел, узел «застывает» и его физические вычисления пропускаются до тех пор, пока узел не приблизится к камере.
Cloth simulation halts starting from the specified distance from the camera Имитация ткани останавливается, начиная с указанного расстояния от камеры
- Using the Iterations parameter may increase stability, but can also result in a higher load. A high number of iterations may lead to noticeable lags as very time-consuming calculations are automatically skipped. One physics iteration is quite enough for simple scenes. Использование параметра Iterations может повысить стабильность, но также может привести к увеличению нагрузки. Большое количество итераций может привести к заметным задержкам, так как очень трудоемкие вычисления автоматически пропускаются. Для простых сцен вполне достаточно одной итерации физики.
- Adjust the time Budget for Physics simulation. Настройте бюджет времени для симуляции физики.
Collision Detection OptimizationОптимизация обнаружения столкновений#
Filtering InteractionsФильтрация взаимодействий#
It is very unlikely that each physics-based object in your project will interact with all other objects. Most probably, objects can be divided into groups dedicated to certain tasks. Очень маловероятно, что каждый физический объект в вашем проекте будет взаимодействовать со всеми другими объектами. Скорее всего, объекты можно разделить на группы, посвященные определенным задачам.
If you have multiple objects that take part in physical simulation, divide the ones that are hardly going to interact with each other, into different "groups" by using the Bit Masking mechanism. Если у вас есть несколько объектов, которые участвуют в физическом моделировании, разделите те, которые вряд ли будут взаимодействовать друг с другом, на разные «группы» с помощью механизма Bit Masking .
Limiting CollisionsОграничение столкновений#
Set matching Collision Masks for those particular shapes, surfaces, and bodies that are expected to collide. If the masks do not match, shapes and bodies will simply ignore each other by going through. Установите соответствующие маски Collision для тех конкретных коллизионных форм (shapes), поверхностей (surface) и тел (body), которые, как ожидается, будут сталкиваться. Если маски не совпадают, фигуры и тела просто игнорируют друг друга, проходя сквозь них.
Collisions are calculated for a plane and a sphere while a box is ignored due to unmatching Collision Masks Столкновения рассчитываются для плоскости и сферы, а прямоугольник игнорируется из-за несоответствия масок Collision
|
The Collision Mask of the sphere's physical shape Маска Collision физической формы сферы
|
The Collision Mask of the box's physical shape Маска Collision физической формы коробки
|
The Collision Mask of the plane's surface Маска Collision поверхности плоскости
|
The Collision Mask of the ground's surface Маска Collision поверхности земли
|
In Unigine, you can set up filtering accurately by using the Exclusion Mask. This mask allows ignoring shapes with the matching exclusion masks regardless of their Collision Masks. В Unigine вы можете точно настроить фильтрацию с помощью маски исключения . Эта маска позволяет игнорировать фигуры с соответствующими масками исключения независимо от их масок столкновений .
Surfaces that are not intended for physical interactions should have the Collision flag disabled. For example, a dashboard inside a cockpit would never take part in collision detection on the outside. Поверхности, которые не предназначены для физического взаимодействия, должны иметь отключенный флаг Collision. Например, приборная панель внутри кабины никогда не будет участвовать в обнаружении столкновений снаружи.
Avoiding detection of undesired and unnecessary collisions is a basic way to reduce the amount of physical calculations. Предотвращение обнаружения нежелательных и ненужных столкновений - основной способ уменьшить количество физических вычислений.
Filtering Physical EffectsФильтрация физических эффектов#
Specify certain physicals that should affect only corresponding bodies by using the Physical Masks the same way as for collisions. On the image below, a Physical Wind object affects a cloth banner but not a sphere. Укажите определенные физические узлы , которые должны влиять только на соответствующие тела, используя Physical Masks так же, как и для столкновений. На изображении ниже объект Physical Wind влияет на флаг, но не на сферу.
A physical wind affects a cloth but not a sphere Физический ветер действует на ткань, но не на сферу |
Physical mask of the cloth banner Physical маска тканевого баннера
|
Physical mask of the sphere Physical маска сферы
|
Physical mask of the Physical Wind object Physical-маска объекта Physical Wind
|
Intersection MaskМаска пересечения#
Intersection is a generic point of a specified area (or line) and an object. Calculation of intersection between a ray cast and a surface is fast and inexpensive and therefore sometimes can be used instead of computing collision. For example, calculation of collisions of car wheels with the ground can be simplified by using intersections. Пересечение - это общая точка указанной области (или линии) и объекта. Нахождение пересечения между лучом и поверхностью выполняется быстро, поэтому иногда может использоваться вместо обнаружения столкновения. Например, расчет коллизий автомобильных колес с землей можно упростить, используя пересечения.
Although it is a programmatic approach only, it requires Intersection Masks to be set for filtering purposes. Хотя это только программный подход, он требует установки Intersection Masks для целей фильтрации.
Both physical shapes and surfaces have intersection masks. И физические формы , и поверхности имеют маски пересечения.
Reducing Colliders ComplexityУпрощение геометрии коллайдеров#
As a rule, most 3D objects should be represented by a complex and detailed visible mesh and an invisible simplified shape used by a physics engine for collision detection (collider). Как правило, большинство 3D-объектов должны быть представлены сложной и подробной видимой сеткой и невидимой упрощенной формой, используемой физическим движком для обнаружения столкновений ( коллайдер ).
Detailed visible mesh Детализированная видимая сетка
|
Invisible physical representation by using simplified shapes Невидимое физическое представление с использованием упрощенных форм
|
Using Simpler ShapesИспользование более простых фигур#
Physical shapes consisting of simple primitives make collision calculations easier while keeping performance high and accuracy acceptable. Therefore, it is recommended to approximate geometry with simple primitives (Sphere, Capsule, Cylinder, Box), which are faster and less memory demanding. Физические формы , состоящие из простых примитивов, упрощают расчеты столкновений, сохраняя при этом высокую производительность и приемлемую точность. Поэтому рекомендуется аппроксимировать геометрию простыми примитивами ( Sphere , Capsule , Cylinder , Box ), которые работают быстрее и требуют меньше памяти.
Complex shapes, such as Convex Hull and a set of autogenerated convex hulls, should be selected for representing complex and composite geometry when simple shapes don't allow achieving the desired goals. Сложные формы, такие как Convex Hull и набор автоматически сгенерированных выпуклых корпусов , должны быть выбраны для представления сложной и составной геометрии, когда простые формы не позволяют достичь желаемые цели.
At the same time you should keep the number of shapes as low as possible in order to avoid heavy calculations leading to the performance drop. Remember that a shape doesn't have to duplicate the mesh it approximates. Even though primitives are not precise, in most cases they provide acceptable results. В то же время вы должны сохранять количество коллизионных форм как можно ниже , чтобы избежать тяжелых вычислений, ведущих к падению производительности. Помните, что фигура не должна дублировать сетку, которую она приближает. Хотя примитивы неточны, в большинстве случаев они дают приемлемые результаты.
Using Simpler GeometryИспользование более простой геометрии#
The simpler geometry is used for surface collisions detection, the more performance will be gained. Более простая геометрия используется для обнаружения столкновений поверхностей , тем выше будет производительность.
If a mesh representing a physical obstacle has several levels of detail (LODs), the least detailed one is the most preferable for collision and intersection detection. Enable the Collision and Intersection options for this LOD and disable them for the other ones. Если сетка, представляющая физическое препятствие, имеет несколько уровней детализации (LOD), наименее подробный из них является наиболее предпочтительным для обнаружения столкновений и пересечений. Включите параметры Collision и Intersection для этого LOD и отключите их для других.
Approximating collision shapes by using primitives is also a good practice. You can apply the following approach: Аппроксимация форм столкновений с помощью примитивов также является хорошей практикой. Вы можете применить следующий подход:
-
Ensure that the original node is not a Collider — check that Collision flag is disabled for its surfaces, bodies, and shapes. Since now it is not taken into account by collision detection. Убедитесь, что исходный узел не является коллайдером - убедитесь, что флаг Collision отключен для его поверхностей, тел и форм. Поскольку теперь это не учитывается при обнаружении столкновений.
-
Add a cylinder object to the scene by choosing Create -> Primitive -> Cylinder in the Menu Bar and cover the original mesh with the primitive. Добавьте в сцену цилиндрический объект, выбрав Create -> Primitive -> Cylinder в строке меню, и закройте исходную сетку примитивом.
- Make sure that the Collision option of the surface is enabled for the primitive node. Убедитесь, что опция поверхности Collision включена для примитива.
-
Hide the visual representation of the primitive's surface. You can do it either by clearing its Viewport and Shadow masks or simply by setting its Max Visibility parameter to the negative infinity (-inf) — this ensures that the surface is not visible at any distance. Скрыть визуальное представление поверхности примитива. Вы можете сделать это либо очистив его маски Viewport и Shadow, либо просто установив его параметр Max Visibility на отрицательную бесконечность (-inf) - это гарантирует, что поверхность не будет видна на любом расстоянии.
Now the detailed mesh provides only visual representation, while physical interactions are calculated for the primitive cylinder. Теперь детальная сетка обеспечивает только визуальное представление, в то время как физические взаимодействия рассчитываются для примитивного цилиндра.
Collision Detection ApproachПодход к обнаружению столкновений#
Continuous Collision Detection is a very demanding operation, therefore, it is recommended to use this approach only for fast-moving objects and objects requiring precise calculations. Непрерывное обнаружение столкновений - достаточно дорогостоящая операция, поэтому рекомендуется использовать этот подход только для быстро движущихся объектов и объектов, требующих точных вычислений.
In most cases, Discrete Collision Detection would be enough. For this purpose, select a shape and uncheck the Continuous flag for it. В большинстве случаев дискретного обнаружения столкновений будет достаточно. Для этого выберите фигуру и снимите для нее флажок Continuous.
Optimizing Physical BodiesОптимизация физических тел#
FreezingЗастывание#
It is recommended to enable Freezing to all Rigid, Ragdoll, and Fracturebodies. This allows saving a great deal of computational resources by skipping physical calculations of immobile objects until they are affected by any force or object. Рекомендуется включить Freezing для всех тел типа Rigid, Ragdoll и Fracture. Это позволяет сэкономить много вычислительных ресурсов, пропуская физические вычисления неподвижных объектов до тех пор, пока на них не воздействует какая-либо сила или объект.
To enable freezing, perform the following steps: Чтобы включить застывание, выполните следующие действия:
- Enable the Freezable flag for all types of physical bodies listed above. Включите флаг Freezable для всех типов физических тел, перечисленных выше.
- Set appropriate values of the Frozen Linear Velocity and Frozen Angular Velocity parameters for each physical body or adjust the global parameters. These global freezing thresholds are compared to the ones set for each body, and the highest value is chosen to freeze the body.Установите соответствующие значенияFrozen Linear Velocityа такжеFrozen Angular Velocityпараметры для каждого физического тела или настройте глобальные параметры . Эти глобальные пороговые значения застывания сравниваются с порогами, установленными для каждого тела, и выбирается максимальное значение для застывания тела.
- Adjust the number of Frozen Frames. The lower the value, the faster objects get frozen. Отрегулируйте количество Frozen Frames. Чем ниже значение, тем быстрее объекты застывают.
FracturingРазрушаемые тела#
Although the fracture body is a relatively inexpensive type, in case of large number of fracture pieces, the impact on performance may become significant. To avoid performance drops, the following tips can be used: Не смотря на то, что разрушаемое тело (fracture) является относительно недорогим в плане вычислений, в случае большого количества обломков его влияние на производительность может стать значительным. Чтобы избежать падения производительности, можно воспользоваться следующими советами:
- Use the Volume Threshold parameter to reduce the number of fracture pieces. Используйте параметр Volume Threshold, чтобы уменьшить количество обломков.
- Remove the pieces of a fractured body from the scene. Уберите обломки сломанного тела со сцены.
A code-based example illustrating how to remove (fade with the time) the fracture pieces from the scene can be found in the Physics section of the UnigineScript samples. Пример на основе кода, иллюстрирующий, как удалить (со временем исчезнуть) фрагменты трещин со сцены, можно найти в разделе Physics примеров UnigineScript .