On this page | |

Since | 18.5 |

This solver generates world transforms from a curve and a list of segment lengths.

The curve can be defined by referencing existing points, point transforms, or a curve primitive.

## Parameters

Signature

Specifies which inputs and parameters are used to create the world transforms.

The Curve Solver VOP node supports multiple signatures and its inputs and parameters are dynamic.

Target IDs, Control IDs Array

Use an array of **Target Point** IDs and an array of **Control Points** IDs.

Target IDs, 4 Control IDs

Use an array of **Target Point** IDs and 4 **Control Points** IDs (Root, Root Tangent, Tip Tangent, Tip).

This signature is a shortcut for easily creating a Bezier curve with 4 control points.

Target IDs, Control Transforms Array

Use an array of **Target Point** IDs and an array of **Control Point** matrices.

Target IDs, 4 Control Transforms

Use an array of **Target Point** IDs and a 4 **Control Points** matrix (Root,Root Tangent, Tip Tangent, Tip).

This signature is a shortcut for easily creating a Bezier curve with 4 control points.

Target IDs, Curve Geometry with Primitive Index

Use an array of **Target Point** IDs and curve from existing geometry.

Target Transforms, Control IDs Array

Use an array of target transforms and an array of **Control Points** IDs.

Target Transforms, 4 Control IDs

Use an array of target transforms and 4 **Control Points** IDs (Root,Root Tangent, Tip Tangent, Tip).

This signature is a shortcut to easily create a Bezier curve with 4 control points.

Target Transforms, Control Transforms Array

Use an array of target transforms and an array of **Control Point** matrices.

Target Transforms, 4 Control Transforms

Use an array of target transforms and a 4 **Control Point** matrix (Root,Root Tangent, Tip Tangent, Tip).

This signature is a shortcut for easily creating a Bezier curve with 4 control points.

Target Transforms, Curve Geometry with Primitive Index

Use an array of **Target** transforms and a curve from existing geometry.

Targets File

Specifies which input contains the geometry file to use for the targets point IDs.

Target Points

Specifies the *target* points as an array of point IDs or matrices. If an input is not connected, you can use the parameter field to create a point group.

Controls Input

Specifies where to find the geometry file to use for the controls point IDs.

Control Points

Specifies the *control* points as an array of point IDs or matrices. If an input is not connected, you can use the parameter field to create a point group.

Primitive Index

Specifies the primitive index in the `ctrl_file`

to define which curve primitive to use.

Root

Specifies the root control point as a point index or a matrix.

Root Tangent

The root tangent control point as a point index or a matrix.

Tip Tangent

The tip tangent control point as a point index or a matrix.

Tip

The tip control point as a point index or a matrix.

Curve Type

Determines the type of curve to create.

Polygon Lines

Creates a curve made of straight lines.

Bezier Curve

Creates a Bezier curve from the **Control Points**.

Nurbs Curve

Create a NURBS curve from the **Control Points**.

Curve Order

Specifies the spline order for the generated curve.

Curve LOD

Specifies the curve’s level-of-detail. Uses a floating point level-of-detail to determine conversion resolution. A value of 1 keeps the same number of breakpoints as the number of control point.

Curve Divisions

Specifies the exact number of points to be computed within each span when determining the curve length. The curve length is used for stretching.

Stretch

Specifies the stretch factor. A value of 1 stretches the input lengths evenly to match the curve length before running the solver. A value of 0 keeps the input lengths as is. A value between 0 and 1 linearly interpolates the stretch factor. Scale along the curve direction is also adjusted.

Stretch Tolerance

Specifies a world space position tolerance that is used to snap the tip joint to the end of the curve.

Squash

Specifies the squash factor which controls the scaling on the 2 axes orthogonal to the curve. A value of 0 disables leaves the scales intact. A value of 1.0 will compress the scales when the curve is longer than the orignal curve, or expand the scales when it’s shorter. A value between 0 and 1 linearly inteporlates the scales.

