Skip to content

Splines Nodes

Bezier Spline

Cubic Bezier curve defined by four control points. Outputs a Spline for use with Sweep or Path Follow.

Inputs

  • P0 (Vector3)
  • P1 (Vector3)
  • P2 (Vector3)
  • P3 (Vector3)
  • Subdivisions (Int)

Outputs

  • Spline (Spline)

Options

  • spacingMode: Even Spacing redistributes sampled points to equal arc-length intervals: use it when consumers need uniform segment spacing (e.g. Sweep ring density). Uniform T concentrates samples in tight bends, which preserves curvature fidelity for Lathe and Sweep. Either mode is correct for RepeatAlongSpline and FenceWall.

Tips

  • P0 and P3 are the endpoints. P1 pulls the curve toward it near the start; P2 pulls near the end: neither endpoint coincides with its handle.
  • Set Spacing Mode to Even Spacing for uniform ring density (recommended for Sweep). Use Uniform T when curvature fidelity matters more than uniform spacing (e.g. Lathe).
  • Wire MakeVector3 nodes to any control point to drive the curve from upstream scalar parameters: useful for procedural road layouts.

Catmull-Rom Spline

Smooth spline that passes through P1 and P2. P0 and P3 shape the tangents at each end. Outputs a Spline.

Inputs

  • P0 (Vector3)
  • P1 (Vector3)
  • P2 (Vector3)
  • P3 (Vector3)
  • Subdivisions (Int)

Outputs

  • Spline (Spline)

Options

  • spacingMode: Even Spacing redistributes sampled points to equal arc-length intervals: use it when consumers need uniform segment spacing (e.g. Sweep ring density). Uniform T concentrates samples in tight bends, which preserves curvature fidelity for Lathe and Sweep. Either mode is correct for RepeatAlongSpline and FenceWall.

Tips

  • The visible curve runs from P1 to P2 only. P0 is the phantom tangent anchor at the start; P3 is at the end: they control curvature but are never on the curve.
  • For natural organic curves, place P0 and P3 as if extending the path one segment beyond P1 and P2 in a straight line.
  • To chain multiple Catmull-Rom segments, set each segment’s P0 = previous P1, and P3 = next P2 for C1-continuous connections.

Extrude Along Spline

Creates geometry by extruding a profile along a spline. Corner Mode keeps it full width through bends, Orientation keeps it level or lets it roll with the path, and UV Tile Length repeats the texture every N metres. Only the profile’s XZ convex hull is used: for concave profiles (L, U, channel) use Polygon Sweep.

Inputs

  • Spline (Spline)
  • Profile (Geometry)

Outputs

  • Geometry (Geometry)

Options

  • profileScale: Uniform scale applied to the profile cross-section before sweeping. 1 = profile at its authored size; 2 = double-width extrusion.
  • flipNormals: Reverses all triangle winding and normals on the swept mesh. Enable when the result appears inside-out in the scene.
  • cornerMode: How the profile turns each corner of the path. Miter keeps the profile full width through the corner with a sharp joint, cut flat past Miter Limit. Bevel cuts every corner flat with two joints. Original pinches the profile thinner at corners and leans it on uneven legs, and is kept so older graphs look the same.
  • miterLimit: How much a corner may stretch the profile to keep it full width, as a multiple of its normal size, before Miter cuts the corner flat. 2 keeps right angles sharp; anything below 1.42 cuts them flat. The node shows a warning when any corner exceeds this limit. Ignored by Bevel and Original.
  • orientation: Which way the profile faces as it travels. Minimal Twist rolls the profile only as much as the path bends and closes loops without a seam twist (pipes, cables, arches). Keep Upright keeps the profile level with world up (roads, rails, walls, ramps), for paths under about 60 degrees of slope; use Minimal Twist for vertical runs. Original is Minimal Twist without the loop-seam fix, kept so older graphs look the same.
  • uvTileLength: Metres of path covered by one repeat of the texture along the sweep, so a longer path shows more repeats instead of a stretched texture. Set it near the profile’s width for square texels. 0 stretches the texture once over the whole path, as older graphs do.

Lathe

Revolves a spline profile around the Y axis. Profile X = radius, Y = height. Outputs Geometry.

Inputs

  • Spline (Spline)

Outputs

  • Geometry (Geometry)

Options

  • segments: Radial subdivision count (slices around the Y axis). 24 is a good default; reduce to 6–8 for low-poly style, increase for very smooth silhouettes.
  • capEnds: Fills the top and bottom of the revolution with a triangle fan. Disable for an open cylinder or tube form.

Tips

  • Negative X profile coordinates produce inward-facing concave indentations: useful for grooves, undercuts, and hollow forms.
  • Segments controls the radial subdivision. 24 is the default; reduce for low-poly stylised objects, increase for smooth curves.

