Modifiers
Modifiers come in two patterns:
Warp functions — return a WarpFn, used with mesh.warp(fn):
import { twist, bend, taper } from 'shapecraft'
Mesh-in mesh-out — take and return a Mesh directly:
import { smooth } from 'shapecraft'
twist
Rotate vertices around an axis proportional to their position along that axis.
mesh.warp(twist({ amount: 2 })) // twist around Y (default)
mesh.warp(twist({ axis: 'x', amount: 1.5 }))
Higher amount = more twist. Works best on geometry with enough segments along the twist axis.
bend
Curve geometry along an axis.
mesh.warp(bend({ amount: 1 })) // bend around Y
mesh.warp(bend({ axis: 'z', amount: 2 }))
taper
Scale vertices perpendicular to an axis based on a curve function.
// Linear taper: full size at y=0, half at y=1
mesh.warp(taper({ curve: (t) => 1 - t * 0.5 }))
// Custom curve along X axis
mesh.warp(taper({ axis: 'x', curve: (t) => Math.cos(t * Math.PI) }))
The curve receives the raw coordinate value along the axis.
smooth
Laplacian smoothing — moves each vertex toward the average of its neighbors.
const smoothed = smooth(mesh) // 1 iteration
const verySmooth = smooth(mesh, 5) // 5 iterations