Houdini 20.0 Dynamics

Simulating ropes, wires, and other bendable objects

On this page

Overview

Wire simulations are useful for simulating anything long and flexible, for example grass, fur, or even scaffolding. When wire objects are used with constraints, they can be used to simulate things such as ropes swinging, bungee jumping cords springing, or a tail of a kite, as well as for effects like a structure of collapsing girders.

{Pic}

Houdini’s wire solver is quite fast. It’s often worth trying to find ways to use the wire solver to achieve effects involving bending or springy objects, because it’s so fast.

How to

To...Do this

Create a field of curves to use as wires

Creating a field of wires is really just creating a field of curves at the geometry (SOP) level and then importing that geometry into a dynamics network with the Wire Object node.

One way to create a field of curves at the SOP level is:

  1. Use the Grid tool on Create shelf tab to create a plane and size it to the scale you want for your field.

  2. Turn on the display of points in the viewer using the toolbar on the right side of the viewer.

  3. You can just use the points of the grid as the locations for the curves if you want ordered rows and columns of curves, or you can scatter an arbitrary number of points across the grid.

    • If you want ordered rows and columns of curves, use the Rows and Columns parameters on the Grid node to set them up.

    • To scatter points across the grid, use the Scatter tool on the Model shelf tab with the grid object selected, and set the Number of points parameter to the number of curves you want in your field.

  4. Draw a curve starting at the bottom (that is, at the point you want to touch the field plane).

  5. Use the Copy to points tool on the Modify shelf tab to copy the curve onto the points.

  6. Use the Wire Object tool on the Wires shelf tab to turn the curve field into simulated wires.

{Pic}

Convert an object to wires

  1. Select the object containing the curves you want to use as wires.

  2. On the Wires tab, click the Wire object tool.

See configuring wires below.

Constrain wire points

The tools on the Wires shelf tab let you set up constraints on the positions of wire points.

To pin to a position in space, use the Wire Pin Constraint or Wire Spring Constraint.

Pin wires to a simulated object

  1. Set up the wire object and the “goal” dynamic object (such as an RBD object) you want to attach the wires to.

  2. On the Wire shelf tab, click Attach Wire to Surface.

  3. Click any of the wires in the wire object, or select the Wire Object node in the network editor, then press Enter.

  4. Select the points in the wire object you want to pin (usually the last point at the root of each wire, next to the surface), then press Enter.

  5. Press Enter to finish the tool.

(see the helpfor Attach Wire to Surface for more on how to use the tool).

Pin wires to a surface

You can pin wire points to their positions in the source geometry with the pintoanimation or gluetoanimation point attribute. (pintoanimation locks the point’s position, while gluetoanimation locks the point’s position and normal.)

In the wire source geometry network, create a group containing the root points, and use the AttribCreate node to create the attribute. Use the following settings:

Group

The name of the group containing the root points, such as roots.

Name

pintoanimation or gluetoanimation

Class

Point

Value

1

Deform geometry based on a dynamics wire

You can use a curve being controlled by a wire simulation to drive the deformation of a model. For example, you can model a snake and control it with a dynamics wire.

Deforming geometry based on a dynamics wire is basically the same problem as deforming geometry based on a curve. Create a control curve to represent the object you want to deform, and make it a simulated wire using the shelf tools. Add any constraints and forces you want to the simulated wire.

Then, create the Wire Capture surface node to capture the geometry you want to deform to the wire geometry. In the Wire Capture node’s parameters, click the Capture tab and set the Min/Max weight to 1 and 1. Connect the original curve to the Wire Deform node’s second (rest) input and the DOP Import node (automatically created by the shelf tools to import the simulated wire’s motion back onto the curve geometry) to the Wire Deform node’s third (deformed) input.

Wire network

TBD.

Configuring wires

  • Click the Physical tab to set the physical properties of the wire. The density and width affect the overall mass of the wire. The width also affects collisions. You can also set these (as well as per-point mass) through attributes on the source geometry.

  • The Linear spring constant is the wire’s resistance to stretching. Decrease this value to make the wire more stretchy.

  • The Angular spring constant is the wire’s resistance to bending. Decrease this value to make the wire looser, or increase it to make the wire more stiff.

  • To get a completely loose wire (like a rope or string), set Angular spring constant to 0. However, when Angular spring constant is 0, you must add an Angular damping constant (such as 0.001). If both Angular spring constant and Angular damping constant are 0, the wire can go crazy.

  • To simulate “fat” wires, change the Width on the Wire Object node’s Physical tab. This affects the mass of the wires (it is multiplied by the Density) as well as collisions with other objects. You can visualize the width of the wires by turning on Width on the Wire Object’s Visualization tab. This displays the wires as tubes in the viewport.

  • To set physical properties per-point, use point attributes on the source geometry (see below).

  • To have the wires in a wire object collide with themselves and each other, turn on Self collisions on the Wire Object’s Collisions tab. This will slow down the simulation but not by much. If you still find fast moving wires are interpenetrating, turn up the Minimum Substeps parameter on the Wire Solver DOP.

Useful point attributes

You can override or scale (depending on the attribute) the default properties set up by the Wire Object node using point attributes on the wires. See the Wire Object help for a list of attributes used by wires.

The wire solver uses the values of the attributes if they are present on the wire geometry, otherwise it uses the defaults defined by the parameters of the Wire Object node.

pintoanimation

Setting this to 1 on a point will prevent the wire solver from affecting the point’s position, meaning it will use its position any any animation from the source geometry.

This is very useful to anchor root points on an object, and have them follow the object’s animation.

gluetoanimation

Like pintoanimation, but in addition to position it uses the point’s normal in the source geometry to orient the wire.

The wire solver automatically keeps the point position and the v (velocity) point attribute, angvel (angular velocity) attribute, and orient (orientation quaternion) attribute up to date.

Example: toppling scaffolding

  1. Build your scaffolding using curves or lines.

  2. Convert your curves or lines to wire objects using the Wire Object tool on the Wires tab of the shelf.

  3. Use either a Wire Pin Constraint or a Wire Spring Constraint to constrain the points of the pieces of scaffolding together.

  4. If you used a wire pin constraint, keyframe when the constraint should break by changing the Activation to 0.

    If you used a wire spring constraint, you can either keyframe when the constraint should break by changing the Activation to 0 or set a Maximum Force or Maximum Length on the Spring tab of the parameter editor. Once the spring reaches the maximum force or length the constraint will break.

    Note

    Using a Wire Spring Constraint will allow you to set a Maximum Force or Maximum Length on the Spring tab in the parameter editor to indicate when the constraint should break. However, the Wire Pin Constraint does not have these parameters.

  5. Create a Rigid Body Object that will bump into the scaffolding.

  6. Apply Gravity to the objects in your scene to make them look as if they are falling naturally.

Dynamics

Learning dynamics

Colliding objects

Simulation types

Next steps