Lathe Profile

Reads a named XY lathe profile from InfinioInstance.latheProfileInputs. X = radius, Y = height. Connect to a Lathe node.

Outputs

  • Spline (Spline)

Options

  • maxControlPoints: Maximum number of draggable control points (2–256). Determines how many custom input slots are reserved at compile time. Increase if you need more profile points; decrease to reduce binary size.
  • subdivisions: Total interpolated output points across the full profile. More points give a smoother Lathe result. Increase when sharp ridges appear on the revolved surface.

Points to Spline

Connects spawn points in emit order as a spline path. Enable Closed to loop the last point back to the first.

Inputs

  • Spawns (Scatter)

Outputs

  • Spline (Spline)

Options

  • isClosed: When enabled, the last spawn point connects back to the first, producing a closed loop spline. Requires at least 3 points.

Polygon Sweep

Sweeps a 2D polygon profile along a spline, preserving concave shapes; Corner Mode, Orientation and UV Tile Length work as on Extrude Along Spline. For convex Geometry profiles use Extrude Along Spline instead. Side channels (vertex color, UV-extra) are swept frame-agnostically: call this node after any Geometry Transform that places the profile in its final frame.

Inputs

  • Spline (Spline)
  • Profile (Polygon)

Outputs

  • Geometry (Geometry)

Options

  • profileScale: Uniform scale applied to the 2D polygon profile before sweeping.
  • flipNormals: Reverses all triangle winding and normals on the swept mesh. Enable when the result appears inside-out.
  • capEnds: Generates a filled triangle fan at both endpoints of the spline using the profile outline. Off = open tube or channel for further boolean operations.
  • cornerMode: How the profile turns each corner of the path. Miter keeps the profile full width through the corner with a sharp joint, cut flat past Miter Limit. Bevel cuts every corner flat with two joints. Original pinches the profile thinner at corners and leans it on uneven legs, and is kept so older graphs look the same.
  • miterLimit: How much a corner may stretch the profile to keep it full width, as a multiple of its normal size, before Miter cuts the corner flat. 2 keeps right angles sharp; anything below 1.42 cuts them flat. The node shows a warning when any corner exceeds this limit. Ignored by Bevel and Original.
  • orientation: Which way the profile faces as it travels. Minimal Twist rolls the profile only as much as the path bends and closes loops without a seam twist (pipes, cables, arches). Keep Upright keeps the profile level with world up (roads, rails, walls, ramps), for paths under about 60 degrees of slope; use Minimal Twist for vertical runs. Original is Minimal Twist without the loop-seam fix, kept so older graphs look the same.
  • uvTileLength: Metres of path covered by one repeat of the texture along the sweep, so a longer path shows more repeats instead of a stretched texture. Set it near the profile’s width for square texels. 0 stretches the texture once over the whole path, as older graphs do.

Limitations

  • Polygon profiles with holes (multi-contour output from Difference or GridSubdivide) are not supported: only the outer contour is swept; interior holes are silently dropped. Use a simple outer boundary as the profile.

Polygon to Spline

Projects one contour of a 2D polygon to a 3D polyline at a given height.

Inputs

  • Polygon (Polygon)
  • Contour Index (Int)
  • Height (Float)

Outputs

  • Spline (Spline)

Resample Spline

Re-samples a spline to N evenly arc-length-spaced control points. Useful before Sweep or Spline Distribute when uniform ring spacing is required. Output points are evenly spaced by arc length: use this before Spline Follow or Trim Spline when arc-uniform parameterisation is needed. Reports the length of the resampled polyline, which is slightly shorter than the source because straight chords cut corners.

Inputs

  • Spline (Spline)
  • Sample Count (Int)

Outputs

  • Spline (Spline)

Tips

  • Higher Sample Count = smoother result but more verts; silently clamped to 4096.
  • Outputs the same Spline type it consumes: drop it inline on any spline wire.

Scene Spline

Scene-draggable 3D waypoint path with optional closed loop and smooth Catmull-Rom interpolation. Place N waypoints via scene handles and outputs a polyline Spline. Wire to Stair from Spline, Extrude Along Spline, Spline Distribute, Wall Along Spline, or any spline consumer.

Outputs

  • Spline (Spline)

Options

  • maxWaypoints: Upper bound on draggable waypoint count (2–256). Determines customInputs slots reserved at compile time. Silently clamped to ScenePathNode.MaxWaypoints (256) at both compilation and evaluation.
  • waypoints: Node-authored XYZ waypoint list, seeded with the standard two-flight default at creation and flattened into the compiled default path (ParameterDescriptor.defaultValues). An InfinioInstance Scene Path override still wins per scene.
  • pathPreset: Starting shape preset (Straight / L-Shape / Stair Flight / Rectangle). Selecting a preset replaces the node’s waypoint list with the preset shape. Only affects instances displaying the default path: scene-authored overrides are unaffected.
  • closed: When enabled, the path forms a closed loop by appending a duplicate of the first waypoint at evaluation time. Requires at least 3 waypoints; the editor waypoint list itself is not modified.
  • interpolation: Linear emits straight segments between waypoints. Smooth evaluates a Catmull-Rom curve through all waypoints, adding subdivision points per segment for a smooth result.

