On this page

Introduction to KineFX skeletons

In KineFX, everything is a SOP point. The world transform of a point is defined by position + a 3×3 transform matrix (translation, rotation, scale).

A point is a joint when it has a transform attribute and a name attribute.

A KineFX hierarchy or skeleton is represented by a collection of points connected by polygon lines. The parent-child relationship between joints in a hierarchy is determined by vertex order. However, point ordering is not considered when traversing the hierarchy.

You can create skeletons from scratch, bring them in from the object-level, or import them from other DCC packages.

KineFX skeletons vs. Object-level skeletons

KineFX is similar to Crowds in Houdini as it is a joint-based system, unlike the object-level rigging tools which are bone-based.

There are several key differences between the bones found at the object-level and the points in a geometry-level SOP skeleton:

  • Bones have length, whereas joints only take their local space translation into account in order to offset themselves from their parents.

  • Bones have a fixed orientation, which means that a bone’s child will always be offset in -Z by the length of its parent.

  • Bones do not support scale compensation, making squash and stretch animation pipelines very unwieldy, which impacts performance.

  • Deformation of a capture (skin) is not driven by the bone itself, it is instead driven by the Capture Region SOP inside the bone object. The difference between the Capture Region SOP’s capture pose and the current pose drives the object-level skin’s deformation.

  • Object-level capture poses are attached to their skins. This mean that the skin will break if you start deleting parts of the skeleton. However with SOP skeletons, their capture poses are defined by the Joint Deform SOP’s second input. This means that you can alter a SOP capture pose without having to re-capture (re-skin) its geometry. For example, you can make changes to a skeleton’s joint orientations or tweak a character’s pivots and not affect its skin.

Create skeletons

Skeleton interaction basics and hotkeys

Hotkey or Interaction

Action

F

Toggles between Create and Modify mode.

Click in empty space while in Create mode

Creates a new joint.

⇧ Shift-click in empty space while in Create mode

Creates a floating, unparented joint.

-click or -click a joint while in Modify mode

Selects a joint.

-click or -click a joint while in Create mode

Creates a new joint with the clicked joint as its parent.

Double-click a joint

Selects the clicked joint and all the joints in its joint chain.

Hold S and drag

Box select joints.

⇧ Shift-click a joint

Adds the joint to the selection group.

⌃ Ctrl-click a joint

Removes the joint from the selection group.

⇧ Shift + ⌃ Ctrl-click a joint’s link or poly line (geometry)

Adds a new joint between the existing joints, effectively splitting the poly line in half.

Delete

Removes the selected joint and reparents its descendants to the joint’s former parent.

⇧ Shift + Delete

Removes the selected joint and does not reparent its descendants.

Drag a joint while in Tweak mode

Moves the joint and its descendants.

⇧ Shift-drag a joint while in Tweak mode

Moves the joint without moving its descendants.

Drag a joint while in Tweak mode with Child Compensate turned on

Moves the joint without moving its descendants.

⇧ Shift-drag a joint while in Tweak mode with Child Compensate turned on

Moves the joint and its descendants.

⇧ Shift-drag a poly line while in Tweak mode

Twists or rotates the poly line and its parent/child pair of joints.

⌃ Ctrl-drag a poly line while in Tweak mode

Rotates the poly line using its parent joint as a pivot. This is also called trackball rotation.

⌃ Ctrl + ⇧ Shift-drag a poly line while in Tweak mode

Rotates the poly line along the existing curvature.

⎋ Esc

Exits the Skeleton state.

Draw a skeleton

