Houdini 20.0 Nodes Geometry nodes

Curve 2.0 geometry node

Lets you interactively draw Bézier curves using tools similar to 2D illustration programs, as well as polylines and NURBS.

On this page
Since 19.0

Overview

This node’s interactive state lets you draw and edit cubic Bézier curves using tools similar to 2D illustration programs like Illustrator, Sketch, and InkScape. This is very useful for drawing “artistic” curves by hand. For example, tracing images, drawing logos, drawing profile curves to extrude, revolve, and so on.

While drawing a Bézier curve, you can insert arc segments. (Technically the arcs are not perfectly round, because this node does not create weighted Bézier curves.)

This node also includes an “Auto-Bézier” mode, similar to Illustrator’s Curvature tool, which lets you “guide” a curve by placing edit points, without having to worry about tangents.

You can set corners as rounded, and control the radius of each corner with a draggable grip. These corners remain editable while you use the node, then are “baked” into the curves.

You can also use this node to draw polylines, non-cubic orders of Bézier curves, and NURBS. However, when you are drawing these other types, you simply click to place each point, and Houdini interprets the point according to the curve type, without the special support for drawing tangents you get when drawing cubic Bézier curves.

Terms

Edit points

Also called on-curve points, breakpoints, or knots. In a cubic Bézier curve, the curve passes through these points.

Tangent handles

Also called control points. In a cubic Bézier curve, these control the direction of the curve going into and coming out of an edit point.

Corner point

An edit point where the tangents have zero length or point in different directions, causing a sharp corner. This is sometimes called having broken tangents.

Smooth point

An edit point where the node keeps the tangents together in a line, so the curve has smooth tangent continuity as it goes through the point.

Balanced point

An edit point where the node keeps the tangents together in a line, and also enforces that the tangent points are equal distance from the edit point, so the curve has smooth curvature continuity as it goes through the point.

Auto Point

An edit point where the tangents are automatically computed based on the positions of surrounding points and tangents to create a smooth curve.

Modes

While the Curve tool’s state is active, you can be in one of four modes: the Pen (drawing) mode, the Edit mode, the Auto-Bezier mode, or the Orient mode. The buttons for these modes are in the operation toolbar across the top of the viewer when the node’s state is active.

Using the interactive state

  • With the Curve node selected, click the Handles tool (to the left of the viewer), or move the mouse over the viewer and press Enter.

    The Handles tool lets you interact with the current node’s state/handles in the viewer. You can switch between the Handles tool and other tools (View, Select, Move, Rotate, Scale) to change the view and manipulate objects in the scene.

  • Because of how Houdini works, pressing ⎋ Esc will switch from the Handles tool to the View tool. This can be confusing if you just meant to cancel drawing. To get back to the Handles tool (and the curve node’s state), make sure the Curve node is still selected, move the mouse over the viewer, and press Enter.

Drawing Bézier curves

In Draw mode, click or drag in empty space to start a new curve, or click/drag an the start or end point of an existing curve to continue drawing the curve.

To...Do this

Place a corner point

  • Click to place a corner point.

Place a smooth point

  • Press to place the point, and without releasing the mouse button, move to drag out tangent handles.

Switch from a smooth curve to a straight line

  • Hold ⌃ Ctrl + ⇧ Shift to straighten the current segment.

Switch from a straight line to a smooth curve

  • Hold ⌃ Ctrl and press to place a point, then drag out the outgoing tangent handle.

Draw two curve segments connected by a corner (broken tangents)

  1. Press to place the point, and without releasing the mouse button, move to drag out tangent handles.

  2. With the mouse button still down, press ⌃ Ctrl to “freeze” the incoming tangent, so you are now only dragging the outgoing tangent.

    (You can release ⌃ Ctrl to go back to dragging the tangents together.)

  3. Drag the outgoing tangent to where you want, then release the mouse button.

Add an arc segment

  1. After placing the a point, press and hold A.

  2. The arc segment uses the outgoing tangent of the previous point. As you move the mouse with the A key held down, the node shows a preview of the arc from the previous point to the pointer.

  3. Click to place the end point of the arc segment.

    You can then release A to switch back to normal drawing, or keep holding A to draw more arc segments.

