Houdini 20.0 Dynamics

Rigid body dynamics

On this page

Overview

The Rigid Body solver simulates the motion and collisions of objects as if they were hard, solid objects (as opposed to other types of simulated objects such as fluids, cloth, and soft bodies). Rigid Body Dynamics is often abbreviated as RBD.

RBD objects can be active or passive. Active objects are affected by forces and collisions. Passive objects can be collided with by active objects, but don’t move, and are not affected by forces.

See how to switch between keyframe animation and simulation.

How to

  1. Model a geometry object containing the geometry you want for the rigid body.

  2. Select the object.

  3. On the Rigid Bodies tab of the shelf, click one of the tools below to automatically create the dynamics nodes to put the object under simulation control.

The tools on the Rigid Bodies shelf tab| let you create and constrain rigid body simulation objects.

RBD Object

Creates a rigid body dynamic object from a geometry object.

RBD Fractured Object

Creates a number of rigid body dynamic objects from a geometry object.

The individual RBD objects are created from name attributes you create beforehand in the geometry. You can either cut up the geometry manually, or use the Break on the Model shelf tab.

This tool is useful to simulate an object shattering, since it does not require much force to break the object apart.

Static Object

Creates a static rigid body object from a geometry object.

A static object participates affects other objects in the simulation (for example, other objects can bounce off it), but its motion is not controlled by the simulation – it does not bounce off other objects, or fall according to gravity, or move at all unless you animate it.

This is useful for creating rigid objects that are extremely heavy or should will not move in your simulation, such as a table on which other objects sit.

RBD Point Object

Creates a new simulation object at each point of a source geometry object, similarly to how the Copy surface node works.

This is useful for simulating a large collection of identical objects, such as a pile of cans in a grocery store or a forest of trees.

Ground Plane

Creates an infinite ground plane suitable for RBD, cloth, or wire simulations. The ground plane is a type of static rigid body (see Static Object above).

Terrain Object

Creates a terrain object from a geometry object. The terrain object is a type of static rigid body (see Static Object above).

Whereas the Ground Plane tool creates a perfectly flat static ground object at the origin, this tool lets you select a 3D surface (for example, a deformed grid representing terrain) and automatically turn it into a suitable static ground object.

Unlike the Ground Plane, which is infinite, the simulation object created by this tool is only as big as the original geometry.

Rigid body constraints

There are also several constraints you can use with rigid body objects. For more information see the following:

Choosing a solver type

The Rigid Body solver lets you choose between three different “engines” to do the actual solving, each with advantages and disadvantages.

You set the solver type using the Rigid Body solver’s Solver engine parameter. If you choose ODE or Bullet, each RBD Object has sub-tabs on the Collisions tab to set ODE and Bullet specific options (such as the collision shape for ODE).

(The Rigid Body Solver node Houdini creates when you use the shelf tools is an asset that encapsulates sub-solvers for each engine. Scenes created with old versions of Houdini may have the traditional Houdini solver node, which does not have an option to switch to a different solving engine.)

Engine Advantages Limitations
Bullet

This is the new default solver in Houdini 12. It is faster than the Houdini RBD solver and can handle large data sets.

Supports dynamic fracturing.

The Bullet solver does not have the option to distinguish resting impact in impact data.

Does not support scaling at the object level.

Houdini RBD

This was Houdini’s native rigid body collision solver, so it supports all of Houdini’s rigid body simulation features (forces, constraints, etc).

The most important advantage of Houdini’s RBD is that it can handle collisions between geometry of any shape.

Slower than ODE and Bullet.

ODE (Open Dynamics Engine, home page)

An open-source RBD solver optimized for fast simulation of simple collision geometry (such as boxes, spheres, cylinders, and capsules). This will often increase performance where the geometry matches ODE’s simplified shapes, for example simulating the rectangular bricks in a collapsing brick wall.

