On this page | |

Since | 18.0 |

## Overview

This node copies geometry from the first input onto points in the second input, computing orientations based on the tangents of curves, with various options for specifying up vectors and additional rotations. These orientations are equivalent to those in the Orientation Along Curve node and the Sweep node.

This treats all polygons as curves, even if they are closed.

## Parameters

Source Group

A subset of the source (first input) primitives or points to copy from. You can create groups with the Group SOP.

Source Group Type

The type of group that **Source Group** specifies.

If **Guess from Group** is specified and the group type is ambiguous, the guess is made that **Group** specifies a primitive group.

Curve Group

Group of primitives in the second input around which orientations should be computed and the source primitives or points should be copied and transformed.

Piece Attribute

The name of an integer or string target point attribute, and corresponding source point or primitive attribute, indicating what parts of the source should be copied to each target point. All source points or primitives with a value matching a target point’s value will be copied to that target point. If the target point attribute is an integer attribute and no source attribute exists, the integer will specify which single primitive to copy from the source to each target point.

Pack and Instance

Pack the input source geometry into an Packed Geometry primitive before copying. This results in the input geometry being shared (instanced) by each copy rather than being duplicated for each copy.

If a **Source Group** or **Piece Attribute** are specified, subsets of the source geometry will be packed into Packed Geometry primitives.

Pivot Location

Specifies how to initialize the offset for the point referenced by the packed primitive.

Display As

The viewport LOD for the specified packed primitives.

## Frame

Tangent Type

The overall method for computing tangents at each vertex. If **Transform Using Curve Point Attributes** is on and the input has point `N`

(vector), `orient`

(quaternion), `rot`

(quaternion), or `transform`

(3×3 or 4×4 matrix), this is ignored in favor of the Z axis from the transform determined by these attributes. The **Stretch Around Turns** option always computes the stretch and stretch direction based on the **Average of Edge Directions** tangent, regardless of this tangent type, since it’s undefined otherwise. See the descriptions and image of the options below.

Average of Edge Directions

Average of the normalized directions of the previous and next edge

Central Difference

Average of the unnormalized previous and next edge vectors. This is similar to the **Central Difference** option for the **Velocity Approximation** on the Trail node.

Previous Edge

Previous edge direction

Next Edge

Next edge direction

Z Axis (Ignore Curve)

The tangent will be chosen as the Z axis, regardless of the curve.

Make Closed Curve Orientations Continuous

When enabled, any accumulated roll (torsion) around a closed curve will be canceled out in a manner spread out around the curve, instead of suddenly in the final edge. Planar curves don’t have any inherent accumulated roll around the curve, but this applies to the **Partial Twist** option (when **Apply Roll or Twist** is enabled) as well, so any twist that isn’t a multiple of a full twist will be rounded to a multiple of a full twist.

Extrapolate End Tangents

When enabled, end (including beginning) tangents will be extrapolated based on the **Tangent Type** and the two edges closest to the end, instead of just being chosen as the end edge direction. This is most useful for cases similar to when a curve is intended to represent a circular arc, so that end orientations will be rotated as expected. See the image above.

Transform Using Curve Point Attributes

When enabled, any curve input point attributes `P`

, `N`

, `up`

, `orient`

, `rot`

, `trans`

, `pivot`

, `pscale`

, `scale`

, and `transform`

will be used to form each transform, primarily as specified here. If `N`

is present and none of `up`

, `orient`

, `rot`

, or `transform`

are present, `N`

will be used as the curve tangent and the rest of the rotation will be computed as usual. If `up`

is present and none of `N`

, `orient`

, `rot`

, or `transform`

are present, the tangent will be computed as usual, and `up`

will be used as the up vector at each vertex, before any **Apply Roll or Twist** is applied.

Target Up Vector

Up vector for each curve to target, to break the tie between all possible rolls around the tangent. If a curve is planar, the **Curve Normal** option should ensure that the up vector is perpendicular to the plane; if the curve is a straight line, this option will fall back to using the y axis as a target up vector. The **Attribute** option can use a primitive or detail attribute to select the up vector for each curve. To specify separate up vectors on all curve points, use the **Transform Using Curve Point Attributes** and provide a point attribute named `up`

, in which case, this target up vector is ignored.

Target Up Vector at Start (else Average)

When enabled, the roll for each curve is chosen such that the up vector of the first vertex is as close as possible to the target up vector while still being perpendicular to the tangent vector. When disabled, that applies to the average of all vertex up vectors, instead of the first vertex. This must be enabled in order to use the **Use Target End Up Vector Option**.

Use Target End Up Vector

When enabled and **Target Up Vector at Start** is enabled, the twist along each curve is adjusted to ensure that the end up vector is as close as possible to the target up vector, without affecting the start up vector. If **Target Up Vector** is **Attribute** or **Custom**, there are separate **End Up Attribute** and **End Up Vector** parameters, in order to specify different end up vectors from the start up vectors.

