Houdini 20.5 Nodes Geometry nodes

Path Deform geometry node

Deforms geometry using the shape of a curve.

On this page
Since 18.0

Overview

This node bends geometry to follow the shape of a curve. It also lets you apply secondary deformations such as scaling and twisting to the curved model.

This is useful in many scenarios, such as:

  • Model a long flexible object (such as a belt) straight, then use this node to deform it into the desired shape.

  • Animate the curve to animate deformation of static geometry, for example a cracking whip.

  • Animate the mapping of the model onto the curve, for example to make an swimming shark follow and bend along a preset path.

This node is related to the Sweep node. Whereas the Sweep node generates geometry by interpolating between profile shapes along a curve, this node reshapes an existing model by mapping the curve’s differences from a straight line onto the points of the model.

Capturing the model

  • By default, the node assumes the geometry is modeled along the Z axis, with the “front” in the positive Z direction (this is the standard default for Houdini tools). You can change this using the Forward direction parameter on the Capture and Align tab.

  • This node only bends the parts of the geometry inside a capture region. Parts of the model outside the capture region still move with the rest of the model, but do not bend or stretch. This is useful if you only want the front, or middle, or back of the model to bend.

  • By default, the node captures the entire model, and centers the capture region on the model’s center.

  • By default, the geometry does not need to be at the origin. The node will automatically snap the model onto the curve, ignoring any translation away from the origin.

    You can choose instead to incorporate the model’s offset from the origin as an offset from the curve. Turn off Center geometry on curve on the Capture and Align tab.

  • You can then adjust the start and end of the capture region using Geo capture start and Geo capture end parameters on the Capture and Align.

  • It is possible to set a custom capture origin and custom offset by setting Geo capture origin to Custom on the Capture and Align tab.

    You can imagine the node starting with a plane centered at the capture origin, perpendicular to the forward direction. It then sweeps the plane along the forward direction, capturing any geometry. If the origin is past the start of the geometry, the start of the geometry will not be captured. If the origin is before the start of the geometry (and/or offset in the other two axes), the model will be offset from the curve.

Tips and notes

  • If you drew the curve in the “wrong” direction, you can reverse it on the Capture and align tab. (You don’t need to add a separate node to reverse the curve before the input.) You can choose to also reverse the normals or not.

  • This node works by moving the points of the input geometry. It does not change the topology (that is, the number of points, or how the points connect to form polygons) of the model.

  • You can use an attribute to specify certain parts of the model as more or less rigid (resistant to deformation). See the Rigidity section at the bottom of the Map and Deform tab.

Inputs

Geometry to deform

The node reshapes this geometry.

Spine curve

The node uses the curve connected to this input to reshape the geometry in the first input.

Parameters

Group

A group name, or list of primitive, edge, point, or vertex numbers specifying what geometry in the input to deform (see group syntax). Click the Reselect button to the right of the field to select geometry in the viewport. If this field is blank, the node deforms all geometry in the first input.

Group type

The component type the names/numbers in the Group field refer to (primitives, edges, points, or vertices).

Curves

A primitive group on the second input used to specify which curves to map geometry onto.

Match Geometry to Curves using Piece Attribute

Whether to use a piece attribute on both the geometry on the curves to specify which piece of geometry is mapped to each curve.

Piece Attribute

The attribute on both the curves and the geometry used to match pieces of geometry with curves. Each piece of geometry is mapped to each matching curve with the same piece attribute value.

Map and Deform

Mappings

These parameters let you map the deformed model onto the curve, by setting a start offset and length.

Enable Deformation

Turning this off prevents the node from deforming the input geometry. This can be useful to let you see how the capture region relates to the pre-deformed input model.

Map Length Using

How you want to specify the length (as measured along the Forward direction) of the deformed model:

Fraction of Curve Length

Specify the length as a fraction of the length of the curve, from 0 to 1. This is useful, for example, to stretch the model to run the full length of the curve by choosing this option and setting the value to 1.

Fraction of Geo Length