You can create a skeleton from scratch by drawing the joints using the Skeleton SOP node.

  1. In the network editor at the geometry level, have your character geometry available. Turn on the template flag for your character’s geometry node.

  2. Create a Skeleton SOP node.

  3. Select the Skeleton SOP and turn on its display flag. You will now be able to see your character’s geometry while drawing its skeleton.

    Initial Skeleton SOP node network

    Tip

    You can change how your templated character geometry is displayed in the viewport. From the Display Options window (press D when hovering over the viewport), choose Set display options for ▸ Template Model Geometry. Then choose one of the options in the Draw drop-down menu. We recommend using either Smooth Shaded or Smooth Wire Shaded.

  4. Select the Skeleton SOP, click in the viewport, and press Enter. You are now in the Skeleton interaction state. In this state, you have access to the Skeleton toolbar above the display, the menu, and the skeleton hotkeys.

  5. On the Skeleton toolbar, choose one of the following options from the Joint Placement drop-down menu for placing joints on the geometry:

    View Based

    In this mode, joints are placed at the mid-point of the geometry. Consider a straight line that goes from your current view through the geometry. Joints are placed at the mid-point of the closest and furthest intersection points with the geometry surface.

    Recommendation

    When working in the View Based joint placement mode, switch to an orthographic view that splits your character down the middle (for example, the Right view).

    Joint placement using the right orthographic view

    Normal Based

    In this mode, Houdini places joints at the mid-point of the geometry, using the normal of the surface. Consider a straight line that goes through the geometry perpendicular to the geometry surface. Joints are placed at the mid-point of the closest and furthest intersection points with the geometry surface.

    The white circle shows the location inside the geometry that the joint would be placed.

    Normal-based joint placement

    Freehand

    If the construction plane is displayed, joints will be snapped onto the construction plane. Display the construction plane by clicking on the right toolbar.

    Freehand joints snapped onto the construction plane

    If the construction plane is not displayed, joints will be lined up on a plane perpendicular to your viewing angle when you placed the joints.

    Freehand joints without the construction plane

    Surface

    In this mode, joints are placed on the surface of the geometry.

    Joints placed on the geometry surface
  6. Choose Mode ▸ Create on the Skeleton toolbar or press F. You can now draw your joint chain in the viewport.

    Tip

    F toggles the Mode between Create and Modify.

Draw a skeleton on the construction plane

You can create a skeleton and easily align the joints by snapping them onto the construction plane.

  1. In the network editor at the geometry level, have your character geometry available. Turn on the template flag for your character’s geometry node.

  2. Create a Skeleton SOP node.

  3. Select the Skeleton SOP and turn on its display flag. You will now be able to see your character’s geometry while drawing its skeleton.

    Tip

    You can change how your templated character geometry is displayed in the viewport. From the Display Options window (press D when hovering over the viewport), choose Set display options for ▸ Template Model Geometry. Then choose one of the options in the Draw drop-down menu. We recommend using either Smooth Shaded or Smooth Wire Shaded.

  4. Select the Skeleton SOP, click in the viewport, and press Enter. You are now in the Skeleton interaction state. In this state, you have access to the Skeleton toolbar above the display, the menu, and the skeleton hotkeys.

  5. Display the construction plane in the viewport by clicking on the right toolbar.

    Construction plane in the viewport

    If the construction plane handle is not displayed, click the construction plane icon and turn on Construction Plane Handle.

  6. Set the orientation of the construction plane by clicking the construction plane handle and choosing Align normal with world [X|Y|Z] axis.

    For example, selecting the Align normal with world X axis option will orient the construction plane so that its normal points along the X-axis.

    Construction plane oriented with its normal along the X-axis
  7. On the Skeleton toolbar, select Joint Placement ▸ Freehand.

  8. Draw your joints. The joint chain will snap to the construction plane.

    Joints snapped to the construction plane

Turn a polygonal line into a joint chain

In addition to drawing your own skeleton joints, you can also turn any SOP polygonal line into a joint chain with the Skeleton SOP node or the Rig Doctor SOP node.

  1. In the network editor, create a SOP node that will generate a polygonal line, for example, a Line SOP node.

  2. Select the Line SOP, click in the viewport, and press Enter. The line geometry will be displayed in the viewport.

    In the parameter editor, adjust the properties of the geometry. For example, increase the Length and Points parameters for the Line SOP. Each point in the geometry will become a joint in the skeleton. To see the points in the geometry, turn on Display Points on the right toolbar of the viewport.

    Polygonal line input in the viewport
  3. In the network editor, create a Rig Doctor SOP node or a Skeleton SOP node.

  4. Connect the Line SOP to the Rig Doctor SOP or Skeleton SOP.

    These nodes initialize the point transforms for the geometry as well as give them valid names. In KineFX, a valid hierarchy requires valid point names.

    Rig Doctor SOP and Skeleton SOP in the network

    You can now see the new KineFX skeleton in the viewport.

    Joint chain generated by the Rig Doctor SOP and Skeleton SOP

    Tip

    If you want to visualize your joint chain outside the Rig Doctor SOP or Skeleton SOP, you can use the Visualize Rig SOP node.