Start Up Attribute

When **Target Up Vector** is **Attribute**, this is the name of the primitive or detail attribute to use for each curve’s target up vector. When **Target Up Vector at Start** is enabled, this provides the target up vectors at the start of the curves. When **Target Up Vector at Start** is disabled, this provides the target for the average up vector along each curve.

End Up Attribute

When **Target Up Vector** is **Attribute** and **Use Target End Up Vector** is enabled, this is the name of the primitive or detail attribute that provides the target up vectors at the end of the curves. The twist of each curve is adjusted to ensure that the end up vector is as close as possible to the target end up vector, without affecting the start up vector.

Start Up Vector

When **Target Up Vector** is **Custom**, this is the target up vector to use for each curve. When **Target Up Vector at Start** is enabled, this provides the target up vector at the start of the curves. When **Target Up Vector at Start** is disabled, this provides the target for the average up vector along each curve.

End Up Vector

When **Target Up Vector** is **Custom**, this is the target end up vector to use for each curve. The twist of each curve is adjusted to ensure that the end up vector is as close as possible to the target end up vector, without affecting the start up vector.

## Additional Rotations

Rotate Order

The order in which to apply the Pitch (around X/out), Yaw (around Y/up), and Roll or Twist (around Z/tangent) options below if multiple are enabled. Pitch and Yaw may be useful to effectively apply a pre-transform to whatever the orientation will be applied to, which is why they default to being applied before the Roll or Twist. These rotations are effectively applied before the transforms from the curves, having the net effect of them being rotations in the space of the curve frames.

Apply Roll or Twist

When enabled, the parameters below for applying a roll rotation around the tangents (computed above) are enabled.

Roll

Rotation in degrees around the tangent, applied to every orientation, if **Apply Roll or Twist** is enabled.

Twist Per

Manner in which to apply the twist value specified below by `(360*(Full Twists) + (Partial Twist))`

. See the descriptions and image below.

Per Edge

The specified twist will be applied once for each edge, so for example, a **Partial Twist** of 60 degrees along each of 6 edges would result in a total of 360 degrees of twist. **Full Twists** will have no effect in this case, since a full twist in a single edge restores the original orientation.

Per Unit Distance

The twist for each edge will be the length of the edge times the twist value in degrees.

Scale by Attribute

The twist value in degrees will be multiplied at each vertex by the attribute given by **Twist Ramp Attribute**, which can be a vertex, point, primitive, or detail attribute. This product is applied as a roll at each vertex, not as an accumulating twist, so that if the attribute goes from 0 to 1 along a curve, the twist value will be the total twist applied.

Per Full Curve by Edges

The specified twist will be applied once across each whole curve, with an equal amount of twist applied across each edge, regardless of the length of each edge. For example, a **Partial Twist** of 60 degrees along a curve with 6 edges will yield a 10 degree rotation along each edge in this case.

Per Full Curve by Distance

The specified twist will be applied once across each whole curve, with the amount of twist per edge being proportional to the length of the edge.

Full Twists

Integer number of full twists to add for each unit determined by **Twist Per**. This is just provided for convenience; it is just multiplied by 360 and then added to **Partial Twist**. If **Twist Per** is **Per Full Curve by Edges** or **Per Full Curve by Distance**, this corresponds with full twists along each full curve.

Partial Twist

Twist in degrees around the tangent, to add for each unit determined by **Twist Per**. This is added to 360 times **Full Twists**.

Twist Ramp Attribute

When **Twist Per** is **Scale By Attribute**, this is the name of the vertex, point, primitive, or detail attribute to multiply by the combination of **Full Twists** and **Partial Twist** in degrees. This product is applied as a roll at each vertex, not as an accumulating twist, so that if the attribute goes from 0 to 1 along a curve, the twist value will be the total twist applied.

Apply Yaw

When enabled, the parameters below for applying a yaw rotation around the up vectors (computed above) are enabled.

Yaw

Rotation in degrees around the up vector, applied to every orientation, if **Apply Yaw** is enabled.

Yaw Per

Manner in which to apply the **Incremental Yaw** value specified below.

Per Edge

The specified yaw will be applied once for each edge, so for example, an **Incremental Yaw** of 60 degrees along each of 6 edges would result in a total of 360 degrees of yaw (spinning around the up vector).

Per Unit Distance

The yaw for each edge will be the length of the edge times the **Incremental Yaw** value in degrees.

Scale By Attribute

The **Incremental Yaw** value in degrees will be multiplied at each vertex by the attribute given by **Yaw Ramp Attribute**, which can be a vertex, point, primitive, or detail attribute. This product is applied as a yaw at each vertex, not as an accumulating yaw, so that if the attribute goes from 0 to 1 along a curve, the **Incremental Yaw** value will be the total yaw applied.

