On this page

Overview

Capture is Houdini’s method of creating weights on geometry for skin deformation. Capture weights are created on geometry and weighted to skeleton joints. When the joints move, the geometry is deformed according to the capture weights and the position of the joints.

Houdini’s capture process differs from other DCC software that perform weight creation and deformation in one step. In Houdini, weight creation is separate from deformation. In this way, you can procedurally skin geometry using Houdini’s extensive node networks, and work in a non-destructive workflow.

Capture weights are created and modified using the following SOP nodes.

Create Capture Weights

Description

Joint Capture Biharmonic SOP

Creates smoothed-out capture weights based on joint position and volume. Works well for softer, non-mechanical, organic deformation.

Joint Capture Proximity SOP

Creates capture weights based on the geometry point’s distance to joints. This is a much quicker and less computationally-intensive operation than the Joint Capture Biharmonic SOP, but results in weights that are not as evenly distributed or smoothed out, especially for organic surfaces. The Joint Capture Proximity SOP could work well for rigging simple geometry like a tube.

Capture Packed Geometry SOP

This is a rigid weighting method where geometry pieces are assigned to a given joint with 100% weighting.

Joint Capture Paint SOP

Allows you to interactively paint capture weights on geometry.

Modify Capture Weights

Description

Attach Joint Geometry SOP

Attaches geometry to joints, with the geometry influencing the capture result.

Joint Capture Paint SOP

Can be used to paint capture weights on geometry that have existing weights.

Create capture weights

A basic workflow for creating capture weights and deforming geometry involves the use of the Joint Capture Biharmonic SOP to create capture weights on geometry based on joint positions, and the Joint Deform SOP to move the points on the geometry according to the capture weights.

Basic joint deform workflow

Set the display flag on the Joint Capture Biharmonic SOP to view the geometry regions affected by each joint. In the example below, the geometry points in the red region follow the position of joint_0, the purple region follows joint_1, and the blue region follows joint_2:

Joint capture regions

The Rig Pose SOP can be used to modify the pose of the skeleton, and the deformed geometry can then be viewed in the viewport:

Basic capture workflow
  1. Select the Rig Pose SOP.

  2. Set the display flag on the Joint Deform SOP.

  3. In the viewport, select Show Handle on the left toolbar or press Enter in the viewport. You are now in the Rig Pose viewer state where you can select and move joints, and see the deformed geometry.

Deform geometry using Rig Pose SOP

Capture attributes

Capture weights are stored on the boneCapture attribute created by the joint capture nodes (Joint Capture Biharmonic SOP, Joint Capture Proximity SOP, Joint Capture Paint SOP). The boneCapture attribute can be in a “packed” or “unpacked” format.

The boneCapture attribute generated by the joint capture nodes are in a packed format, which is easier to read and move around. The unpacked format exists to allow for easier manipulation of the boneCapture attribute using VEX.

Packed capture attribute

In the previous example, biharmonic capture was performed on a tube geometry. Point 110 on the tube geometry is mostly affected by joint_1 of the skeleton, and less affected by joint_0.

Biharmonic capture on tube geometry

The packed format of the boneCapture attribute is a point index-pair attribute - for each point on the geometry, a pair of values is stored for every joint that has an affect on the point. The pair of values consists of the joint capture region and its corresponding weight. The weight values are normalized between the capture regions.

The geometry spreadsheet displays the boneCapture attribute for each point on the tube geometry:

  1. Select the Joint Capture Biharmonic SOP.

  2. In the geometry spreadsheet, select Points from the top toolbar.

In the geometry spreadsheet below, we can see that point 110 is affected mostly by joint_1 (it has a higher weight), as well as joint_0 to a lesser degree.

Index-pair boneCapture attribute

Unpacked capture attribute

The index-pair attributes can be “unpacked” into array attributes, which are easier to manipulate with VEX. The boneCapture array attributes consist of detail and point attributes, and can be obtained from the index-pair attributes using the Capture Attribute Unpack SOP.