Orient joints

You may want to orient the joints in a hierarchy for a variety of reasons:

  • Your motion capture skeletons have strange joint rotations.

  • You are building a skeleton from scratch and want to adjust the arms to bend at a particular angle.

  • You have modified your skeleton, and now the angles of your joints are off.

KineFX has several tools and methods for manipulating joint orientations.

Automatically orient joints

For simple joints chains, you can automatically orient joints using the Orient Joints SOP node.

Joints with varying rotations
  1. Create an Orient Joints SOP node.

  2. Connect the output of the Skeleton node to the input of the Orient Joints node.

  3. In the parameter editor, specify a Reference Vector for the orient operation.

    This sets the direction of the joint axes that points toward the child joint. For example, if you want to orient the joints in your joint chain so that their X-axes look at their child joints, then specify a Reference Vector of 1 in the X-axis field.

    You can also set the direction of the Up vector by turning on the Up Vector parameter.

    The joints in your joint chain will automatically orient to the Reference Vector (and Up Vector) you specify.

    X-axes now point down the joint chain

Orient joints with orientation picking

Orientation picking allows you to orient joints to their parent or child joint. You can use orientation picking with the Skeleton SOP node when creating or modifying your skeleton, or with the Rig Pose SOP node when cleaning up your retargets.

  1. In the network editor, select the Skeleton SOP or Rig Pose SOP.

  2. Click in the viewport and press Enter to enter the Skeleton SOP or Rig Pose SOP’s interaction state.

  3. If using the Skeleton SOP, turn on Child Compensate on the Skeleton toolbar.

    If using the Rig Pose SOP, turn on the World Space parameter.

  4. click in the viewport, and turn on Display Joint Axes and Show Handle from the pop-up menu.

  5. Select the joint whose orientation you want to change.

    Joint’s original rotation behavior
  6. Press ; to enter orientation picking mode. The manipulator handle will change to the orientation picking handle.

    Orientation picking handle
  7. Set the main axis (primary axis) that the joint will rotate around. We want the Z-axis to remain as is (since it is pointing down the arm from the elbow to the wrist), and have the other axes orient themselves around the Z-axis. So we will set the Z-axis to be the primary axis.

    ⌃ Ctrl click the blue box shape at the end of the Z-axis handle. The box will change to a pyramid shape. The Z-axis is now set as the primary axis.

    Orientation picking with the Z-axis selected as the primary axis
  8. Set the axis that you want to line up with a particular edge (the link between joints). This is the secondary axis. When you set the secondary axis, the joint orientation will rotate around the Z-axis (primary axis) to line up the secondary axis on the same plane as the selected edge.

    In this example, we want to line up the X-axis with the shoulder joint:

    • Click the red box at the end of the x-axis handle. The box will turn yellow to indicated that it is selected.

    • Click the edge that connects the shoulder joint to the elbow joint. Imagine a plane that includes the shoulder-elbow edge and the elbow-wrist edge. The x-axis will rotate about the Z-axis (primary axis) and align itself with this plane.

    This technique will give nice orientations for elbows and knees.

    Rotating the secondary axis about the primary axis
    Joint’s new rotation behavior after orientation picking
  9. Press ; to exit orientation picking mode.

Tip

If you want to visualize your skeleton outside the Skeleton SOP, Rig Doctor SOP, or Rig Pose SOP, you can use the Visualize Rig SOP node.

Orient joints based on the primary and secondary axes

You can orient joints by specifying the primary and secondary axes from the viewport state parameters.

  1. In the network editor, select the Skeleton SOP node.

  2. Click in the viewport and press Enter to enter the Skeleton interaction state.

  3. click in the viewport, and turn on Display Joint Axes from the pop-up menu.

  4. Hold S and drag to select the joints you want to orient.

  5. Hover over the viewport and press P to bring up the Parameters window.

  6. In the Viewer State Dialog tab, change the Primary Axis and Secondary Axis:

    Primary Axis

    Axis that points toward the child.

    Secondary Axis

    Axis that points in the up direction.

  7. click in the viewport and choose Orient Selected Joints from the pop-up menu. The axes in the joint chain will be updated.