Per Full Curve by Edges

The specified **Incremental Yaw** will be applied once across each whole curve, with an equal amount of yaw applied across each edge, regardless of the length of each edge. For example, an **Incremental Yaw** of 60 degrees along a curve with 6 edges will yield a 10 degree rotation along each edge in this case.

Per Full Curve by Distance

The specified **Incremental Yaw** will be applied once across each whole curve, with the amount of yaw per edge being proportional to the length of the edge.

Incremental Yaw

Yaw in degrees around the up vectors, to add for each unit determined by **Yaw Per**.

Yaw Ramp Attribute

When **Yaw Per** is **Scale By Attribute**, this is the name of the vertex, point, primitive, or detail attribute to multiply by **Incremental Yaw** in degrees. This product is applied as a yaw at each vertex, not as an accumulating yaw, so that if the attribute goes from 0 to 1 along a curve, the **Incremental Yaw** value will be the total yaw applied.

Apply Pitch

When enabled, the parameters below for applying a pitch rotation around the out vectors (perpendicular to the tangent and up vectors computed above) are enabled.

Pitch

Rotation in degrees around the out vector (perpendicular to the tangent and up vectors), applied to every orientation, if **Apply Pitch** is enabled.

Pitch Per

Manner in which to apply the **Incremental Pitch** value specified below.

Per Edge

The specified pitch will be applied once for each edge, so for example, an **Incremental Pitch** of 60 degrees along each of 6 edges would result in a total of 360 degrees of pitch (tumbling around the out vector).

Per Unit Distance

The pitch for each edge will be the length of the edge times the **Incremental Pitch** value in degrees.

Scale By Attribute

The **Incremental Pitch** value in degrees will be multiplied at each vertex by the attribute given by **Pitch Ramp Attribute**, which can be a vertex, point, primitive, or detail attribute. This product is applied as a pitch at each vertex, not as an accumulating pitch, so that if the attribute goes from 0 to 1 along a curve, the **Incremental Pitch** value will be the total pitch applied.

Per Full Curve by Edges

The specified **Incremental Pitch** will be applied once across each whole curve, with an equal amount of pitch applied across each edge, regardless of the length of each edge. For example, an **Incremental Pitch** of 60 degrees along a curve with 6 edges will yield a 10 degree rotation along each edge in this case.

Per Full Curve by Distance

The specified **Incremental Pitch** will be applied once across each whole curve, with the amount of pitch per edge being proportional to the length of the edge.

Incremental Pitch

Pitch in degrees around the up vectors, to add for each unit determined by **Pitch Per**.

Pitch Ramp Attribute

When **Pitch Per** is **Scale By Attribute**, this is the name of the vertex, point, primitive, or detail attribute to multiply by **Incremental Pitch** in degrees. This product is applied as a yaw at each vertex, not as an accumulating yaw, so that if the attribute goes from 0 to 1 along a curve, the **Incremental Pitch** value will be the total yaw applied.

## Scales and Shears

Normalize Scales

When enabled, any scales or shears coming from **Transform Using Curve Point Attributes**, for example from `pscale`

, `scale`

, or `transform`

attributes, will be canceled out.

Uniform Scale

This scale is applied to the transform after **Normalize Scales**.

Stretch Around Turns

When enabled, this stretches the transforms in the direction of curvature around turns in the curves, which is primarily for use with cross sections, for example with the Sweep node to avoid the cross section appearing to be squashed along edges. This is usually the desired behavior in the Sweep node, but not usually for other uses.

Max Stretch

When **Stretch Around Turns** is enabled, this is the maximum amount that transforms will be stretched, to avoid stretching too far when a curve almost reverses direction in a single turn.

## Attributes

Reset Attributes from Target

Sets the **Attributes from Target** parameters to the default behavior.

Attributes from Target

Copy attributes from the target curves' points onto the copies, according to the values in the attribute fields below.

Apply to

Indicates whether to apply this row’s target point attributes to the output point, vertices, or primitives. A single target point attribute can only be applied to one type of output element.

by

Method by which to apply this row’s target point attributes. Values can be applied by copying, or by multiplying with, adding to, or subtracting from source attributes, or the “Nothing” option can be selected to override an earlier row indicating to apply an attribute. If no matching source attribute exists, the multiplying and adding options will copy, and the subtracting option will copy the negated value, (as if subtracting from zero). Multiplying, adding, and subtracting only apply to numeric and group attributes; other attributes will be copied. For groups, the operations correspond with intersection, union, and subtraction, respectively.

Attributes

Pattern of target point attribute names to match for this row.

## Inputs

Geometry to Copy

The geometry to copy.

Target Curves to Copy to

Copy the source geometry onto the points of the curves in this geometry.

See also |