Edit points while drawing

  • Press ⌦ Del to delete the previous point.

Finish the curve

  • Click the start point to close the curve. (You can also drag to edit the tangents on the point.)

    or

  • Click Close Curve on the toolbar to automatically connect the previous point to the first point.

    or

  • Press Enter to finish drawing the (open) curve.

    or

  • Switch to the Edit mode.

Drawing with the Auto-Bézier mode

In Auto-Bézier mode, you can only click to place points (there are no tangent handles). The relative placement of the points controls the direction and curvature of the curve. The preview shows the new shape of the curve if you add a point at the current pointer location.

With some practice, you can learn how to place points (closer together or farther apart) to control the curve’s “turning speed” and its shape.

To...Do this

Add a point

  • Click to add a smooth point.

  • Hold ⌃ Ctrl and click to add a corner point.

Finish the curve

  • Click the start point to close the curve. (You can also drag to edit the tangents on the point.)

    or

  • Click Close Curve on the toolbar to automatically connect the previous point to the first point.

    or

  • Press Enter to finish drawing the (open) curve.

    or

  • Switch to the Edit mode.

Editing curves

To...Do this

Select a point or points using the Edit mode

  • Click a point to select it.

  • Drag a selection box around multiple points to select them.

  • Click a curve segment to select the edit points at the start and end of the segment.

  • Hold ⇧ Shift and click a point to add it to the selection.

Make a smooth point into a corner (break tangents)

  • Click a point to show its tangent handles.

  • Hold ⌃ Ctrl and drag one of the tangent handles to move it independently of the other.

Change points from corner to smooth to balanced

  1. Click a point to select it.

  2. Do one of the following:

    • Click Make Corner in the toolbar, or press 1.

    • Click Make Smooth in the toolbar, or press 2.

    • Click Make Balanced in the toolbar, or press 3

Reshape a Bézier curve

Do any of the following:

  • Select a point to show its tangent handles. Drag a tangent handle to change the direction and speed of the curve going into or out of the point.

  • Press on a curve segment (between edit points) and drag. The node will manipulate the tangents to shape the curve interactively as you drag it.

  • Drag the line connecting the tangent handles to rotate the tangents without affecting their distances from the point.

  • Select a curve segment and click the Make Straight button in the toolbar.

Move a point

  • Select a point and drag it to move it.

Move a point in 3D space

  1. Select the point.

  2. Press K to show the transform handle.

  3. Use the handle to move the point in 3D space.

    You can press K again to hide the handle when you're finished.

Move an entire curve

  • Hold ⇧ Shift and drag the curve.

Insert a point in the curve

  • Hold ⌃ Ctrl and click the curve where you want to insert the new point.

Split a curve at a point

  1. Select the point at which you want to split the curve.

  2. In the toolbar, click Split at Selected Points.

Fuse two open endpoints

  1. Select two endpoints.

  2. In the toolbar, click Join Selected Points

Join two open endpoints with a line

  1. Select two endpoints.

  2. In the toolbar, click Add Segment Between Endpoints.

Delete a point

  1. Select the point.

  2. Click Delete Point in the toolbar, or press ⌦ Del.

    The node reshapes teh curve to try to approximate its previous shape without the deleted point.

Delete a curve segment

  1. Select a segment in the curve.

  2. In the toolbar, click Delete Segment.

Make a corner rounded

  1. Select a corner point.

  2. In the toolbar, click Rounded Corner.

  3. Drag the Radius grip to change the radius of the rounded corner.

    To go back to a sharp corner, select the rounded segment or the radius grip, then in the toolbar, click Remove Rounded Corner.

Reverse a curve

  1. Select one or more points on the curve.

  2. Click the Reverse button in the tooblar.

Clear all curves

  • In the parameter editor, click Reset operations.

    or

  • Click the Edit mode, then press ⌃ Ctrl + A to select all points, the press ⌦ Del.