Orient joints using the construction plane

You can adjust the joint rotation axes for a joint chain using the construction plane. In the below example, we will be orienting the axes of an elbow in a biped arm.

  1. In the network editor, select the Skeleton SOP node.

  2. Click in the viewport and press Enter to enter the Skeleton interaction state.

  3. Zoom in on the joints you want to orient.

    Joint’s original rotation behavior
  4. Select the joints in the joint chain surrounding the joint you want to orient. For example, if you want to orient the elbow, select the shoulder, elbow, and wrist joints.

    Select joints to orient using the construction plane
  5. Display the construction plane in the viewport by clicking on the right toolbar.

  6. click in the viewport and choose Orient Construction Plane to Selection from the pop-up menu. The construction plane will orient itself to the selected joints.

    Construction plane oriented to the selected joints
  7. Select the joint(s) you want to orient. In this example, we will select the elbow joint.

    Select the middle joint of the joint chain
  8. click in the viewport and choose Snap Selection to Construction Plane from the pop-up menu. The joint orientations will now be updated. This technique will give you nice orientations for elbows and knees.

    Elbow’s new rotation behavior after snapping to the construction plane

Mirror a skeleton

You can quickly create a skeleton by drawing half of a skeleton and using the Skeleton Mirror SOP to create the joints for the other half of the skeleton.

  1. Draw half of the skeleton.

    For steps on how to draw a skeleton, see Draw a skeleton or Draw a skeleton on the construction plane. Alternatively, if you already have a skeleton that you want to mirror, delete the joints from the half of the skeleton you do not want to keep.

  2. Display the construction plane in the viewport by clicking on the right toolbar.

    If the construction plane handle is not displayed, click the construction plane icon and turn on Construction Plane Handle.

  3. click the construction plane handle and choose Align normal with world X axis from the pop-up menu. This will orient the construction plane so that its normal points along the X-axis.

    Construction plane oriented with its normal along the X-axis
  4. Select the median joints for your skeleton. For a biped or quadruped, for example, these would be the spine joints.

  5. click in the viewport and choose Snap Selection to Construction Plane from the pop-up menu.

    Before and after snapping the character’s joints to the construction plane (drag the red arrows to see the comparison)
  6. Create a Skeleton Mirror SOP node.

  7. Connect the output from the Skeleton SOP to the input of the Skeleton Mirror SOP.

  8. Turn on the template flag for your character’s geometry node.

  9. Select the Skeleton Mirror SOP and turn on its display flag. You will now be able to see your character’s geometry while mirroring its skeleton.

    Skeleton Mirror SOP node in the network

    Tip

    You can change how your templated character geometry is displayed in the viewport. From the Display Options window (press D when hovering over the viewport), choose Set display options for ▸ Template Model Geometry. Then choose one of the options in the Draw drop-down menu. We recommend using either Smooth Shaded or Smooth Wire Shaded.

  10. Select the joints you want to mirror:

    • In the parameter editor, click the Group parameter’s icon.

    • In the viewport, ⇧ Shift select all the joints that you want to mirror (for example, all the limbs), and press Enter.

    Select the joints to mirror

    The joints you selected are added to the Group field. These are the joints that will be mirrored.

    Group parameter field
    Initial results of the Skeleton Mirror operation
  11. Select a Mirroring Style from the parameter editor. This parameter determines how the transforms of the original joints are mirrored to the new joints.

    • Choose By Rotation if you want to mirror the joints by rotating their input transforms. With this mode, any downstream posing can only be performed with FK rotations, because the animated translations will be flipped. This is useful if you plan to pose the skeleton using only FK rotations and do not want to negative scale any joints.

    • Choose By Scale if you want to mirror the joints by negative scaling their input transforms. With this mode, any downstream posing can be mirrored in both rotation and translation, but all the transforms will be negatively scaled. As such, this style may be problematic if you will be exporting your skeleton to a game editor or other DCC.