Specify the length as a fraction of the length of the pre-deformed model (measured along the Forward direction), from 0 to 1. This is useful, for example, to maintain the original length of the model by choosing this option and setting the value to 1.

Distance

Specify the deformed length in world-space units.

End Position Offset

The length of the deformed geometry when mapped onto the curve, using the units specified in the Offset end using dropdown menu.

Override

Whether to override the Length with a primitive attribute on the curves.

Pos End Attribute

A primitive attribute on the curves specifying the Length on each curve.

Offset Position Using

How you want to specify the model’s position on the curve:

Curve U Position

Specify the start position as a fraction of the length of the curve, from 0 to 1, where 0 has the start of the model at the start of the curve, and 1 has the start of the model at the end of the curve.

Fraction of Geo Length

Specify the start position as a fraction of the length of the model (measured along the Forward direction), from 0 to 1, where 0 has the start of the model at the start of the curve, and 1 has the end of the model at the end of the curve.

Distance

Specify the distance along the curve in world-space units.

Position Offset

Sets the start position of the model along the curve, using the units specified in the Offset position using dropdown menu.

Override

Whether to override the Position Offset with a primitive attribute on the curves.

Pos Offset Attribute

A primitive attribute on the curves specifying the Position Offset on each curve.

Uniform Scale

The amount to scale the geometry before capturing and mapping to the curve.

Enable Attibute Scale

Whether to override the Uniform Scale with a primitive attribute on the curves.

Uniform Scale Attribute

A primitive attribute on the curves specifying the Uniform Scale on each curve, this is multiplied in with the base Uniform Scale to compute the full uniform scale factor for each curve.

Preserve Volume

When enabled will set a base scale factor such that the volume of the geometry bounding box is preserved.

Start Behavior

This parameter and End behavior control what happens to the model if the offset and length parameters push it “off the end” of the curve. For the best performance, use Extend or Clamp.

Extend

Extends geometry along the last curve tangent.

Clamp

Points are not allowed past the end of the curve. This has the effect of “pancaking” the model if it tries to move past the end. Note that this will probably create overlapping polygons.

Clip

Delete any geometry past the end of the curve, creating new boundary edges/points as needed. This is the same behavior as you would get if you positioned a Clip node at the end of the curve, but much more convenient. This is a particularly expensive operation. For better performance, use Extend or Clamp.

End Behavior

See the help for Start behavior

Geometry Deformations

These parameters let you scale and/or twist the model on top of mapping it onto the curve.

Enable Scale

Scales the model according to the Base scale factor and possibly the Scale ramp below. Note that the length of the model along the Forward direction is still controlled by the mapping controls above. This scales the model along the other two axes. In other words, it scales the model outward from the curve.

Base Scale Factor

When Enable scale is on, the factor by which to scale the model outward from the curve. For example, 1.0 does no scaling, values less than 1.0 make the model “skinnier” toward the spine curve, values greater than 1.0 make the model “fatter” away from the spine curve.

Enable Attribute Scale

Whether to scale the combined scale (Base Scale Factor multiplied by the ramp) by the value of an attribute on the curve. This lets you have different scaling at different points along the curve.

Curve Attribute

When the dropdown menu next to Base scale factor is set to Scale by attribute, this is the name of the point attribute on the curve to scale by.

Enable Scale Ramp

When this is on, the base scaling factor above is further modified by a ramp.

Scale Ramp

When Enable scale ramp is on, use this ramp for more control over how the model is scaled (vertical axis) along the length of the curve (horizontal axis).

Enable Rotation

Rotates/twists the points of the model around the Forward direction, according to the Base rotation and possibly the Rotation scale ramp below.

Base Rotation

When Enable rotation is on, rotate the entire model by this number of degrees. To get twisting instead of full rotation, use the ramp below. Note that the scale by attribute and rotation scale ramp controls below are multipliers on this value. If this value is 0, no rotation can happen at all.

Enable Attribute Scale

Whether to scale the combined rotation (Base Rotation multiplied by the ramp) by the value of an attribute on the curve. This lets you have different rotation at different points along the curve.

Curve Attribute

