Modo dynamics provide a way to automatically animate and position elements in a scene. Dynamics allow items to be assigned with real-world physical attributes, such as weight, bounce and friction. Then, through a process called simulation, the assigned attributes are evaluated scene-wide, including the further effect of forces over the elements and their interactions with other dynamic elements (collisions). The resulting motion calculations are then cached and saved with the scene for Timeline playback and rendering purposes. Dynamically simulating motion in this way produces highly realistic results that would be very difficult, if not impossible, to generate otherwise.
The Modo dynamics system uses the same global evaluation engine as it does for particles, therefore a lot of the same workflows can be applied to both setups. Due to their deep integration inside Modo, they can also work together, with dynamic items affecting particles and particles affecting dynamic items. This overview page focuses on dynamics specifically, for more information on working with particles, see Particles and Simulations Overview.
Dynamics first requires a selected element to apply the settings to. While dynamics can be applied to any locator-type item, including cameras and lights, to the simulation engine these non-Mesh Items have no volume to calculate collisions. Therefore, any simulation should start with a Mesh Item. Another important consideration is the location of the center position relative to the geometry. The center location defines the rotation origin as well as the center of gravity for the object.
With the target mesh selected, assign the dynamic properties using the Dynamics controls toolbox found in the Setup interface. You can also access many of the same commands in the Dynamics menu of the menu bar. As with all animated elements, you should be working in Items selection mode when assigning and working with dynamic elements.
The basic workflow to designate an object as dynamic is to select the target element and assign a type of dynamic item to it. Click the appropriate button in the toolbox, such as Active Rigid Body (toolbox illustrated above). This assigns the item as dynamic and adds a new Property sub-tab called Dynamics to the Properties panel. Selecting this sub-tab gives you access to all the various dynamics settings. It also adds a new item to the scene, the Dynamics Solver item that defines the global dynamics settings, such as gravity, and stores the cached evaluations of the computed simulation.
The Dynamics toolbox provides a variety of options for assigning items as dynamic. When any item is tagged as dynamic, controls are added to the item's Properties panel under the Dynamics sub-tab. The attributes for each different option are actually the same controls, but with different base setting specific to the type of dynamic item chosen. All the various controls are covered in their respective page of the documentation.
An active rigid body is an inflexible, dynamic object that does not deform in any way, reacting to all manner of collisions, constraints, forces, and falloffs, as well as influencing other dynamic items through direct interaction. This setting is great for simulating all kinds of hard objects, like blocks, rocks, bowling pins, broken glass, ski poles; anything that is solid and has weight to it is a good candidate for the active rigid body setting. Active rigid bodies are entirely under the control of the evaluation engine during the course of the simulation and don't respond to keyframed animation. Additional control over active rigid bodies is achieved using Dynamics Forces and Constraints.
For best results, each individual object needs to be its own item layer. Multiple objects within one layer are treated as a single object, but depending on the shape they may produce unsatisfactory results. For Mesh Items, the center location relative to the geometry defines the rotation origin and also acts as the center of gravity for the weight calculations, so it is best to make sure it is located within the volume of the object. Any locator-type item can be tagged as Dynamic, but any non-Mesh Items, such as cameras and lights that have no volume to collide with, need to be connected to a constraint in order to keep them from flying away.
Compound rigid bodies let you attach a collection of separate, but touching items together, treating them as a single active rigid body. To do this, select all the various items and click the Compound Rigid Body button. Once designated, you can assign a Constraint Modifier that can hold the items together during a collision. If the Constriants Glue value is exceeded by an outside force during the simulation, it causes the affected parts of the compound to break off individually.
When assigning the Compound Rigid Body option, the dynamics package is added to only a single mesh (the lowest item in the Items list). The other associated meshes all derive their dynamics settings from the parent item, with the Mass value being equally distributed between all associated layers. Setting a negative 'Compound Glue' value causes the simulation to treat each Item as a separate Dynamic Body without having to make each one dynamic. The same requirements for 'active Rigid Bodies' apply to the individual items of the Compound body.
The Kinematic Rigid Body option is applied to animated collision objects; specifically to animated Mesh Items used for collision. Other Locator type items, such as cameras or lights cannot be used for collision shapes. Kinematic rigid bodies share the same properties as Static Rigid Bodies, meaning they are not affected by forces, falloffs or collisions from other objects, but they play any keyframed transform animations assigned to the item (not deformations). This is useful for objects that need to interact with other dynamic items in a controlled way, such as a continuously spinning cage in a lottery ball animation.
A static rigid body is strictly a non-moving collision shape. It doesn't respond to keyframed animation, constraints, forces or falloffs. If the item is animated, the animations are ignored during the simulation, with the object stopping at the first frame where it becomes a participant in the dynamic simulation.
The procedural shatter option is used to dynamically break apart a mesh, without needing to pre-shatter the object manually; you start with one mesh and end up with multiples, but those multiple pieces are represented by just the one procedural shatter item in the Items list, keeping things tidy. You can control how the object breaks apart, including how sub-meshes are treated, using the settings of the procedural shatter item. To apply, simply select the target item to shatter and click the Procedural Shatter button. The original item at that point becomes a proxy and can be hidden or disabled. Now when a simulation is run, the item is automatically broken apart based on any collisions occurring in the scene.
Dynamic curves allow you to animate curve-specific elements, having them react to gravity, collisions, pins, anchors and falloffs. Dynamics for curves can be assigned to both spline-type curves and the two-point polyline chains used for hair guides. Curves can be open or closed. The dynamics of the curve are based on collisions of the vertices that define the curve itself, acting as if they had zero volume. To create curves that have volume and width, use the combination of the Render Curves option of the Mesh Item properties, and the Use Render Radius option under the Dynamic Item's properties (enabled by default). Then you can specify a Curve Radius value to define the actual size for the simulated curve.
Dynamic curves differ from other dynamic items in that multiple, separate curve elements can all be contained within a single Mesh Item layer, but each reacts individually. For information on how to change this behavior, see Dynamic Item. In addition, the center position for the item's layer relative to the curves within the layer is irrelevant, having no effect on how the curves deform. Also, the Collision settings have no effect on curve elements as the collision shape is created automatically. Curves with volume are simulated by creating a virtual collision shape, a capsule, between each vertex of the curve.
NOTE: Any polygonal mesh elements within the same layer as the curves are ignored during the simulation.
Soft bodies are a good way to animate flexible items, such as curtains, flags, table cloths, or rubber tires. For the best results, soft bodies need some type of collision element or Anchor in order to keep them from flying away. The collision object could be a bar holding up a banner, or a table setting under a tablecloth. These collision items should be designated as any one of the rigid body dynamic types. Alternately anchors attach soft body elements to specific points on the rigid body mesh, fixing them in place. You can also use forces to interact with soft bodies; for example, you can assign wind or turbulence to add some additional realism to the soft body results.
Soft body elements can be open or enclosed Mesh Items, and do not require a specific center position. The shape of the resulting soft body is calculated by adding tiny virtual springs between vertices of the mesh. There are different settings for each type of spring; for Stiffness, Struct (Structure) and Sheer.
Since only the vertices of the soft body are calculated for collision, there may be cases where sharp or pointed areas of the colliding mesh show through. To correct this, increase the Margin value under Collision for the target object. For more information, see Dynamic Item.
The Make Anchors options is used to connect soft body items to rigid body items. For best results, the rigid body item should be a passive rigid body, to keep it from flying away. The Anchor option could be useful to connect a flag to a flagpole. In order for the anchor to work, follow this specific workflow:
1. | In Items mode, select the target soft body item and the target passive rigid body item. |
2. | With the items selected, change into the Vertices mode (press 1 on the keyboard) and select at least one vertex on the soft body item, and at least one more on the rigid body (selection order isn't important). |
3. | With the vertices selected, click Make Anchors in the Dynamics toolbox. |
The two items are now rigidly connected together with an additional anchor item added to the soft body.
To break the connection, simply delete the resulting anchor item. To make adjustments, remove the anchor and recreate it, following the above instructions.
Collision in dynamics is the calculations that restrict intersections between surfaces. For example, it is what allows a ball to bounce and roll down a staircase. Without it, the dynamic bodies simply pass through one another with no regard or knowledge of the opposing item. In the Dynamic sub-tab in the item's Properties panel are the settings that control the object and how it acts. The most important setting in this tab is in regards to collision, as it defines how the dynamics computations see the object.
By default, Modo assigns a collision type based on a best guess from the actual geometry in the item layer. For a flat polygon this is Plane or for a round object, like a ball, this is Sphere. However, sometimes Modo guesses wrong. The wrong collision shape can cause intersection errors and produce unsatisfactory results, so it's a good idea to check that the best collision shape is being assigned. In most cases, the best results are obtained using the simplest collision shape appropriate to the geometry. Collisions relating to soft bodies are only required when there are issues with the surface intersecting itself, which you can fix by enabling the Self Collision option.
TIP: To increase evaluation performance of rigid bodies, low resolution collision geometry can be created separate from the high resolution mesh to simplify calculations during the simulation. Once the dynamics are evaluated and cached, the low resolution collision objects can be set to Render-No and the high resolution object can be parented to the low res collision object for final rendering.
If dynamics were strictly limited to only calculating collisions between objects, it would very quickly become daunting to produce even modestly complex simulations. Depending on collisions exclusively to generate the mechanics of, say, a rotating drive shaft for a vehicle would no doubt introduce errors and be quite costly to calculate. Constraints are joints that connect two dynamic bodies together, producing much more accurate results than collision detection alone, with very little calculation overhead. Constraints come in a variety of types that cover almost any type of joint you need. You can also stack more than one constraint to produce an even more complex effect, such as combining a point constraint with a slide constraint to produce a swinging and sliding motion, much like riding suspended from a zip-line, a ride where the participant slides down a long, taut cable suspended between two posts.
In the real world, objects are constantly subject to numerous forces that affect their motion in subtle and not-so-subtle ways; wind, gravity, friction among others. Dynamics offers a variety of additional specific forces to produce even more realistic physical simulations. Gravity is the chief overall governing force, acting on all dynamic bodies globally. Because of this ubiquity, it is part of the Dynamics Solver item, affecting all items globally. Its default value is meant to simulate the same downward pull at full size (1:1 scale) as gravity in the real world. If a simulation isn't reacting as you might expect, the scene may not be modeled to real world size, as very large items react much differently under the same circumstances as very small items. You can scale their objects, or scale the simulation to match more closely the expected result. For more information on scaling the simulation, see Dynamics Solver.
Modo also offers seven additional force types that gives you further control of the simulation: Linear, Drag, Radial, Turbulence, Vortex, Wind and Curve Force. These are added as locator-typeitem layers in the Items list and, by default, affect dynamic items globally, just as the gravity value does, although this can be modified using the Schematic view. Each force has its own particular function which is covered fully in the Dynamics Forces topic.
Falloffs can be very useful in providing additional control over forces. For instance, if wind was affecting flower petals drifting lightly on the breeze, and the soft body petal items then landed inside of a box. To keep the ones inside the box from being affected by the wind a falloff would be used to eliminate the wind from inside the box, increasing the realism of the simulation.
Dynamics uses the same Falloffs used for other deformers in Modo. Deformation falloffs are meant to modulate the effects of forces on dynamic items within the area of influence of the falloff itself. Not to be confused with Modo modeling falloffs used for geometry creation and layout. Conceptually they are very similar, but instead of being applied as a function, Dynamics falloffs are added as a locator type item to the Items list where you can select them and modify their attributes and even animate them within the scene. In the item's properties, you can define an attenuation range that modulates the force it is applied to.
Unlike forces that affect items globally, falloffs must first be attached to the force item it is attenuating in order to produce a result. This can be done several ways. Generally, it is applied by selecting the target force item prior to adding the falloff, when using the Add Falloff button in the Dynamics toolbox. When applied to a soft body item, you can use the Deformers Viewport, and select the Soft Body Influence from the list. By right-clicking on the item to open the context menu, you can select the Add Override option and select one of the falloffs, automatically assigning it to the soft body. Additionally, you can use the Schematic viewport to connect the two, dragging and dropping both items into the viewport and connecting the output of the falloff item to the input of the force item. For more information on using the Schematic viewport, see Schematic Viewport.
Dynamic Replicators bring the worlds of dynamics, particles and Replicators together, allowing you to assign Mesh Items to a particle simulation to spray blasts of dynamic, colliding objects. There are two basic types of Dynamic Replicators - kinematic, which act only as animated collision objects (acting like replicated kinematic rigid bodies), but have no internal collision calculated between replicas, and dynamic which act as normal active rigid bodies, generated automatically by the particle simulation.
Replicators combined with a particle simulation can be used strictly for collision shapes, which can be useful when you need the replicated items to affect other non-replicator dynamic rigid body elements, but not be affected by inter-object collisions between replicas. The individual replicas would essentially be kinematic rigid bodies in how they react to other elements. They wouldn't be affected by forces, falloffs or other dynamics objects; they would simply have effect on regular active rigid bodies, similarly to force, causing them to react to the collisions.
1. | Create a Particle Simulation of some sort. You can use any of the various emitters available for this. |
2. | Next, add a Replicator in the Items list, in Add Items > Particles > Replicator. |
3. | Once added, designate the particle simulation as the Point Source in the Replicator Item's Properties panel, and the target Mesh Item (or a group of items) as the Prototype option. |
4. | Select the Replicator Item in the Items list and then in the Dynamics toolbox, click Kinematic Rigid Body to tag it as one. |
This adds a sub-tab to the Properties panel of the Replicator Item titled Dynamic Replicator, where the various dynamic attributes can be adjusted, such as the Collision Shape for the prototypes and their Bounce and Friction values.
Replicators can also be combined with a particle simulation to generate fully dynamic Mesh Items that collide and react to forces and falloffs. Any type of particle emitter can be designated as the particle source for a Replicators. Adding dynamics allows the replicas to act as individual active rigid body elements, created dynamically by the settings of the particle simulation.
To create a Dynamic Replicator, you need a particle simulation and a Replicator with the target mesh specified as the Prototype and the particle simulation specified as the Point Source. The workflow is the same as for the Kinematic Replicators above. Once properly assigned, make the Replicator dynamic: select the Replicator in the Items list, and in the Dynamics toolbox, click Active Rigid Body to tag it as one. This action adds a Dynamic Replicator item to the scene. This new item contains the dynamic attribute settings for the dynamic replicas, such as settings for the Collision Shape, Bounce, Friction and Density. Select the item in the Items list to display the attribute settings in the Properties panel.
One consideration to keep in mind when making Dynamic Replicators is that the replicated items should be generated from an emitter that is sized large enough to accommodate the volume of replicated Mesh Items without grossly intersecting, while also taking in to consideration the Emission Rate and Emission Speed values. Additionally the Dynamic Replicator Item has the option Time Until Collision, which delays the enforcement of collision detection on emitted Replicators that can also be used to eliminate any collision errors that may occur.
There are three buttons used when simulating both dynamics and particles, each with a unique purpose. The two left buttons provide continuous real-time simulation directly in the 3D Viewports, allowing you to adjust settings and move objects and see the results as the settings are changed. The Preview at Current Time button (hollow arrow) specifically plays the simulation at the current Timeline position, ignoring keyframed animation. the Preview Animation button (solid arrow) cycles through playing the Timeline with all keyframed animations. When you click either button, they change to Stop buttons which can then be pressed to stop the simulation playback.
The last button is the Cache Simulation button. Click this one to open the Evaluation dialog, where you enter the desired frame range and designate a Preroll value, a designated number of frames prior to the first frame where the simulation actually begins calculating. This is useful, for instance, when there needs to be a flow of particles at the Start Time. The main differences between the real-time playback controls and computing the simulation is that the Compute Simulation option fully calculates all Physics Rate (subframe) step values, especially important for collisions to properly evaluate intersections. The real-time controls always use a frame step of 1, which may not provide enough accuracy for fast or complex dynamic simulations. Once a simulation is cached, it is no longer deleted when a simulation preview is run, and can only be overwritten by computing a new simulation.
Animation in Modo applies only to items. Keyframes are always set while in Items mode with the modeling of objects done while at the component level, in the vertices, edges and polygons modes. Layers in the items list should be thought of as containers. In Items mode, you are editing the entire container, but while in the component modes, you are editing the contents of the container. Dynamics acts only at the item level, where each layer in the Items list is its own individual dynamic object. Therefore, if you wish to break apart a wall, for example, each brick needs to be its own individual item layer. You can easily set up stacks of bricks by simply creating the first brick item, and then assigning the Active Dynamic Body tag to make the brick dynamic. Next, apply the Array function in Items mode to stack subsequent bricks, each inheriting the dynamics of the master object. With the wall created, all it takes is an animated wrecking ball to topple the bricks to the ground, tagged as a Kinematic Rigid Body.
The weight of rigid body objects is dependent on the position of the item's center. The center point for an object doesn't only represent the center of rotation for the object; when using dynamics, it also represents the center of mass for the object. Dynamics assumes that the weight of an object is equally distributed around the center point, and objects move based on this assumption. If the center point is placed too far away from the item's actual center, or outside the volume of the object, odd behavior is sure to occur. You can see an object's center position by hovering over the 3D Viewport in question and pressing the O key. In the Visibility sub-tab, there is an option to show centers for selected items.
There are several ways to deal with a center that's been moved, the easiest is to select the item in Items mode and in the menu bar, click Edit > Center to Bounding Box > Center. This automatically moves the center point to the objects actual bounding box center (a bounding box is based on a model's overall extents). However, a more accurate option is to right-click over the item in the Items list and select Calculate the Center of Mass, and then use the match tools to move the center to the position of the resulting locator.
You cannot manually (by keyframes) animate active rigid bodies, however, sleeping objects can be animated, and are handed off to dynamics once they are awakened, a mode where dynamic items can be triggered by a specific event. For more information on sleep, see Dynamic Item. If the animated object requires rotations from a position other than the object's true center, modify the Pivot position and animate from there to maintain the proper center of mass.
The most frequent issue encountered when calculating a simulation is objects passing through one another (like when you are dropping chain links together to form a chain and they fall right through each other). While it can be caused by a multitude of issues, it is most often caused by the speed at which objects move. At one frame they are apart from each other, the next they pass right through one another. This means the default subframe calculations didn't have ample time to calculate the collisions of the objects. Even though we only see the result at the whole frame values, and a lot can happen between frames.
You can increase this sub-frame accuracy with the Physics Rate values found in the Open topic with navigation (properly calculating subframes for all keyframed items, as well). Doing so makes dynamics more accurate, however the additional calculations take longer to compute. Experiment with different values to find one that produces acceptable results with the least number of steps. Keep in mind that sub-frame steps are only calculated for cached simulations. The real-time options always only calculate per-frame, so for fast simulations, it may be necessary to cache the simulation each time to properly preview accurate results.
Dynamic simulations can be controlled nodally using the Schematic Viewport. Actually, in the background a node graph is being created as you add dynamic elements to a scene. It seems hidden until any of the dynamic elements are added to the Schematic viewport. As the dynamic elements are added one-by-one, you can see that they are already connected. Dynamics take advantage of the special Relationship connectors to define links between items. These connectors look like diamonds instead of circles. They represent bi-directional information flow between elements, unlike regular channel connections that are used to drive a channel's information from one item to another. It is useful to familiarize yourself with the Schematic viewport, as it allows advanced options to control and customize the dynamics simulation. For instance, you can connect a force node to an individual Mesh Item and it only affects that single mesh instead of applying itself globally.
In addition to Mesh Items, Instances can also be tagged as the various types of rigid bodies Active, Kinematic, and Static. While they can be tagged as Dynamic, due to their structure Static Mesh Items produce no collisions between other dynamic items.
Dynamics is based on Bullet Physics, an open source collision detection and rigid body dynamics library that is free for commercial use, under the ZLib license. Thank you to Erwin Coumans and the Bullet developers for their efforts and generosity.