Houdini 20.0 Dynamics

Top ten advanced things about dynamics

On this page

Unique IDs, object ids, and object names

Each object and data item has a universally unique ID. This 128-bit number is unique across all simulations on all machines for all time. You can use this value to tell when data packets are being shared and/or recreated at each time step. The unique ID is displayed as a field on objects and data items in the details view.

Each object has an object ID. This is a simple integer that uniquely identifies an object in this simulation. Unlike the universally unique ID, it is not unique across different simulation networks, computers, simulation runs, etc.

Each object also has an object name. Object names are essentially a convenience - you can set up names so they are easier to remember and recognize than the simple object ID number. Object names are not unique, even within the same simulation: multiple objects can have the same name (this may even be useful in some circumstances).

In object creation nodes (such as RBD Object DOP or Empty Object DOP), the Object Name parameter controls the name of the created object. If you also use the Number of Objects parameter to create multiple objects at once, you can use the $OBJ local variable to append the created object number to the name. For example, if Object Name is brick$OBJ and Number of Objects is 3, Houdini would create objects named brick0, brick1, brick2.

The details view normally shows objects by their names, but you can switch it to show object IDs instead.

Rendering with motion blur can change the results

Rendering with motion blur will cause the simulation to be evaluated at shutter open (frame number - shutter time) and shutter close, for example frame 1.7 and 2. This forced sub-stepping can change the results of the simulation. To fix this, you can cache the simulation to disk and use a Time Blend SOP.

Data names

Each object and piece of data has a Data Name. Solvers look for data on objects by name. For example, the RBD Solver DOP will look for a data folder on an object called Forces, and use any force data it finds inside to change the object’s position.

Since nodes attach data by name, if you tried to use more than one node of the same type, such as two Fan Force DOPs, one would overwrite the data of the other if they both attached data as Forces/Fan. So Houdini has the Unique Data Name option that adds a bit of text to the data name to make it unique. In the fan example, the Unique Data Name checkbox is located at the bottom of the node’s Data Options tab.

For example, in this network:

As long as the two Fan Force nodes have Unique data name on, the RBD Object will have two separate pieces of force data attached to it: Forces/Fan_fan1 and Forces/Fan_fan2. Since the solver uses any force it finds under the Forces folder, this works out fine.

You can turn off Unique data name if you really want later nodes to override the data of earlier nodes with the same name. This may be useful if you animate the activation of the earlier and later nodes, for example to switch between the settings/positions of two different fan force nodes. The nodes will be evaluated left to right, top to bottom. You can also use the “set” pop-up menu (see below) for more control over how one node overrides another using the same data name.

Data sharing

  • For each piece of data, Houdini can attach a new copy of the data per object, or share the same piece of data between objects.

  • At each time step, Houdini creates a new copy of every object in the simulation.

  • For each piece of data, Houdini can create a new copy of the data per timestep, or share the same piece of data across timesteps.

The Data Sharing option controls sharing of data between objects and across timesteps.

Do Not Share Data

Houdini does not share the data between objects, and it creates new copies of the data for each new timestep.

Share Data Across All Time

The data is shared by all objects using the same data name, and across all timesteps.

Use this option for data whose value you know is not dependent on any information about the object it’s attached to or time (that is, it’s identical for all objects and constant for the entire length of the simulation). For example, gravity could usually be shared across all time.

Share Data In One Timestep

Within each timestep, the data is shared by all objects using the same data name, but a new copy of the data is created for each timestep.

Use this option for data whose value you know is not dependent on any information about the object it’s attached to.

The default is Do Not Share Data because this gives the most predictable results. However, if you know that data can be shared between objects or across all time safely, you can decrease the amount of memory the simulation uses by using the sharing options. If you know there are places where you can share data that would otherwise be copied onto tens of thousands of objects at each timestep, you can potentially decrease the amount of memory used by the simulation noticeably.

Groups

You can create groups of objects in the simulation using the Group Dynamic Objects DOP, just like you can create groups of particles in a particle network and groups of faces in a geometry network.

You can include objects in a group by their object ID or object name. You can also include other groups by their group name.

Groups have three uses/effects in a dynamics simulation:

  • You can set up groups so you can refer to a set of objects by their group name, instead of using complicated masks.

  • Technically, affector relationships exist between groups, not individual objects.

  • Because objects in a group affect each other, everything inside a group must always be solved simultaneously.

Collision representations

The RBD Solver supports two types of collision representations: volume and thin-plate. Use volume-based collisions for normal objects, and thin-plate collisions for objects without volume.

Volume-based collision detection creates a volume representation of each object. You can visualize the volume representation of an object and control how it is created with the options on the Volume tab on the Collision tab of an RBD Object node’s parameters.

To detect collisions, Houdini intersects the surface representation of one object with the volume representation of the other object, and vice versa.

The default surface representation for geometry is just the object’s points. This works well with dense geometry, but doesn’t work well if an object has sharp edges or not many points. Alternatively, you can use edges to represent the surface. In an object’s parameters, click the Collisions tab, then click the Surface tab and set Surface Representation to Edges.

Edge representation is more expensive than using points, and for most complicated models it’s unnecessary overkill. However, for certain geometry types, such as a cube without points on the faces, you will need to use edges.

If your object has no volume (such as pieces of paper and ground planes), turn off Use Volume Based Collision Detection on the object’s Collision tab to have Houdini treat it as a thin surface.

If a thin plate object collides with a volume-based object, it uses volume-based collision. However, if two thin-plate objects collide, Houdini uses a per-triangle collision test.

Thin-plate objects do not stack well. If you need to stack them up, you should increase the minimum number of sub-steps on the DOP Network container node.

Dynamics

Learning dynamics

Colliding objects

Simulation types

Next steps