When the dropdown menu next to Base rotation is set to Scale by attribute, this is the name of the point attribute on the curve to scale by. Note that this is a multiplier on the base rotation, so if the base rotation is 0, nothing will happen.

Enable Rotation Scale Ramp

When this is on, the base rotation above is further modified by a ramp.

Rotation Scale Ramp

When Enable rotation scale ramp is on, use this ramp for more control over how the base rotation is scaled (vertical axis) along the length of the curve (horizontal axis). Note that this is a multiplier on the base rotation, so if the base rotation is 0, nothing will happen.

Rigidity

When points are rigid, the node maps them “all at once” onto the curve instead of individually, preventing them from bending. You can set a base amount of rigidity (which blends between the non-rigid and rigid positions of each point), and/or paint different rigidity values in different areas of the model using a point attribute.

Enable Rigidity

When this is on, you can specify certain parts of the model to be rigid (unbending).

Constraint Method

How to map points onto the curve. If multiple points are mapped together, they will be “rigid” with respect to each other.

By Rigid Group

Specify rigid points by group name(s) and/or component numbers. See Rigid group below.

By Geometry Fraction Attribute

Use a point attribute on the model to manually control where on the curve each point should should be deformed relative to. See Geo fraction attribute below.

By Piece Attribute

Use a piece attribute to specify rigid pieces of geometry.

Rigid Group

A group name, or list of primitive, edge, point, or vertex numbers specifying which components in the input model are rigid. Note that leaving this empty selects the entire model to be rigid, which is usually not what you want.

Each connected component in this group will be given its own rigidity class, and the point along the curve that it will use will be the average position of the points in the group.

Rigid Group Type

The component type specified in the Rigid Group (primitives, edges, points, or vertices).

Enable Stretch Softening

Smooths non-rigid points within a certain distance (Soften radius parameter below) of rigid geometry for smoother transitions between non-rigid to rigid parts of the model. Turn this on if you see abrupt stretches and/or angles between rigid and non-rigid parts.

Soften Distance Metric

When Enable stretch softening is on, how to measure the distance between non-rigid and rigid points:

Edge

Find the shortest path along edges between two points. This is faster but less accurate than the “Surface” method.

Surface

Compute (approximately) the shortest distance across the model surface. This is slower but more accurate than the “Edge” method.

Soften Radius

When Enable stretch softening is on, non-rigid points within this distance (in world space, as calculated using the Soften distance metric) of a rigid point are moved to make the transition smoother. The effect falls off with the distance to the nearest rigid point, falling to zero at the exact soften radius. You can control the falloff by turning on the falloff ramp below.

Enable Falloff Ramp

Turn this on to control the shape of the falloff within the Soften radius using a ramp.

Soften Falloff

When Enable falloff ramp is on, this lets you control the shape of the falloff based on distance from the nearest rigid point. The value at the left end of the ramp controls the amount of softening at zero distance from the nearest rigid point. The value at the right end of the ramp controls the amount of softening at the Soften radius distance from the nearest rigid point.

Geo Fraction Attribute

For each point in the model, this attribute sets what point on the curve (specified as a fraction of the curve length, from 0.0 to 1.0) the model point should map to.

Piece Attribute

A piece attribute specifying how the rigidity should be defined. The average position of elements in each piece is used to determine where the piece should be placed on the curve. The Piece Attribute can be either a point or primitive attribute that is either an integer or a string.

Allow Rigid Geometry to Stretch

When this is on, rigid geometry can stretch along the Forward direction by the same amount as non-rigid geometry.

Enable Rigidity Mask

The rigidity mask lets you specify how rigid each rigid component is (for example, by painting an attribute).

Base Rigidity Mask

This is the base rigidity of rigid points. The attribute will act as a multiplier on this value. For example, 1.0 is fully rigid, 0.0 is not rigid, 0.5 is halfway. If you just want all rigid points to have the same amount of rigidity, you can set this without specifying an attribute.

Enable Attribute Scale

Whether to scale the base rigidity by the value of a point attribute on the model. This lets you paint different areas of the model with different amounts of rigidity.