Lookat Axis

Determines the axis that points in the curve tangent direction.

Up Axis

Determines the axis that points in the curve normal direction.

Twist Mode

Specifies how the curve normals are transferred to the bone chain. The normals are interpolated on the curve between the curve breakpoints. Since breakpoints (and not control points) lie on the curve, it is more meaningful to interpolate the breakpoints rather than the control vertex values even though breakpoint normals are calculated from the control vertices.

Default

The bone chain normals approximate the curve normals as much as the curve parameters allow. For example, Path parameters carry extra information that allow twists of more than 360 degrees.

None

The bone chain maintains its own normals defined by the rest position.

Quaternion

The bone chain normals interpolate the curve normals using quaternion rotation of the vectors. For example, the bone chain normals lie on the shortest arc defined by two curve normals on a unit sphere.

Clamped Angle

The bone chain normals are calculated using twist angles around the curve (between the curve points at which a normal is defined). The angle difference is restricted to the interval between -180 to 180 degrees.

Angle

The bone chain normals are calculated using twist angles. This parameter is similar to **Clamped Angles**, except
the twist angles around the curve are *not* restricted. For this parameter, the curve must carry
additional information (see Object Path Tool). Otherwise, this option is downgraded to **Clamped Angle**.

Twist Attribute

Defines the float attribute to use for the twist. This works only with when the controls are defined as a curve primitive or as point IDs. You can use the name of vector attribute with .x, .y, .z, /nodes/vop/0, /nodes/vop/1, /nodes/vop/2 suffixes to access individual components.

This parameter only has an affect when **Twist Mode** is set to **Clamped Angle** or **Angle**.

Root Orientation

Specifies whether the the first joint keeps the orientation of the first control or uses the orientation from the computed curve.

Tip Orientation

Specifies whether the last joint keeps the orientation of the last control or uses the orientation at the tip of the computed curve.

Scale Mode

Specifies how the resulting joints are scaled. The joints can use a unit scale or keep the target scales.

## Inputs

`target_file`

The geometry file to use for the target point IDs.

`targets`

The target points as an array of point IDs or matrices.

`ctrl_file`

The geometry file to use for the controls point IDs.

`ctrl_prim`

The primitive index in the `ctrl_file`

that defines which curve primitive to use.

`ctrls`

The control points as an array of point IDs or matrices.

`root`

The root control point as a point index or a matrix.

`root_tanget`

The root tangent control point as a point index or a matrix.

`tip_tangent`

The tip tangent control point as a point index or a matrix.

`tip`

The tip control point as a point index or a matrix.

`fmt`

The type of curve to create. Can be polygon lines (straight lines), Bezier curve (from control points), or a NURBS curve (from control points).

`order`

Spline order of generated curve.

`lodu`

Level-of-detail for the generated curve. Uses a floating point level-of-detail to determine the conversion resolution.

`divs`

Exact number of points that are computed within each span to determine the curve length.

`stretch`

Scale factor (0-1) by which the input lengths are scaled to match the curve length before running the solver.

`stretch_tol`

The world space position tolerance that is used to snap the tip joint to the end of the curve.

`lookataxis`

The axis that points in the curve tangent direction.

`lookupaxis`

The axis that points in the curve normal direction.

`twists`

When using **Clamped Angle** or **Angle** twist mode, defines the twists as an array of floats. This overloads the angle from the **Twist Attribute**.

`lengths`

An array of floats to provide the rest lengths between each joint. The array must have the same number of elements as the number of input transforms or point ids. When not connected, the lengths are computed from the input transforms.

## Outputs

`file`

A pass through returning the File Input. It is invalid when using a signature with Targets Transforms.

`pts`

An array of integer with Point IDs. It outputs the resolved target point IDs. It is invalid when using a signature with Targets Transforms.

`xforms`

An array of matrices with World Transforms for each target.

`localxforms`

Not yet implemented.

See also |