Blend skeletons

You can blend the transforms between two animation skeletons (whole or partial) with the Skeleton Blend SOP node. This is useful when you want to blend a sparse hierarchy to a dense hierarchy, or vice versa.

In the below example, we will blend a skeleton with an animated arm movement to a skeleton with an animated leg movement.

  1. Use a KineFx import node to bring in your animation skeleton. See Bringing animation and character data into KineFX for steps on how to import different data types into SOPs.

  2. Create a Skeleton Blend SOP and a Joint Deform SOP.

  3. Set up the network to do skeleton blending. The general procedure is:

    • Connect skeleton 1 (animated pose output, output 3) to the Skeleton Blend SOP (input 1).

    • Connect additional skeletons (animated pose output, output 3) to the Skeleton Blend SOP (multi-input).

    • Connect the Skeleton Blend SOP to the Joint Deform SOP.

    In this example, add two Rig Pose SOP nodes to animate the two different movements.

    The output of the Skeleton Blend SOP is the first input skeleton with the influence of the other skeleton(s) applied.

    Skeleton Blend SOP in the network
  4. Select the Skeleton Blend SOP. In the parameter editor, adjust its parameter settings.

    Group

    Allows you to pick the specific joints to blend.

    Blends

    The sliders allow you to control the amount of influence the different input skeletons have on the first skeleton. For example, setting the slider to 0.5 for the 2nd skeleton means that the output skeleton will use 50% of the 2nd skeleton’s animation.

    Blend Masking

    Lets you choose how the Blends parameter is utilized for the blend. You can select from three different modes:

    No Masking

    Use only the Blends sliders to control the amount of influence the different input skeletons have on the first skeleton.

    Set From Attribute

    Looks for an attribute from an upstream node to override the Blends parameter and set the amount of influence the input skeletons have on the output skeleton. You can specify this attribute with the Mask Attribute parameter. This mode also supports per-point blending.

    Scale From Attribute

    Looks for an attribute from an upstream node to supply a multiplier value for the Blends parameter. You can specify this attribute with the Mask Attribute parameter. This mode also supports per-point blending.

    World Space

    You can choose to blend in local space (World Space off) or world space (World Space on). By default, World Space is off.

    Note

    If you are blending animation skeletons in world space, the skeletons need to be in the same world space location before you use the blend operation.

    Each input’s animation
    Skeleton blend result

Add new joints to an imported skinned character

You can add new joints to the skeleton of a character imported into KineFX, add those new joints to the character’s existing capture (skin), and paint new capture weights for the new joints:

Joint Capture Proximity KineFX network
  1. Create a Skeleton SOP node.

  2. Connect the imported skeleton (KineFX import node, animated pose output, output 3) to the Skeleton SOP.

  3. Select the Skeleton SOP, click in the viewport, and press Enter. You are now in the Skeleton interaction state.

    This node will allow you to add the new joints to your character and have them be part of the capture. However, these joints will not be able to drive the capture until they have capture weights. You will add those weights with the Capture Layer Paint SOP.

  4. Create a Joint Capture Proximity SOP. This node will add any new joints you create with the Skeleton SOP to your character’s capture.

  5. Set up the Joint Capture Proximity SOP in the network:

    • Connect the KineFX import node (rest geometry output, output 1) to the Joint Capture Proximity SOP (rest geometry input, input 1).

    • Connect the Skeleton SOP output to the Joint Capture Proximity SOP (capture pose input, input 2).

  6. Create a Capture Layer Paint SOP. This node will allow you to assign capture weights to the new joints.

  7. Set up the Capture Layer Paint SOP in the network:

    • Connect the Joint Capture Proximity SOP output to the Capture Layer Paint SOP (rest geometry input, input 1).

    • Connect the Skeleton SOP output (or Rig Pose SOP output if you have one for posing) to the Capture Layer Paint SOP (capture pose input, input 2).

    • Connect the Capture Layer Paint SOP to the Joint Deform SOP.

  8. Turn on the display flag for the Joint Capture Proximity SOP, and select the Capture Layer Paint SOP.

  9. In the viewport, paint the capture weights for your new joints.

Your new joints should now affect your character’s capture.

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