|On this page|
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.
Select the object.
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.
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.
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.
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).
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
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.)
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.
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.
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”.
Glue one RBD object to another
Set up chunked geometry
Import chunked geometry as glued-together RBD objects
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
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.
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 * 2in 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.
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.
A useful way to create groups out of large numbers of disconnected
Connectivity creates an attribute (
classby 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
$CLASSvariable, for example