Creating an Orient Attribute

In Orient mode, you can specify target orientation on anchor points by specifying a target Up vector and optionally, also a Tangent vector. Attributes for the orientations are then created to smoothly transition in and out of the specified orientations. The resulting attributes use a parallel transport along the curve to determine the orientation for all other points.

To output the orient or axis attributes, enable Output Orient Attribute, Output X Axis, Output Y Axis, or Output Z Axis. When any of these attributes are enabled, guide geometry is drawn on curves in the viewport to visualize the attribute. There are state parameters available to enable this guide, as well as control the density and scale of guide gnomons.

When in orient mode, interactive gadgets are available on each of the points with a target orientation. By dragging these gadgets, you can rotate the frame around the curve tangent at the point.

To...Do this

Add a target orientation point

  • Hold ⇧ Shift and click an anchor point.

or

  • Click an anchor point with the middle mouse button.

Remove a target orientation point

  • Hold ⌃ Ctrl and click an anchor point with a target orientation.

or

  • Click an anchor point with a target orientation with the middle mouse button.

Show the full rotation handle for a target orientation point

  • Click an anchor point with a target orientation.

Operation toolbar

Primitive Type

Sets what kind of curve(s) this node creates.

Edit mode

F

Edit existing curves. See editing curves.

Draw mode

G

Draw new curves. See drawing curves.

Auto-Bézier mode

H

Draw Bézier curves using a simpler “path guiding” method. See using Auto-Bézier.

Orient mode

O

Create an orient attribute on curves. See creating an orient attribute.

Delete Point

⌦ Del

Deletes the selected point (if any).

Join Points

Fuses the selected endpoints (if any) into a single point. If the two endpoints belonged to separate curves, the result is a single merged curve.

Split Point

Splits the selected point (if any) into two separate points. Depending on where the point it, it may also split the curve into two curves.

Add Segment Between Points

Inserts a new straight segment between the two selected endpoints (if any).

Delete Segment

Deletes the selected segment, leaving a gap in the curve. Depending on where the points are, this may split the curve into two curves.

Make Selected Point Corner

1

Sets the selected point(s) (if any) to be corners, where the user can position the tangent handles independently.

Make Selected Point Smooth

2

Sets the selected point(s) (if any) to be corners, where the tangents have the same direction but may have different “speeds” going into and out of the point.

Make Selected Point Balanced

3

Sets the selected point(s) (if any) to be corners, where the tangents have the same direction and speed, creating curvature continuity across the point.

Retract Tangents

Sets the selected point(s) (if any) to have zero-length tangents, like straight corners.

Expand Tangents

Sets a certain minimum distance on the tangent handles of the selected point (if any), to make it possible to grab and move them.

Make Segment Straight

Makes the points on either side of the selected segment into corners, and retracts the tangents, so the segment becomes a straight line.

Close Curve

If the curve is open, adds a segment from the last point to the first point.

Create Rounded Corners

Make the selected corner point(s) rounded. You can then drag the radius grip to change the corner radius.

Remove Rounded Corners

Remove rounding from the selected corners (select the rounded segment or the radius grip first).

Reverse

Reverses the direction of the selected curve, so the start point becomes the end point.

Shortcut reference

C

Show a radial menu with the commonly used modes and actions.

K

Show/hide a transform handle on the selected point.

Draw mode

G

Switch to Draw mode.

⌃ Ctrl + ⇧ Shift

Start straight segment after curved segment.

⌃ Ctrl + Drag

Start curved segment after straight segment.

⌃ Ctrl while dragging tangents

Freeze other tangent handle in place.

Hold A

Make circular arc segment.

Auto-Bézier mode

H

Switch to Auto mode.

⌃ Ctrl + LMB

Add sharp corner.

Edit mode

F

Switch to edit mode.

⌃ Ctrl click curve

Insert a point.

⌃ Ctrl click point

Make point a sharp corner.

⇧ Shift click curve

Select entire curve.

⇧ Shift drag curve

Move entire curve.

Drag on curve

