Documentation / Node reference / geo nodes
geo/Curve
A resampled curve through a set of points.
Primitives
Threads a curve through points and resamples it at a resolution you pick. Plug something in and every input object's points become one curve: a geo/Add, a geo/Line, the points of a mesh. Plug nothing in and you type the points on the node itself, which is what sketching a curve by hand looks like. Either way the curve PASSES THROUGH the points, which is the difference from geo/CADCurve, where they pull on it instead.
Two counts, and they are different things. `pointsCount` is how many points go IN, when they are typed here. `samplesCount` is how many come OUT. Raise the second for a smoother curve; it costs points, not shape.
`interpolation` picks what runs between the points. Catmull-Rom is the smooth one, and `tension` is how tightly it hugs them. Linear joins them with straight segments, which is what resampling a polyline at an even spacing looks like.
`method` picks what drives the resolution: a fixed number of samples, or a fixed spacing along the curve with `segmentSize`. A spacing holds when the curve changes size, which is what a downstream sweep or a printer wants; `maxSamplesCount` is the ceiling that stops a small spacing on a long curve from running away.
Its third setting, SOURCE POINTS, resamples NOTHING: the output is the points that went in, joined into a polyline, and nothing moves. That is what you want when the points are already where you placed them. Interpolation has nothing left to do in that mode, so it is hidden along with the sampling params.
The output is a polyline of segments, or loose points with `asPoints`. A TANGENT attribute rides along by default, which is what geo/PolyWire and geo/Copy read to orient what they place on it.
Parameters
| Name | Type | What it does |
|---|---|---|
| dimension | UInt8 _2D · _3D | Whether the curve comes out 2D or 3D. A 2D curve has no third coordinate at all, and the plane it lies in is this object's own transform, so a geo/Transform tilts it and everything built on it follows. The z is DROPPED rather than refused when the points are not flat. |
| method | UInt8 POINTS_COUNT · SEGMENT_SIZE · SOURCE_POINTS | What drives the resolution: a fixed number of samples, a fixed spacing along the curve, or the source points kept exactly as they are. |
| interpolation | UInt8 CATMULL_ROM_CURVE3 · LINEAR | What runs between the points. Catmull-Rom curves through them smoothly; linear joins them with straight segments. |
| samplesCount | UInt32 | How many points the curve is sampled into. This is the OUTPUT resolution, not the number of points going in. |
| segmentSize | Float | Spacing between output samples, in world units. A spacing holds when the curve changes size, where a fixed count does not. |
| maxSamplesCount | UInt32 | Ceiling on the samples `segmentSize` may produce, so a small spacing on a long curve cannot run away. |
| tension | Float | How tightly the Catmull-Rom curve hugs its points. Ignored by linear interpolation. |
| asPoints | Bool | Output loose points instead of a polyline of segments. |
| evenlySpacedPoints | Bool | Space the samples by ARC LENGTH rather than by curve parameter, so they are evenly spread along the curve instead of bunching where it bends. |
| tangents | Bool | Add a TANGENT attribute, the normalized direction along the curve at each sample. geo/PolyWire and geo/Copy read it to orient what they place on the curve. |
| copyAttributes | Bool | Carry attributes over from the input object. |
| attributes | AttributeNames | Which attributes to carry over. |
| pointsCount | UInt8 | How many of the points below to use. The rest are hidden. Used only when nothing is plugged into the input. |
| position0 | Vector3 | A point the curve passes through. In 2D only x and y are read; the z stays in the param, so switching back to three restores the point. |
| position1 | Vector3 | A point the curve passes through. In 2D only x and y are read; the z stays in the param, so switching back to three restores the point. |
| position2 | Vector3 | A point the curve passes through. In 2D only x and y are read; the z stays in the param, so switching back to three restores the point. |
| position3 | Vector3 | A point the curve passes through. In 2D only x and y are read; the z stays in the param, so switching back to three restores the point. |
| position4 | Vector3 | A point the curve passes through. In 2D only x and y are read; the z stays in the param, so switching back to three restores the point. |
| position5 | Vector3 | A point the curve passes through. In 2D only x and y are read; the z stays in the param, so switching back to three restores the point. |
| position6 | Vector3 | A point the curve passes through. In 2D only x and y are read; the z stays in the param, so switching back to three restores the point. |
| position7 | Vector3 | A point the curve passes through. In 2D only x and y are read; the z stays in the param, so switching back to three restores the point. |
See also
- geo/Line
- geo/Add
- geo/PolyWire
- geo/Circle
This page is generated from the engine, so it describes the release you can download. The same text is in the editor's Help panel next to the node itself.