Houdini 21.0 Character KineFX

Neck Head

Sets up neck and head controls for a character.

Since 21.0

This component sets up neck and head controls for a character, and can be run in a loop over different segments, or parts, of the character. It is similar to the spline component.

The example in this file demonstrates how to use the neck rig component for the Otto test geometry.

NeckComponent

The neck component creates the controls shown in the image below. It sets up a tangent spline with 4 controls - the root control, root CV (control vertex), tip CV, and tip control:

By default, the CVs are parented to the closest outer control, so the root CV is parented to the root control, and the tip CV is parented to the tip control. The root control is the main parent of the neck, and the mid and end controls allow you to further adjust the rotation of the neck and head:

Neck controls

The default position of the end control is higher up on the head, but its pivot position is in the middle of the head. You can change the end control position with the End Control Offset parameter:

End control

If you want to rotate the head only, use the end control. If you want the neck to twist with the head rotation, use the tip control:

End control (left), tip control (right)

To stretch the neck, turn on the Add Stretch Control parameter in the Settings tab. This adds a slider configuration parameter to the neck component’s menu that allows you to adjust the stretch of the neck:

Stretch control

Parameters

Name

The name to add to the nodes created by this component. When using Segments, the segment name is also added to the node names.

Settings

Curve

Type

The type of curve to create from the control points.

Curve Order

The number of control points used to construct the curve. By default, Curve Order is set to 4 because we have the following control points for the neck - the root control, root CV, tip CV, and tip control.

A Bezier curve (the curve type is set in parameter Type) requires that the number of control points is equal to the curve order. Compound curves share a control point between their individual curve segments, so each additional curve segment requires an additional order-1 control points. This requirement can be expressed by the equation <number_of_control_points> % (order-1) == 1. See control spline for more information.

Pin Root

When turned on, constrains the orientation of the root joint to the root control (the root joint is the joint driven by the root control).

Pin Tip

When turned on, constrains the orientation of the tip joint to the tip control (the tip joint is the joint driven by the tip control). See the spline component for an example.

Stretch

Add Stretch Control

When turned on, adds a slider configuration parameter in the neck component’s menu that allows you to adjust the stretch of the neck:

Stretch control

Stretch

Specifies whether to keep the length of the neck. When set to 0, the neck keeps its length. When set to 1, the neck stretches to follow the tip control.

Stretch Scale

Controls the amount of stretch. Increasing this value increases the effect of the stretch.

Squash Scale

Controls the amount of squash. Increasing this value increases the effect of the squash.

Keep Tip Scale

When turned on, the scaling of the neck at the tip remains unchanged as you stretch the neck. When turned off, the neck at the tip is scaled as you stretch the neck.

Note

You can only see the effects of the scaling if Stretch Scale or Squash Scale is greater than 1.

Keep Tip Scale on (left), Keep Tip Scale off (right)

Driven

Segments

Segments are tags that separate each neck chain. Tags can be set up on skeleton joints using an Attribute Adjust Array SOP. See preparing skeletons for rigging for more information.

If Segments is empty, the neck logic is run once.

Note

The Segments parameter does not take APEX path patterns, for example, the #<tag> function. Instead, specify the tag names directly in this field.

Driven

The TransformObject nodes to drive, for example, “neck_01 neck_02 neck_03”. This parameter also accepts APEX path patterns, so you can specify tags in this field, for example, #neck.

It’s good practice to also specify the bind tag that is set up by default on the FK transform component’s Tags parameter. The FK transform component is normally the first component used to start building a rig. Including the bind tag helps to ensure that you don’t include other controls that might have inherited, for example, the neck tag. So for this component, you can set Driven to “#bind & #neck”.

Driver

Make sure the control names are unique. To avoid naming conflicts when creating multiple neck setups, you can specify the neck segment using the string “{segment}”. For example, if your segment is named neck_01 (Segments is set to neck_01), you can set Root Name to {segment}_root_ctrl. The value of Segments replaces the string “{segment}”, so the root control is named neck_01_root_ctrl.

Root Name

The name of the root control.

Root CV Name

The name of the root tangent CV.

Mid Name

The name of the middle control.

Tip CV Name

The name of the tip tangent CV.

Tip Name

The name of the tip control.

End Name

The name of the head control. This control doesn’t affect the neck.

Root CV Offset

The offset to add to the root tangent CV.

Tip CV Offset

The offset to add to the tip tangent CV.

End Control Offset

The offset to add to the end control.

Parent

Root

The parent of the root control. If left empty, the root control is parented to its associated TransformObject node’s parent. For example, if the root control sits at node C_neck_02, and C_neck_02's parent is C_neck_01, then the root control will be parented to C_neck_01.

You can also set parent tags on the skeleton, and use the parent tag plus the Segments tag to get the parent for each segment. For example, if your segment is named neck (Segments is set to neck), and you tag the parent joint with neck_parent, then you can set Root to {segment}_parent. The value of Segments is used to replace the string “{segment}”.

To unparent the root control, set this parameter to an underscore (“_”).

This parameter accepts APEX path patterns, so you can specify tags in this field, for example, #<tag>.

Tip

The parent of the tip control. If left empty, the tip is parented to the Root. To unparent the tip control, set this parameter to an underscore (“_”). This parameter accepts APEX path patterns, so you can specify tags in this field.

CV

The parent of the CVs. If left empty, the CVs are parented to the closest outer control. To unparent the CV controls, set this parameter to an underscore (“_”). This parameter accepts APEX path patterns, so you can specify tags in this field.

Tags

Component

The tags to add to the neck node (rig::SplineInterpolateTransforms) created by this component.

Root

The tags to add to the root control TransformObject nodes created by this component.

Tip

The tags to add to the tip control TransformObject nodes created by this component.

CV

The tags to add to the CV TransformObject nodes created by this component.

Shape

The APEX Configure Controls SOP provides more options for changing the look of the controls.

Shape

The shape of the controls. It can be set to any of the built-in APEX control shapes.

Color

The color of the control shapes. To inherit the shape color from the skeleton, set this value to (0, 0, 0).

Translate

The translation of the control shapes.

Rotate

The rotation of the control shapes.

Scale

The scale of the control shapes. To inherit the shape scale from the skeleton, set this value to (0, 0, 0).

See also

KineFX

Overview

Preparing character elements

Rigging with APEX graphs

Building rig graphs with APEX Script

Rigging with rig components

Animating in the viewport

SOP-based animation

Deformation

Animation retargeting

Pre-H20

Panes

Appendix