Reshape Bézier curve, or move polyline/NURBS segment.

1

Make selected point(s) corner.

2

Make selected point(s) smooth.

3

Make selected point(s) balanced.

MMB drag point

Re-pull tangent handles.

Drag tangent handle line

Rotate tangent handles without affecting distances.

⇧ Shift while moving points/handles

Constrain to vertical, horizontal, or diagonal.

Orient Mode

⇧ Shift + LMB click point

Create new target orientation point.

⌃ Ctrl + LMB click point

Remove target orientation.

LMB click point

Show orient handle on target orientation point.

LMB drag circle orientation gadget

Rotate target Up and Tangent vectors around curve tangent.

MMB click point

Toggle target orientation on point.

⌃ Ctrl + ⇧ Shift + LMB click point

Snap target orientation to be aligned with curve tangent.

Tips and notes

  • You can connect curve geometry to this nodes input to edit existing curves (or reinterpret existing curve points as a new type of spline). See Inputs for more information.

  • In a Perspective viewport, interactive drawing automatically snaps to the plane the view is facing (or, if the construction plane is active, to the construction plane).

    You may want to switch to an orthographic viewport so you can draw on a flat plane without worrying about skew from the camera angle.

  • You can select an edit point or control point and press K to show a transform handle to move the point in 3D space.

  • There may be issues with drawing curves in a shaded display mode. The OpenGL viewer does not do always do a perfect job filling Bezier curves. Even when just drawing polylines, having closed curves be filled/shaded can be distracting. You can press W in the viewer to switch to wireframe mode to view closed curves without shading.

  • You can turn the little radius labels on rounded corners on or off in the parameters.

Inputs

Input Curves

The node finds curves in the first input and makes them editable using this node’s interactive modes. This is useful when you have existing curves and you want to use this node’s interactive features to extend or reshape them.

However, if you just want to add new curves to existing geometry, you will need to adjust the Group parameter.

The Group parameter specifies which primitives in the input you want to be able to edit. The default is empty, meaning all input geometry. This can be awkward if you just want to add new curves to the input geometry, not edit existing curves.

Use the following instructions based on whether the input contains all curves you want to edit, no curves you want to edit, or some curves you want to edit.

If the input contains only curves you want to edit

Connect to the input and use the defaults.

If the input contains goemetry you don’t want to edit, you just want to add curves

Connect the input, set Group to !* (matches nothing) so none of the incoming primitives become editable curves.

The input contains some curves you want to make editable, and other geometry you just want to pass through

Connect the input. Set Group to the primitive numbers of the curves you want to edit. You can use the Reselect button to the right of the field to select the curves interactively in the viewer.

Outputs

The output is a set of curve primitives, of the type set with the Primitive type parameter. If you want to resample the drawn curve as a polyline, add a Convert node after this node.

Parameters

Group

A primitive group in the input geometry determining the primitives to edit.

Primitive Type

Type of curve primitives to create.

Polygon

Create a polyline.

NURBS Curve

Create a NURBS curve.

Bezier Curve

Create a Bézier curve.

Order

The order of the NURBS or Bézier curve. Higher order curves give more control vertices and smoother curve interpolation between on-curve knots. However, you should generally use the default order (4) unless you have a reason for needing higher-order curves. Note that changing the Order changes the interpretation of all existing curves to use the new order value.

The drawing mode is optimized for cubic Bézier curves (Order set to 4, the default). For higher-order Bézier curves, the drawing interface is the same as for cubic Bézier curves, but after you drag out the tangent handles, the node creates more than one tangent handle on the trailing side of the point. It creates the extra control points in line, so they have the same shape as a cubic Bézier would, but after you're finished drawing you can use the Edit mode to move the extra control points independently.

For NURBS, the drawing interface is always the same: placing points by clicking.

Reinterpret Curves as Current Type and Order

When enabled, all existing curves are converted by reinterpretting the curve points as the current Primitive Type and Order. When converting curves to NURBs or Bezier, the last point on the curve may be repeated to fully define the curve. When disabled, only newly created curves will be given the current Primitive Type and Order.