Limitations

  • Scene-dragged waypoints require an InfinioInstance: they apply at edit time and on runtime finite assets. Chunk-streamed worlds (ChunkSystem) do not receive scene waypoint data yet; the node falls back to its compiled default path there.
  • Inside a Sub-Graph (Geometry) node this path evaluates the subgraph’s own baked waypoints: the parent instance’s scene handles do not reach inside the subgraph.

Spline Distribute

Places one geometry copy at fixed arc-length intervals along a spline, merged into one geometry handle. Unlike Spline Scatter (uniform or jittered spacing into the scatter pipeline) and Repeat Along Spline (tiled sections with cap/fit control), spacing is uniform and there is no cap logic.

Inputs

  • Geometry (Geometry)
  • Spline (Spline)
  • Spacing (Float)
  • Alt Angle (Float)

Outputs

  • Geometry (Geometry)

Options

  • materialMode: Preserve Materials (0): each instance keeps its own submesh ranges. Flatten (1): merges all instances to a single submesh, discarding per-instance material separators.
  • fitMode: Original (0): legacy floor(L/spacing)+1 count, leftover gap at path end. Keep Spacing (1): exact spacing from start, leftover gap at end. Fit to Length (2): rounds count to the nearest whole number so copies evenly fill the full path length.

Spline Follow

Samples world position and tangent direction at parameter T (0=start, 1=end) along a spline. Distance mode makes T=0.5 land exactly halfway by arc length.

Inputs

  • Spline (Spline)
  • T (Float)

Outputs

  • Pos X (Float)
  • Pos Y (Float)
  • Pos Z (Float)
  • Dir X (Float)
  • Dir Y (Float)
  • Dir Z (Float)

Options

  • measureMode: Point Count (0): legacy mode, T is an index fraction so T=0.5 is the midpoint by control-point count. Distance (1): T is an arc-length fraction so T=0.5 is exactly halfway along the path.

Spline Length

Outputs the total arc length of a spline in world units. Computed in GraphManagedNodePass after the spline is sampled.

Inputs

  • Spline (Spline)

Outputs

  • Length (Float)

Spline Offset

Offsets a spline sideways by a signed distance, producing a parallel curve: positive shifts left, negative shifts right. Corner Mode makes corners sharp (Miter), cut flat (Bevel) or rounded (Round).

Inputs

  • Spline (Spline)
  • Offset (Float)

Outputs

  • Spline (Spline)

Options

  • miterLimit: How far a sharp corner may reach, as a multiple of Offset, before Miter cuts it flat. 2 keeps right angles sharp; anything below 1.42 cuts them flat. Used by Miter and Original; Bevel and Round ignore it.
  • joinStyle: How the offset curve turns each sharp corner on the outside of a bend. Miter keeps a sharp point exactly Offset away from both sides, cut flat past Miter Limit. Bevel cuts sharp corners flat. Round turns them in a smooth arc. Original places one point per corner, pulled in short of Offset on sharp turns, and is kept so older graphs look the same. Gentle bends and the inside of every bend stay a single point in all modes.

Tips

  • Wire the offset port to a Float Parameter to expose the clearance distance in the inspector, useful for railings, kerbs, and road shoulders.
  • Miter Limit caps how far a corner point extends along the bisector, as a multiple of |offset|. 2 keeps right-angle turns sharp; raise it for wider bevels on softer paths.
  • The output spline has non-uniform spacing at corners. Run Resample Spline downstream if even spacing is required.

Spline to Polygon

Projects a 3D spline onto the XZ plane, producing a 2D polygon. Y is discarded.

Inputs

  • Spline (Spline)

Outputs

  • Polygon (Polygon)

Options

  • maxOutputPoints: Upper bound on projected polygon vertex count. Increase this when a densely sampled spline is being truncated: the node silently drops excess points above this limit.

Stair Along Spline

Builds a staircase along a Scene Spline: sloped stretches become flights of steps, flat stretches become landings, and every turn keeps the stair at full width using winder steps or a corner landing.

Inputs

  • Spline (Spline)
  • Step Width (Float)
  • Max Riser Height (Float)
  • Thickness (Float)

Outputs

  • Geometry (Geometry)
  • Spawns (Scatter)
  • Runner Spawns (Scatter)
  • Left Edge (Spline)
  • Right Edge (Spline)