Geometry Attribute

When the dropdown menu next to Base scale factor is set to Scale by attribute, this is the name of the point attribute on the model to scale by.

Capture and Align

Geometry Alignment

Forward Direction

The “length” axis of the incoming model. The curve bends the model “across” this axis. The default is Z.

X/Y/Z

The model is modeled along one of the major axes. The “front” of the model is assumed to be in the positive direction. If the model points along the negative direction, you can choose Custom instead (for example, if the front is along negative Z, choose Custom and set the custom vector to 0, 0, -1).

Custom

Define the length axis of the model using a custom vector.

Forward Axis Vector

When Forward direction is Custom, this is a vector defining the “length” axis of the model.

Up Direction

The “height” axis of the incoming model. The node uses this to orient the model as it is deformed and rotated. The default is Y.

X/Y/Z

The model is modeled with “up” along one of the major axes.

Custom

Define the up axis of the model using a custom vector.

Up Axis Vector

When Up direction is Custom, this is a vector defining the “up” axis of the model.

Curve Alignment

Curve Up Control

How to compute the “up” direction of points along the curve. This can be overridden by point attributes (see below). (By default the node will slightly modify the up vectors to be perpendicular to the curve tangent, unless you turn on Make curve up vector constant below.) The default is Y.

Curve Normal

Automatically choose the direction perpendicular to the plane the curve would lie in if it was planar.

X/Y/Z

Always set the up direction along the positive direction of one of the major axes. Often you will draw the curve in one of the planes so this is useful to quickly choose the perpendicular direction to the plane of the curve.

Custom

Define the up axis of the curve using a custom vector.

Orient Using Point Attributes

When this is on, the node will use common point attributes (N, up, orient, rot, trans, pivot, pscale, scale, and/or transform), if present, to affect the orientation, rotation, scale etc. of the model at the corresponding point along the curve.

Make Curve Up Vector Constant

Forces the up vector to be constant as defined by the Curve Up Control. (When this is off, the node will slightly modify the up vectors to be perpendicular to the curve tangent.) This may skew geometry.

Force Orthogonal Tangent

When Make Curve Up Vector Constant is on, turning this on prevent the geometry skewing along the curve by recomputing the curve tangent at each point to be orthogonal to the constant up vector. This will orient the front of the geometry orthogonally to the up vector.

Copy Up Control to End

This will set the up vectors at both the start and end of the curve to be as close as possible to the Curve Up Control. This is useful when the curve is meant to be a loop.

Curve Up Vector

When Curve up control is Custom, this is a custom vector to use as the curve’s “up” direction.

Initialize Geometry Alignment from Curve

Setup the geometry alignment from the start of the curve. This will set the Forward Direction to match the curve’s tangent vector, the Up Direction to match the curve’s up vector, and the Geo Capture Origin to match the position at the start of the curve.

Reverse Curve

Reverses the curve, so that the geometry follows the curve from the opposite direction. You can use this if the curve was drawn in the “wrong” direction. (You don’t need to add a separate node to reverse the curve before you input it into this node.)

Reverse N Attribute on Curve

Reverses the N attribute on the curve. The node uses this attribute (if present) to calculate the tangent at each point.

Blend Tangents

Blend the curve tangents using a weighted average.

Tangent Blend Strength

When Blend tangents is on, how much weight to give to neighboring tangents when averaging. The default is 1.

Tangent Blend Iters

When Blend tangents is on, the number of times to iteratively apply the blending operation. The default is 10.

Capture

This node only bends the parts of the geometry inside a capture region. Parts of the model outside the capture region still move with the rest of the model, but do not bend or stretch. This is useful if you only want the front, or middle, or back of the model to bend.

Geo Capture Origin

How to specify the center of the capture region. The capture region is always based on the bounding box of the input geometry. By default it is centered on the model, but you can set this to Custom to offset the capture region from the model’s centroid.

Note

Unless you want an offset but can’t change the input model’s position, it is much easier to leave this set to Relative to bounding box than to use Custom. You can use the Geo capture start and Geo capture end to control the bendy region. You can offset the model from the curve by turning off Center geometry on curve and moving the model away from the origin.