Unpack boneCapture attributes

Unpacked Array Attributes

Attribute Type

Description

boneCapture_pCaptData

Detail

An array that contains the rest transforms of the capture region at the time of capturing.

boneCapture_pCaptPath

Detail

An array that stores the joints that are used in the capturing process.

boneCapture_index

Point

An array that stores the indices to the boneCapture_pCaptPath detail attribute.

boneCapture_data

Point

An array that stores the weights associated with each joint referenced by boneCapture_index.

The array attributes can be viewed in the geometry spreadsheet:

  1. Select the Capture Attribute Unpack SOP.

  2. In the geometry spreadsheet, select Detail or Points from the top toolbar.

boneCapture detail array attributes

The weight values in boneCapture_data match those in the packed index-pair boneCapture attribute.

boneCapture point array attributes

Unpacked boneCapture array attributes can be packed into index-pair attributes using the Capture Attribute Pack SOP.

Modify capture weights with capture geometry shapes

The Attach Joint Geometry SOP can be used to attach geometry to skeleton joints, with the geometry affecting the results of the capture weight creation in the Joint Capture Biharmonic SOP downstream.

The process for creating geometry shapes to influence biharmonic capture is:

  1. Create the capture geometry shapes.

  2. Assign the capture geometry shapes to skeleton joints.

  3. Apply the capture geometry shapes to the biharmonic capturing process.

The example in this file demonstrates the use of attaching geometry to joints to influence the result of biharmonic capturing.

capturegeoexample

Create capture geometry shapes

In the network editor, create the geometry to use as capture shapes at their world space positions inside the volume of the character. Only the points of the capture geometry inside the volume are considered for the biharmonic calculations. To modify the size or shape of the capture geometry, use SOP nodes like the Edit SOP or Transform SOP.

Warning

Only use polygonal geometry for the capture shapes. Nurbs do not work properly.

Capture shape library
World space shapes in viewport

Node

Notes

create_capture_geo_library

This Merge Packed SOP merges the capture geometry to create a library of shapes. In the Merge Packed SOP:

  • The Name Primitive Attribute parameter is turned on by default. When an input is connected to the Merge Packed SOP, a Name parameter is automatically created and populated with the name of the input node. You can define new names for the capture geometry shapes by updating the Name parameter for each input shape and specifying meaningful names, for example, wrist_left or hips_tilt.

  • Turn on the Name Override Attribute parameter, which is set to the name attribute by default. When Name Override Attribute is turned on, the Merge Packed SOP sets the shape names to the value of the name attribute present on the input geometry. If the name attribute is not present on the input geometry, the Name parameter is used to name the shape instead.

Warning

After you assign shapes to joints using the Attach Joint Geometry SOP downstream, do not click the Reload Node Names button on the Merge Packed SOP. This will invalidate all your shape-joint assignments by reverting the shapes' names to their defaults.

Assign capture geometry shapes to joints

Use the Attach Joint Geometry SOP to assign the capture geometry shapes to skeleton joints. This links the shape to the joint, and designates the shape as the joint’s capture object.

Node

Notes

attach_capture_geo_ to_joints

This Attach Joint Geometry SOP attaches geometry to the input skeleton joints.

Make the following network connections:

  • Character’s capture pose (skeleton) output → Attach Joint Geometry SOP 1st input.

  • Capture geometry library (create_capture_geo_library) → Attach Joint Geometry SOP 2nd input (Shape Library input).

In the Attach Joint Geometry SOP, set the Role parameter to Capture Geo so that the attached geometry is used to influence the result of the biharmonic capture.