Options

  • closeLeft: Generate a solid side wall on the left side of the stair, extending down to the sloped underside slab.
  • closeRight: Generate a solid side wall on the right side of the stair.
  • closeBottom: Generate the sloped underside slab and front/back caps, making the stair a fully closed solid.
  • sideMaterial: Material slot index (0-based) assigned to all closing geometry: side walls, underside, and caps. Default 2.
  • cornerStyle: How the stair turns where two flights meet. Auto (default) uses a landing on sharp turns and winder steps on gentle bends; Landing always inserts a flat landing; Winders always uses tapered steps. A flat stretch next to a flight always takes the turn as a landing.
  • landingTurnAngle: Auto only. Turns sharper than this many degrees get a landing; gentler turns get winder steps. Default 45.
  • minInnerTread: How shallow the inside of a winder step may get, as a fraction of the nominal tread depth (0.33 = a third). Turns too tight to achieve this fraction raise a corner-too-tight warning. Default 0.33.

Tips

  • Flat stretches between waypoints at the same height always become landings. With Auto corner style (the default), flight-to-flight turns sharper than Landing Turn Angle also insert a flat landing between the two flights; gentler turns use tapered winder steps instead.
  • To place a landing exactly, give two neighbouring waypoints the same height: the flat stretch between them becomes a landing, and it takes the turn at either end.
  • Close Left / Right / Bottom build a watertight solid; Thickness sets how deep the underside sits below the steps.
  • Runner Spawns place one walk-aligned point per step at nosing height (the leading edge of each tread): wire to ForEach Spawn to scatter runner meshes (the stair width is your runner width).
  • Left Edge / Right Edge follow the stair’s real outline, landing corners included, at nosing height: sweep a profile along them for a handrail, or Spline Distribute along them for posts.
  • If two flights meet at exactly 180 degrees (a U-turn at one knot), the node raises a reversal warning. Break the U-turn into two knots with a short flat leg between them to clear the warning.
  • For a spiral around a central post, use Winder Stair.

Stair from Spline

Generates stair treads and risers along a Scene Spline polyline. Optionally closes the left/right sides and a sloped underside slab into a solid mesh (submesh 2). Outputs geometry, tread spawns, runner spawns (one per step at the base of the rise), and a Left Edge / Right Edge Spline pair. Turns use tapered winder treads that keep at least a third of the tread depth on the narrow side; a flight too short for its turn raises a warning.

Inputs

  • Spline (Spline)
  • Step Width (Float)
  • Max Riser Height (Float)
  • Thickness (Float)

Outputs

  • Geometry (Geometry)
  • Spawns (Scatter)
  • Runner Spawns (Scatter)
  • Left Edge (Spline)
  • Right Edge (Spline)

Options

  • closeLeft: Generate a solid side wall on the left side of the stair, extending down to the sloped underside slab.
  • closeRight: Generate a solid side wall on the right side of the stair.
  • closeBottom: Generate the sloped underside slab and front/back caps, making the stair a fully closed solid.
  • sideMaterial: Material slot index (0-based) assigned to all closing geometry: side walls, underside, and caps. Default 2.

Tips

  • Close Left / Right / Bottom build a watertight solid; Thickness sets how deep the sloped underside slab sits below the steps.
  • Runner Spawns place one walk-aligned point per step at the base of the rise: wire to ForEach Spawn to scatter runner meshes (the stair width is your runner width).
  • Left Edge / Right Edge trace the stair’s own edges at step height: sweep a profile along them for a handrail, or Spline Distribute along them for posts. To sit a railing higher, raise the geometry those nodes produce; the edges themselves stay on the stair.

Trim Spline

Cuts a spline to a [Start T, End T] parameter range (0 = start, 1 = end). Start/End are index fractions: T=0.5 trims to the midpoint by control-point count. Use Resample Spline before Trim Spline when arc-uniform parameterisation is needed.

Inputs

  • Spline (Spline)
  • Start T (Float)
  • End T (Float)

Outputs

  • Spline (Spline)

Winder Stair

Wedge-shaped winder/spiral staircase radiating from a central newel at the origin. Outputs geometry (treads + risers), one spawn per tread, and a centreline rail spline whose endpoints are the entry/exit connection points for straight flights.

Inputs

  • Inner Radius (Float)
  • Outer Radius (Float)
  • Total Angle (Float)
  • Total Rise (Float)
  • Max Riser Height (Float)

Outputs

  • Geometry (Geometry)
  • Spawns (Scatter)
  • Rail (Spline)

Options

  • clockwise: Sweep direction of the winder. Off = counter-clockwise when viewed from above (default); On = clockwise.

Tips

  • Total Angle: 90° = quarter-winder, 180° = half-turn, 360° = full spiral.
  • Inner Radius 0 makes a tight spiral; widen Outer Radius for gentler treads.
  • Wire the Rail output to a Sweep for a curved handrail.