force_table_of_contents #
Adjust Length changes the length of groom curves while preserving their shape. Curves that need to grow are extended from the tip; curves that need to shrink are trimmed. After length adjustment, curves can optionally be aligned toward the skin surface normal and/or straightened. A final resample pass can change the point count to meet segment distance or count requirements.
All controls can be driven per-curve from parameters, curve attributes, or mesh attributes painted on the skin surface.
Adjustments #
Length #
The target length for each curve is computed as:
target = clamp(base_length * scale + offset, minimum, maximum)
Where base_length is the curve’s current arc length.
Each component can be independently enabled or disabled:
| Control | Default | Description |
|---|---|---|
| Set Length | off | Overrides the base length with an explicit value instead of using the curve’s measured arc length. |
| Scale | 1.0 | Multiplier on the base length. Values less than 1 shorten, greater than 1 lengthen. |
| Offset | 0.0 | Added after scale. Positive values lengthen, negative shorten. |
| Minimum | 0.0001 | Floor clamp. Curves will never be shorter than this. |
| Maximum | off | Ceiling clamp. When enabled, curves will never be longer than this. |
Tip Extrapolation #
When a curve grows beyond its original length, new positions must be generated past the tip. Two extrapolation modes are available:
- Linear (default): Extends in a straight line along the tip tangent.
- Polynomial: Continues the tip’s curvature with exponential decay, producing a natural-looking arc that gradually straightens. The Decay parameter controls how quickly the curvature fades.
Attribute Handling During Extension #
When curves are extended, point attributes on the new positions need values. Three modes control this per attribute:
- Interpolate (default): The attribute is stretched to cover the full target length. The original value distribution is remapped proportionally across the new length.
- Extrapolate: The attribute is linearly extended from its last two values. Quaternion attributes extrapolate by repeating the tip’s delta rotation, preserving spin. List attributes in the Extrapolate Attributes field (space-separated).
- Hold: The original distribution is preserved at its original arc positions. Positions beyond the original tip hold the tip value. List attributes in the Hold Attributes field (space-separated).
Shape #
These controls modify the curve’s shape and surface alignment.
| Control | Range | Description |
|---|---|---|
| Surface Alignment | 0..1 | Blends the root tangent toward the skin surface normal. At 1.0, the curve base points straight out from the surface. |
| Straightness | 0..1 | Blends each point’s orientation toward a straight line. At 1.0, all curvature is removed. |
| Smoothing | 0..100+ | Reduces the orientation delta between segments to minimize high frequency noise. With higher Smoothing Iterations, progressively lower frequency noise will be smoothed out. |
Combined at full strength, these produce a straight curve perpendicular to the skin — useful as a starting point for procedural styling.
Smoothing Iterations controls how many relaxation passes the Smooth strength is applied over — more iterations spread the smoothing further along the curve. It defaults to the node parameter, but can be overridden per-curve from a parameter, curve attribute, or mesh attribute like the other controls.
Pin Tip anchors each curve’s tip to its original position while smoothing. By default smoothing keeps the root fixed and lets the tip drift as the interior relaxes; with Pin Tip enabled the tip’s drift is distributed back along the curve so both ends stay put. This slightly alters segment lengths (which are otherwise preserved exactly).
Attribute Sources #
Every control above supports three source modes:
Source ||
Description ||
Parameter |
Uses the value set directly on the node. All curves get the same value.
Curve Attribute |
Reads from a named attribute on each curve. When reference curves are connected (Input 2), reads from the reference instead. Checks prim attributes first, then falls back to the root point.
Mesh Attribute |
Samples a named attribute from the rest mesh at each curve’s root position (via skinprim/skinprimuv). Useful for painted maps that vary across the surface.
Set Length from Reference Curves: When Set Length is enabled with source set to Reference Curve Length, the length is measured directly from the corresponding reference curve on Input 2 using its arc length. This requires that the reference curves on Input 2 have matching primitive numbers — each curve on Input 0 reads the length of the reference primitive with the same @primnum. If the reference primitive is missing or has zero length, the curve’s own length is used as a fallback.
Resampling #
After length adjustment and alignment, an optional resample pass can change the number of points on each curve. This is useful for matching segment density requirements or reducing point counts.
| Control | Default | Description |
|---|---|---|
| Segment Length | off | When enabled, computes the point count from a target distance between points. Shorter distances produce more points. |
| Max Segments | off | When enabled, caps the segment count to a hard upper limit. Applied after segment length computation. |
| Min Segments | 3 | Floor on segment count. Curves will always have at least this many segments regardless of other settings. |
The Minimum Segment Distance control (on the length adjustment) interacts with resampling: if the target length divided by the current segment count would produce segments shorter than this distance, it either reduces the segment count or grows the length to compensate (depending on mode). This minimum is also respected by the resample pass when computing point counts.
If the computed point count equals the original, the resample pass is skipped entirely.
Optional Output Attributes #
By default, Adjust Length only modifies curve positions. Output attributes can be individually enabled and written to configurable names on the original input curves.
| Attribute | Type | Description |
|---|---|---|
| ptdist | point float | Averaged distance to neighboring points (half-segment on each side). |
| segdist | point float | Distance from each point to the previous point (0 at root). |
| tangentu | point vector | Unit tangent direction along the curve. |
| curveu | point float | Arc-length parameterized 0..1 along the final curve. |
| orient | point vector4 | Absolute orientation frame at each point. |
| delta_orient | point vector4 | Relative frame rotation between consecutive points. |
| rest_length | prim float | Final measured arc length of the processed curve. |