Product media placeholder
Replace this area with a screenshot or short walkthrough video during the media sweep.
Shared text-outline geometry source. F381 P2.1. Emits typed vertex buffers + bbox + bodyCenter from `text + fontFamily + fontSize + fontWeight` once at init (static). Wire the outputs into BOTH `softMesh.geometrySource` (visible deformable mesh, P2.3) AND `physicsStaticBody{kind:fromGeometry}` (rigid collider, P2.2) so the visible mesh and rigid collider are aligned by construction — kills the entire class of "physicsTextOutline.radius drifted from physicsSoftText.radius" bugs that the legacy paired-node pattern required authors to avoid by hand. Uses the same WASM glyph extractor pipeline as the legacy nodes (rustybuzz + ttf-parser → earcut), so geometry is bit-identical to what a softMesh with `geometrySource:textOutline` would produce.
Inputs
| Port | Type | Description |
|---|---|---|
world | any | Optional. When wired from `physicsWorld.world`, the geometry node uses the world's `frameSelector` to compute body-coord origin. Without a wire, host element acts as its own frame. |
Outputs
| Port | Type | Description |
|---|---|---|
vertices | float32buffer | Rest-pose vertex buffer in body coords. Wire into consumers' `geometrySource` ports. |
subpathStarts | uint16buffer | Vertex-pair start index of each subpath. Glyph outer + counter holes flat in traversal order. |
ringSubpathCounts | uint16buffer | Entry i = number of subpaths in glyph i (1 outer + N counter holes — e.g. P/R/O/d/e have 1 hole each, H/Y/S/I/C have 0). First subpath per glyph is outer; remaining are holes. Lets `physicsStaticBody{kind:fromGeometry}` build colliders only for letter silhouettes (balls land on top of an "o", not inside its counter). |
sharpFlags | uint16buffer | Sharp-corner flag per vertex. |
bboxMinX | float | BBox Min X |
bboxMinY | float | BBox Min Y |
bboxMaxX | float | BBox Max X |
bboxMaxY | float | BBox Max Y |
bodyCenterX | float | Snapshot rest centroid in body coords. |
bodyCenterY | float | Body Centre Y |
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
selector | elementSelector | "" | CSS selector for the host element. Used for sizing (auto-radius fallback) and resolving the physics frame. |
text | string | "Text" | Text |
fontFamily | string | "sans-serif" | Font Family |
fontSize | float | 220 | Font Size (px) |
fontWeight | string | "400" | CSS weight string. Must match a loaded `FontFace`. |
radius | float | -1 | -1 = auto: `min(hostW, hostH) * 0.4`. The whole word is refit to fit `2 * radius`. |
cornerSharpnessDeg | float | 25 | Corner Sharpness (°) min 0; max 90; step 5 |
Use cases
- Balls-on-text — one `glyphGeometry` feeds a `softMesh` (visible deformable letters) AND a `physicsStaticBody{fromGeometry}` (rigid collider). Balls bounce off the actual letter shapes, no manual radius drift.
- Logotype cursor warp — `glyphGeometry` feeds a `softMesh` + `softMeshRender`. No physics body needed; geometry node simply provides the rest pose.
Related nodes
Envelope
Use glyphGeometry as the node type inside a graph node envelope. Add id, optional params, optional connections, and optional activeWhen based on the guide context.
Generated source
Registry faster-motion-docs/node-registry.jsonCategory page /help/faster-motion/faster-motion-node-category-effects/