Physics Tools
The dynamic model should have a collision mesh assigned to its bones. The type of collision mesh and the presence or absence of joints are determined by the complexity of the model and tasks assigned to it.
Collision meshes of a dynamic object can belong to one of three types. The type of collision mesh for a particular object should be chosen depending on the intended use of the object.
Triangle mesh – detailed polygonal collision, may not be convex, also may have one-sided polygons. At the moment, collision meshes of this type can only be created in 3D modeling programs and imported into our editor (.dae format).
Objects with a triangle mesh collision type can only be static. This collision type will not work while an animation is playing.
Convex (closed polygonal shape) – this type of collision can either be created in the editor or imported via .dae.
Primitive – (parametric primitive) can be of several types: box, capsule, sphere. Collision meshes of this type are created in the editor.
There can be up to 32 convex or primitive collision shells per bone.
Import of Collision Meshes
Imported collision meshes can be of one of the following types:
Triangle mesh – one object of any shape, there can be one-sided polygons, N-gons.
Convex – one object, convex closed mesh.
Or a set of primitives (or convex hulls), up to 32 separate objects. It is better to use simple objects like spheres or boxes. In this case, they are more likely to be converted by the editor into parametric primitives.
Once the collision shell is assigned to a bone, it can have all standard transformations (such as translate, rotate, scale) performed on it.
When scaling with the Ctrl key held, the transformation occurs symmetrically in both directions along the selected axis relative to the local centre of the shell.
Collision shells of all types can be copied from bone to bone (Ctrl + C and Ctrl + V). The new shell replaces the previous one and, if necessary, can be moved to the proper place.
If more than one shell is assigned to one bone, the centre of mass of the entire bone ends up in the centre of the last edited shell (you can turn the display of local centres of mass on/off in the tool tab). If you need to place the centre of mass in a custom position, it is recommended to create (copy) an additional shell, move it to the desired place and then simply delete it. Any action on one of the collision shells (like transformations or change of any parameters) will drop the centre of mass of the bone into the centre of the last edited shell.
Model Editor Interface
Add primitive – creates a primitive (box by default) for the selected bone. This type of primitive can be changed in the property window. The position and scale can be adjusted using standard editing tools.
Remove primitive – deletes the selected primitive (delete key).
Calculate convex – creates a convex hull encompassing the maximum weight of the selected bone.
Calculate a convex from N bones – creates a convex hull based on the maximum weights of all selected bones, then asks which bone to assign the created convex hull to.
Load triangle mesh – allows you to load a triangle mesh created in a third-party package (.dae format).
Load convex – allows you to load one or more convex hulls and assign them to the selected bone (.dae format).
Export selected shapes – allows you to export the selected convex shapes (convex only).
Joint plain – creates a joint between any two physical bones (ignoring the hierarchy). Should be used in special cases only as it's quite easy to make a non-working system. Whereas for the vast majority of cases, you should use 'joint tree'.
Joint tree – creates a joint between two physical bones, the bones must be in one chain for the joint of this type to be created. In most cases, only 'joint tree' should be used.
Remove joint – removes joints (delete key).
Fix joints/fix shells – rarely needed but can be useful for very old models that the editor may not correctly understand.
Collision Shell Properties
Angular Damping – spin dampening.
Linear Damping – linear acceleration dampening.
Mass – object mass (a single value per physical bone).
Density – it’s important to understand whether an object will float without any cheats. If the density is less than 1000, the object floats.
Shape – the collision shell type as well as its position relative to the bone. And, if it is a primitive, then this will also include the primitive’s properties.
Simplify (checkbox) – determines whether the editor will simplify your convex hull into a primitive (if the form is similar). Simplification occurs when the model is saved.
You probably want to switch this off, if you make a collision shape for a barrel. The editor would otherwise likely simplify the convex hull representing the barrel's collision to a capsule which is not acceptable. If the capsule primitive has spherical bases, the barrel cannot stand.
Friction – collision shell friction. This should be set for each shell separately.
Dynamic – dynamic friction, the friction force between two contacting bodies moving relative to each other.
Static – static friction, the friction force between two contacting bodies that prevents their relative motion.
Restitution – determines the collision shell behavior right after the impact. If the value is 0, it stays in place. If the value is 1, it receives an impulse of equal strength but in the opposite direction.
Ragdolls and Joints
Ragdoll is a set of collision shapes that represent the shape and physical properties.
1. If the shape of an object should change under the influence of neither physical forces nor animation, one bone should be enough for its skeleton. If the object has more than one game material, you will need more than one bone. In this case, you need to use joints with all axes locked.
2. If an object should crumble into its component parts, then each independent part should be attached to a separate bone. The hierarchy of bones in the skeleton will determine the order of separation into the component parts. In the case of a physical contact, the bone (and all subsidiary bones) is separated from the rest of the skeleton and becomes a separate piece.
3. If the collision-form of your object can change under the influence of animation or physics, you need to use joints.
The very presence of joints in the skeleton determines that this set of bones should be considered as a single system, subject to general rules.
Joints are built from child to parent and determine the degrees of freedom allowed for the child.
If a part of the object moves only because of an animation, there must be a joint between the mobile and stationary parts. Without physical forces, say with a gate that opens and closes, you would need to make its collision move synchronously with the render model. The very presence of joints means that the object should move. In this case, because of an animation.
If a model or part of a model can move under the influence of physical forces, you should also use a joint. The properties of this joint will determine the degree and type of shell interactions.
Joint's Properties:
Linear motions – determines whether the subsidiary bone will move linearly along some axes relative to the parent bone.
There are the following possible options:
Locked – no movement along this axis.
Free – movement along this axis is allowed without restriction.
Limited – movement along this axis is allowed with restrictions.
Value – the distance by which the part is allowed to move.
Restitution – determines the behavior of the child when it reaches the limits of its allowed range (1 – bounces back, 0 – stops).
Spring – determines how much force must be applied to the child object for it to violate the allowed limit.
Damping – acceleration cancellation (larger value = faster braking).
Axis (XYZ) Motions – determines whether the child will rotate around any axis relative to the parent.
Locked – rotation is prohibited on this axis.
Free – rotation on this axis is allowed without restriction.
Limited – rotation on this axis is allowed with restrictions.
Value – the angle in degrees at which the rotation on a given axis is possible.
Restitution – determines the behavior of the child when it reaches the limits of the allowed range (1 – bounces back, 0 – stops).
Spring – determines how much force must be applied to the child object before it violates the allowed limit.
Damping – acceleration cancellation (larger value = faster braking).
The restriction along the Z-axis is presented in a slightly different way. In this case, the angles of forward and reverse rotation (- Z +) must be adjusted separately.
The “Child” Object
When you don't want an initial position of the child bone to be in the middle of the limit, you need to edit the position of the child-object (located in the hierarchy of the joint). The child-object determines the relative position of the child within the limit of the joint.
Assigning Game Materials
Assigning game materials is done in the Windows / Materials tab. Materials for dynamic objects are assigned to the physical bones (shell or a collection of shells assigned to one animation bone). A bone that has a physical representation in the editor (actor), can have its own game material.
"Import Physics Bones" will import/update all physical bones that can be assigned to unique materials. You must choose a physical bone to assign to the game material.
Exodus SDK © 2005-2023, 4A Games Limited. Developed by 4A Games®.
4A Games® is a registered trademark, and 4A Games Limited, Exodus SDK and their respective logos are trademarks of 4A Games Limited.
Published by Deep Silver. Deep Silver is a division of PLAION GmbH, Austria. Deep Silver and Plaion are registered trademarks of PLAION GmbH.
Metro Exodus is inspired by the internationally best-selling novels METRO 2033 and METRO 2034 by Dmitry Glukhovsky.
All other trademarks, logos and copyrights are property of their respective owners. All rights reserved.
By using this site, downloading or using the Exodus SDK or related content, you are agreeing to be bound by the terms of the End User License Agreement.