11. Shapes
Try out the BodiesAndShapes
level, included in the Tutorial Hallways Demo Project
11.1. Primitive Shapes
The primitive shapes: Box, Sphere, Cylinder and Capsule are Shapes that offer good simulation performance, making them a good choice as collision shapes.
11.2. Trimesh Shape
A Trimesh Shape is a collision Shape represented by a collection of triangles. The triangles are read from an Unreal Engine Static Mesh, either via a Static Mesh Component or by referencing a Static Mesh asset.
On Linux it is currently required to enable General Settings > Advanced > Allow CPU Access on the Static Mesh asset for it to be usable with a Trimesh Shape in cooked builds.
11.3. Collision Groups
Collision Groups can be used to disable collision between specific Shapes. Doing this can increase the performance of the physics engine since no collision detection needs to be done for those Shapes.
Collision Groups are assigned to Shapes and disabling collisions between specific groups are done using the Collision Group Disabler
Component.
A common usage is using Collision Groups to disable self-collision between Shapes belonging to the same model that are known to never collide with each other.
Below is an example of using Collision Groups to disable collision between the tire Shapes and the rear body Shape of a wheel loader model. By doing this, no broad phase collision detection needs to be done by the physics engine for those Shapes.
First, we add a Collision Group “Tire” to the tire Shape.
Notice that a Collision Group can be added to multiple Shapes, here we would likely want to add the “Tire” group to all tire Shapes. Next, we add a Collision Group “RearBody” to the rear body Shape.
At this point, we have added Collision Groups to both the tire and rear body Shapes, but they will still be able to collide with each other.
We need to tell AGX Dynamics that we want to disable collision between these Collision Groups.
This is done using the Collision Group Disabler
:
First, we select the group pairs we want to disable collision for (1).
Next, we press the Disable Collision
button (2).
And finally, we can see that the two groups show up in the list of disabled Collision Groups.
As long as the Collision Group Disabler
Component is in the Level once we press Play, the Collision Group Disabler
will automatically register their disabled Collision Groups with AGX Dynamics.
Having multiple Collision Group Disabler
Components in a level is supported, but disabling the same Collision Group pars in multiple Collision Group Disabler
Components should be avoided.
11.4. Auto-fit
Auto-fit is a feature that automatically positions and resizes a Shape to fit an Unreal Static Mesh as closely as possible. This is useful for example when adding primitive collision Shapes to Unreal meshes. The figure below shows a typical work-flow.
Add a primitive Shape as a child or parent to an Unreal Static Mesh.
In the Details panel, set
Mesh Location
under theAGX Shape Auto-fit
category according to where the Static Mesh is relative to the Shape.Press the “Auto-fit” button. The Shape will change its size and transform to fit the Mesh.
In the
Rendering
category in the Details panel of the Shape, make the Shape invisible.
Auto-fit can also be done to several Static Meshes by having them as children to the Shape and selecting All Children
as the Mesh Location
.
Auto-fit is currently supported for Box, Cylinder and Capsule.
11.5. Surface Velocity
The surface velocity property is used to add relative velocity to a pair of rigid bodies that are in contact. This can, for example, be used to create a simple model of a conveyor belt, or be used as a propulsion system for a vehicle. As the name suggest, surface velocity is a velocity expressed as a vector in the unit cm/s. It is given in the Shape’s local coordinate system and is the velocity given to the other object. So for a conveyor it would point in the direction material should move, and on a vehicle it should point in the vehicle’s backward direction since when driving forward the ground should move backwards relative to the vehicle.
The surface velocity can be set either from the Details panel when a Shape Component is selected, or using the Set Surface Velocity function.
11.6. Additional Unreal Collisions
Note
This feature makes primitive AGX Shapes “visible” to the Unreal physics engine, but not the other way around, i.e. AGX Dynamics is not affected by Unreals’ physics. No guarantee is given regarding the dynamic bahavior between AGX Shapes and Unreal physics objects. It is recommended to match the Unreal framerate and the AGX Dynamics time step when utilizing this, see Frame Jittering for instructions.
Each primitive AGX Shape can be configured to carry additional collision information, so that Unreals’ built in physics engine “sees” them. This can be useful to enable e.g. LineTrace against primitive AGX Shapes (enabled by default), or let an Unreal body collide with AGX Shapes, for example to use as a blocking volume.
This can be controlled for all AGX Shapes in Plugin Settings, or on individual AGX Shapes from the Details Panel.