To assign the capture geometry shapes to the character’s joints:

  1. Select the Attach Joint Geometry SOP, and click Show Handle on the left toolbar or press Enter in the viewport. You are now in the Attach Joint Geometry viewer state.

  2. In the viewer state’s toolbar, choose Mode ▸ Assign Shapes to set the interaction mode to shape assignment, and turn on Assign in World Space. The world space shapes appear in blue.

    World space shapes in blue
  3. In the viewer state, click a joint in the skeleton, hold G, and click the shape you want to assign to the joint.

    In the parameter editor, Add Shapes tab, a new Assign Shapes multiparm for the joint appears with the following parameters:

    • Group - The selected joint.

    • Shape Name - The capture geometry shape.

    • Keep Shape World Transform is turned on.

    A blue ring appears around the joint indicating that it has a shape assigned to it. The capture geometry shape in the Shape Name parameter is now assigned to the joint in the Group parameter. The world space shape’s position (in world space and relative to the character) does not change.

    Blue ring indicates joint has an assigned shape

    You could also create a new Assign Shapes multiparm by either clicking the Create New Group button in the viewer state toolbar or manually adding the multiparm in the parameter editor.

Tip

  • If you want to remove a joint from a shape assignment, hold ⌃ Ctrl and click the joint in the viewer state.

  • If you want to re-assign a joint to a new multiparm, choose the joint and press G again. The joint is automatically removed from its old multiparm and added to a new multiparm.

Apply capture geometry shapes to capture process

The Joint Capture Biharmonic SOP takes the updated skeleton with the capture geometry shapes assigned to joints, and creates capture weights on the character geometry. The character geometry is then deformed by the Joint Deform SOP.

Apply capture shapes to biharmonic capture

Node

Notes

attach_capture_geo_ to_joints

Attaches geometry to the input skeleton joints. The skeleton that is output (with the attached geometry) goes into the skeleton input (2nd input) of the Joint Capture Biharmonic SOP.

create_capture_weights

This Joint Capture Biharmonic SOP creates capture weights on the geometry. The Capture Geo Role parameter is set to Capture Geo by default, which causes the capture geometry to influence the result of the biharmonic capture.

deform_geometry

This Joint Deform SOP moves the points on the geometry according to the point capture weights.

Mirror capture geometry shapes

If capture geometry shapes have been assigned to one side of the skeleton, the Skeleton Mirror SOP can be used to mirror the shapes on the other side of the skeleton. The mirrored shapes are then transferred to the input skeleton using another Attach Joint Geometry SOP.

Mirror capture geometry shapes and transfer to input skeleton

Node

Notes

keep_left_side_joints

This Delete Joints SOP deletes the joints from one side of the skeleton in order to have a cleaner starting point in the subsequent mirroring step (when both the capture shapes and joints are mirrored).

For example, if capture shapes were added to the left side of the skeleton, you would delete all the joints on the right side of the skeleton. In the subsequent Skeleton Mirror SOP, the joints and capture shapes, both on the left side of the skeleton, are mirrored back to the right side.

In the Group parameter, specify the set of joints you want to delete.

mirror_joints_and_ capture_geo_

This Skeleton Mirror SOP duplicates the points on the skeleton in a mirrored fashion. The output of the Skeleton Mirror SOP is a skeleton with joint shapes mirrored on both sides of the character.

Set the Find Tokens parameter to match the prefix/suffix of the skeleton joints. The mirrored joint names have the original joint names with the prefix/suffix replaced with the Replace Tokens parameter. For example, if Find Tokens = L_ and Replace Tokens = R_, the mirrored joint of L_Arm is R_Arm.

Adjust the other parameters based on the specifics of the skeleton.

transfer_mirrored_ capture_geo

Transfers the mirrored shapes to the skeleton. Connect the output of the Skeleton Mirror SOP to the Shape Template input (3rd input) of this Attach Joint Geometry SOP.

In the Add Shapes tab, set Role to Capture Geo.