Relative to Bounding Box

Always center the capture region at the center of the bounding box.

Custom

Offset the capture region along the Forward direction.

Center Geometry on Curve

When Geo capture origin is Relative to bounding box and this is on, the node snaps the center of the bounding box onto the curve. When this is off, the model’s original offset from the origin appears as an offset from the curve.

Capture Origin Offset

The node acts as if it takes plane starting at this point, perpendicular to the Forward direction and sweeps it along the Forward direction, capturing geometry. If the origin is past the start of the geometry, the start of the geometry will not be captured. If the origin is before the start of the geometry (and/or offset in the other two axes), the model will be offset from the curve.

(Insert image)

Capture Offsets Using

How to specify the start and end of the capture region:

Fraction of Geo Length

Specify the capture offsets as fractions of the length of the model (measured along the Forward direction).

Distance

Specify the capture offsets in world-space units.

Geo Capture Start

Moves the start of the capture region along the Forward Direction.

The position along the geometry that defines the start of the geometry. This point is mapped to the Position Offset. Geometry before this offset is extended along the tangent from the point at the Position Offset, and is not stretched according to the curve.

Override

When enabled, overrides the Geo Capture Start with an attribute on the curves.

Capture Start Attribute

The name of a float primitive attribute on the curves providing the value for the Geo Capture Start on each curve. This attribute is used to set the Geo Capture Start for the geometry mapped to each curve independently.

Geo Capture End

The position along the geometry that defines the end of the geometry. This point is mapped to the curve end offset defined by the sum of Position Offset and End Position Offset. Geometry beyond this offset is extended along the tangent from the point at the curve end offset, and it not stretched according to the curve.

Override

When enabled, overrides the Geo Capture End with an attribute on the curves.

Capture End Attribute

The name of a float primitive attribute on the curves providing the value for the Geo Capture End on each curve. This attribute is used to set the Geo Capture End for the geometry mapped to each curve independently.

Compute End Relative to Start

When enabled, the Geo Capture Start is added to the Geo Capture End when computing the ending position on the geometry.

Capture Before Start Position

When enabled, all geometry before the start position will also be captured.

Capture After End Position

When enabled, all geometry after the end position will also be captured.

Upcaptured Geo Stretch

The factor by which to stretch the geometry that is uncaptured.

Override

When enabled, overrides the Uncaptured Geo Stretch with an attribute on the curves.

Uncaptured Stretch Attribute

The name of a float primitive attribute on the curves providing the value for the Uncaptured Geo Stretch. This attribute is used to set the Uncaptured Geo Stretch for the geometry mapped to each curve independently.

Attributes

Attributes to Transform

A space-separated list of names and/or patterns. Attributes whose names match are transformed along with the point positions. The node uses each attribute’s type info to transform it properly (as points, vectors, or normals).

Recompute Affected Normals

Recomputes normals of polygons that have both transformed and untransformed points.

If you're transforming the full geometry or all connected components, this setting is irrelevant. It only matters if you deform part but not all of a connected piece.

This does nothing if P is not listed/matched in Attributes to Transform.

Preserve Normal Length

Normal lengths remain unaffected.

Output Position Along Curve

When this is on, create a point float attribute on the output geometry. This attribute will reflect the relative position of each point along the curve on the scale from 0.0 (curve start) and 1.0 (curve end).

Curve U Attribute

The name of the attribute in which to store the relative position along the curve.

Output Curve Num

When enabled, output an integer attribute on the points of the output geometry, storing the primitive number that each point was mapped to.

Curve Num Attribute

The name of the attribute in which to store the primitive number each point was mapped to.

Examples

PathDeformBasic Example for Path Deform geometry node

This example shows how to deform a squab on the curve and make its claws rigid.

PathDeformPiece Example for Path Deform geometry node

This example shows how to use a piece attribute to assign different geometries to different curves and customize several parameters, such as the size and placement of geometry, on a per-curve basis using attributes.

See also

Geometry nodes