Mode

The mode that the tool is currently in.

Select/Edit Mode

Modifies existing curves.

Draw Mode

Puts down new points.

Auto-Bezier Draw Mode

Put down new points when creating Bezier curves. Points are created as Auto Points. Tangents will be optimized to create a bezier curve continuous in the first and second derivatives. Previous points will be optimized until it either reaches back to the start of the curve, or a non-auto point.

Orient Mode

Create an orient attribute along curves by specifying target up vectors at specified anchor points.

Delete Selected Points

Removes the selected point(s), if any.

Join Selected Points

Fuses two selected points together.

Split Curves at Selected Points

Splits the curve at each selected point.

Add Segment Between Selected Endpoints

Joins the two selected points with a straight line.

Delete Segments Between Selected Points

Removes any selected segments, possibly splitting curves around selected segments.

Make Selected Points Corner

Turns an anchor point into a corner point.

Make Selected Points Smooth

Turns an anchor point into a smooth point, possibly snapping handles to be aligned.

Make Selected Points Balanced

Turns an anchor point into a balanced point, possibly snapping handles to be aligned.

Retract Tangents at Selected Points

Collapses the bezier handles down into a sharp bezier corner point.

Expand Tangents at Selected Points

Expands out the bezier handles to be intractable, if the selected point is collapsed.

Make Segments Between Selected Points Straight

Collapses the handles on the ends of the selected segments, converting the segment into a straight line.

Close Selected Curves

Closes all curves with at least one point selected.

Create Rounded Corners

Turns the selected corner points into rounded corners.

Remove Rounded Corners

Turns the selected rounded corners into ordinary corners.

Make Selected Points Auto

Makes selected points into auto points. Bezier curves are automatically computed to interpolate any auto points.

Make Selected Points Manual

Makes selected auto points into non-auto points and freezes the local interpolated curve so that it can be manually edited.

Reverse

Reverse selected curves.

Reset Operations

Resets all modeling operations that have been done. Will reset the output geometry to the input geometry.

Snap Tangents when Fusing Ends in Draw Mode

Whether to snap the final tangent when fusing curves together or closing curves by clicking on the end point of another curve or the opposite end point of the same curve. Dragging out the tangent while fusing will not snap the tangents.

Approximate Shape on Delete

Approximates the previous curve shape on a point delete.

Approximate End Tangents

Prioritizes keeping the end derivatives of a segment when approximating the previous curve shape on a point delete.

Soft Transform Radius

The soft transform radius when soft transforms are enabled. Soft transforms are used when doing operations that manually move anchor points, including dragging points in edit and draw mode, dragging segments in polygons or NURBs curves, or bezier segments adjacent to rounded corners or auto points. This radius is relative to the distance along the backbone polygon of the given curve. For Polygons this is equivalent to the surface distance along the curve. For NURBS Curves this is equivalent to the distance along the control polygon of the curve. And for Bezier Curves, this is equivalent to the distance along the polygon that results from reinterpreting the curve as a polygon. In particular, in this polygon, auto points and rounded corners are collapsed to a single point, which can result in distances along the curve being slightly different than expected when looking at a curve.

Corner Points Group

The name of the group to create that will contain the corner points. When chaining curve nodes, this can be used to ensure later curve nodes pick up the corner points from this node.

Smooth Points Group

The name of the group to create that will contain the smooth points. When chaining curve nodes, this can be used to ensure later curve nodes pick up the smooth points from this node.

Auto Points Group

The name of the group to create that will contain the auto points. When chaining curve nodes, this can be used to ensure later curve nodes pick up the auto points from this node.

Name

The name to place in the name attribute on all created geometry. Defaults to the name of the SOP ($OS).

X Axis

The name of the attribute to create to store the X Axis of the orientations created on points in the Orient Mode. When active, geometry showing the x axis will be present in the viewport. The density and scale of guide gnomons showing the axes can be controlled in the state parameters.

Y Axis