ODE is really good at handling large numbers of simple objects. It is very fast in these situations, even when all the objects are stacked on top of each other.

Since it is very easy to switch between RBD and ODE, it’s possible to do a quick simulation using ODE before switching to RBD for a more detailed simulation.

ODE only solves collisions between boxes, spheres, and other geometric primitives. Your geometry doesn’t necessarily have to look like a geometric primitive, but it will collide as if it was shaped like one.

ODE does not support glue or fracturing.

ODE does not support collision between triangle meshes. Object collision hulls in ODE must be composed of geometric primitives, such as boxes, spheres, etc.

Does not support scaling at the object level.

Glue

Houdini lets you “glue” disconnected RBD objects together. The objects stay together until forces pulling them apart exceed the strength of the glue.

There are two main workflows for using glue: Glue an ordinary RBD object to another, or create “chunked” geometry (where the geometry is actually made up of individual pieces in groups) and import it as pieces glued together.

This feature is especially useful for breaking an object into chunks, gluing them together, then colliding the glued object with another object to make the glued object “shatter”.

To...Do this

Glue one RBD object to another

  1. In the RBD object’s parameters, click the Glue tab. Set the Glue to object field to the name of the RBD object you want to glue this object to.

  2. Set the Glue strength and Glue impulse half life to control how much force is required to break apart the glued objects. See the online help for the RBD Object operator for information on these options.

Set up chunked geometry

  1. In a Geometry object or SOP network, create the pieces of the model.

  2. Assign the geometry of each piece to a group.

    Use meaningful names with a pattern (for example, chunk1, chunk2, chunk3, or chunk_leftarm, chunk_head, chunk_rightleg). This will let you pick out the groups using the pattern parameter in the glue object.

  3. Merge them together to create the final geometry.

Import chunked geometry as glued-together RBD objects

  1. Use the tab menu to create an RBD Glue Object node.

  2. In the glue object’s parameters, click the + button next to the SOP path parameter and choose the SOP node or SOP network containing the chunked geometry (see above).

  3. Use the Group mask pattern to choose which groups to import as pieces (for example chunk*), or leave it as * to use all groups.

  4. Click the Internal Glue tab, and set the Glue strength and Glue impulse half life to control how much force is required to break apart the glued objects. See the online help for the RBD Glue Object operator for information on these options.

Important RBD Object parameters

Use deforming geometry

For efficiency, the dynamics engine does not use animated geometry by default. To have the RBD object use animated geometry, set Use animated geometry to 1 in the RBD Object’s parameters. You can animate the value of this option, so you can only use animation in the time periods where it matters, and switch back to static geometry in other places for efficiency.

Number of objects

  1. In an RBD Object’s parameters, set the Number of objects parameter.

    The RBD object node creates multiple copies of the object, but creates them at the exact same position, so they overlap and still appear to be one object. You need to use an expression in the object’s Position parameter to space them out.

  2. In the Position parameter (on the Initial State tab), enter an expression that uses the $OBJ (“object number”) local variable to position the copies.

    For example, use $OBJ * 2 in the Position X field to space the copies 2 units apart along the positive X axis. The expression is evaluated for each copy with $OBJ set to the current copy number.

Tips

  • A convenient way to create a shatter an object is to start with the whole model and cut it up into chunks using the Cookie SOP and a cutting surface such as a sphere (to create smooth cuts), or a jagged polygonal surface.

    Connect the results of each cookie to a Group SOP to create the “chunk” groups. Then use a Merge SOP to merge the resulting chunks together.

  • A useful way to create groups out of large numbers of disconnected

    “chunks” of geometry is to use the Connectivity SOP followed by the Partition SOP.

    Connectivity creates an attribute (class by default) and assigns it a unique value each set of connective primitives or points. You can then use Partition to make groups. In the Rule parameter, enter a group name containing the $CLASS variable, for example chunk$CLASS.

See also

Dynamics

Learning dynamics

Colliding objects

Simulation types

Next steps