In the Shape Template tab, specify how to transfer the mirrored shapes to the skeleton:

  • Target Joints - Specify the skeleton joints to apply the new mirrored shapes to, for example, @name=R_*.

  • Template Joints - Specify the shapes to transfer to the skeleton, for example, @name=R_*.

  • Set Match By to Attribute Value. This matches the shapes in the capture geometry library to the skeleton joints based on the name attribute on the shapes and joints (the name attribute is specified in the Attribute to Match parameter).

  • Turn on Keep Template World Transform to use the world positions of the shapes from the capture geometry library.

See shape templates for information on how to assign the shapes in the capture geometry library to the skeleton as a shape template.

Shape templates

The Shape Template input (3rd input) on the Attach Joint Geometry SOP allows you to automatically assign shapes from the capture geometry library to skeleton joints.

Use capture geometry library as a shape template

Node

Description

promote_prim_to_point

This Attribute Promote SOP converts the primitive name attributes from the capture geometry library (create_capture_geo_library) to point attributes that the Attach Joint Geometry SOP accepts on its Shape Template input.

Set the following parameters:

  • Original Name = name

  • Original Class = Primitive

  • New Class = Point

  • Turn on Delete Original to delete the primitive name attributes since they are no longer needed.

attach_capture_geo_ to_joints

Connect the Attribute Promote SOP to the Shape Template input (3rd input) of this Attach Joint Geometry SOP.

In the Add Shapes tab, set Role to Capture Geo.

In the Shape Template tab, specify how to transfer the shapes in the shape template to the skeleton:

  • Target Joints - Specify the skeleton joints to apply the shape template to.

  • Template Joints - Specify the shapes to assign to the skeleton.

  • Set the Match By parameter to Attribute Value. This matches the shape template to the skeleton joints based on the name attribute on the shapes and joints (the name attribute is specified in the Attribute to Match parameter).

  • Turn on Keep Template World Transform to use the world positions of the shapes from the capture geometry library.

Paint capture weights

The Joint Capture Paint SOP allows you to interactively paint capture weights on geometry. It can be used to create new capture weights on geometry, or modify capture weights that already exist on geometry.

See the Joint Capture Paint SOP for more information on how to paint capture weights on geometry.

Create capture weights with weight painting
Modify existing weights with weight painting

Associated nodes

The following SOP nodes are used to create, edit, paint, and work with capture weights.

Node

Description

Attach Joint Geometry SOP

Attaches geometry to joints to influence the result of the biharmonic capture. This can be more efficient than purely joint position-based biharmonic capture (Joint Capture Biharmonic SOP) and weight painting (Joint Capture Paint SOP). It gives you more control on influencing areas per joint.

Capture Attribute Pack SOP

Takes a set of array attributes and uses a naming convention to convert it into a single index-pair attribute.

Capture Attribute Unpack SOP

Takes an index-pair attribute and uses a naming convention to convert it into a set of array attributes.

Capture Mirror SOP

Mirrors capture weights from one half of a character to the other half.

Capture Packed Geometry SOP

Sets a joint to control an entire piece of geometry. This is mainly used for rigidly deformed parts of a character.

Joint Capture Biharmonic SOP

Creates smoothed-out capture weights on geometry based on joint position and volume. The geometry is then deformed by the Joint Deform SOP. Works well for softer, non-mechanical, organic deformation.

Joint Capture Paint SOP

Allows you to interactively paint capture weights on geometry.

Joint Capture Proximity SOP

Creates capture weights based on the geometry point’s distance to joints. This is a much quicker and less computationally-intensive operation than the Joint Capture Biharmonic SOP, but results in weights that are not as evenly distributed or smoothed out, especially for organic surfaces. The Joint Capture Proximity SOP could work well for rigging simple geometry like a tube.

Joint Deform SOP

Works in conjunction with joint capture nodes (Joint Capture Biharmonic SOP, Joint Capture Proximity SOP, Joint Capture Paint SOP) to deform geometry.

KineFX

Preparing character inputs

Rigging with rig components

Rigging with APEX graphs

Building graphs with APEX Script

Animating in the viewport

Technical Animation

Deformation

Animation Retargeting

Pre-H20

Panes

Appendix