The name of the attribute to create to store the Y Axis of the orientations created on points in the Orient Mode. When active, geometry showing the y axis will be present in the viewport. The density and scale of guide gnomons showing the axes can be controlled in the state parameters.

Z Axis

The name of the attribute to create to store the Z Axis of the orientations created on points in the Orient Mode. When active, geometry showing the x axis will be present in the viewport. The density and scale of guide gnomons showing the axes can be controlled in the state parameters.

Orient

The name of the orient attribute to create. The orient attribute created in the Orient Mode will be stored in this attribute. When active, guide geometry showing the orient attribute will be present in the viewport. In the state parameters, you can toggle drawing the orient guide geometry, as well as control the density and scale of guide gnomons.

Tangent Type

The method used to determine the implicit curve tangent. This tangent is used to parallel transport the orient attributes from the target points along the curves.

Align with Curve Tangent

When enabled, aligns orient attribute values with the curve tangent. When disabled, orient attribute values on target points are aligned with the value in Tangent.

Target Orientations

The target orientations specified on points along curves. When determining the orient attribute, these target orientations are placed on curves, and a parallel transport is used between target points to create an orient attribute that smoothly blends between target orientations. For any curves that do not have any target orientations, a default orient is placed on the first point of the curve, achieved by rotating the vector (0,0,1) onto the curve tangent.

Enable Target Orientation

Toggles this target orientation.

Point

The point to place the target orientation on.

Up

The target up vector. Target up vectors are made perpendicular to the curve tangent if Align with Curve Tangent is enabled, and are otherwise made perpendicular to the specified Tangent vector.

Tangent

The target tangent vector. When Align with Curve Tangent is disabled, this parameter is available to set alongside the Up vector, allowing you to fully specify the orientation of this target Point, without being constrained by the curve tangent.

Current Operation

These parameters represent the transformations of the current operation. These will be internally stored and cleared upon finishing actions, or starting new actions. Re-selecting points, finishing a movement of a component, or finishing an interaction with the transform handle will all cause it to store the parameters and clear them.

Active Points

Points used in the current operation.

Translate

The amount to translate the selected points or the selected handle end point by.

Rotate

The amount to rotate (in degrees) the selected points with respect to the pivot.

Scale

The amount to scale the selected points with respect to the pivot.

Corner Points

A group parameter specifying the corner points. When chaining multiple curve nodes, this can be set with an input group, such as that created through Corner Points Group, to pick up the corner points from previous nodes.

Smooth Points

A group parameter specifying the smooth points. When chaining multiple curve nodes, this can be set with an input group, such as that created through Smooth Points Group, to pick up the smooth points from previous nodes.

Auto Points

A group parameter specifying the auto points. When chaining multiple curve nodes, this can be set with an input group, such as that created through Auto Points Group, to pick up the auto points from previous nodes.

Pivot Transform

Pivot Translate

The position of the pivot, before any further translations.

Fixed Pivot

Whether to keep the pivot position the same when selecting new points. If disabled, the pivot will be reset to the center of the bounding box of the selected points on a selection change.

Pivot Rotate

Specifies the axis to align the transform handle with. Upon finishing any operation with the transform handle, it will snap back to this rotation to begin a new edit. Is specified as three angles in degrees representing the amount to rotate around each axis.

Rounded Corners

View Rounded Corners

Whether to view rounded corners. When disabled, rounded corners are all shown with a radius of 0.0. The topology of created curves is not changed when this toggle is disabled.

Round Corner Points

A string parameter encoding the rounded corners and their radii.

Round Corner Radius

Sets the radius of the selected rounded corners.

Bake Selected Rounded Corners

Convert selected rounded corners into regular bezier segments.

Show Rounded Corner Widget

Whether to show a widget to modify rounded corner radii.

Show Rounded Corner Labels

Whether to show labels for the radii on the rounded corner widgets. These labels are disabled if Show Rounded Corner Widget is disabled.

Examples

ChainCurve Example for Curve geometry node

This example provides a walkthrough of creating an HDA that wraps Curve SOP together with Chain SOP and correctly promotes all parameters of Curve along with the state.

See also

Geometry nodes