Product media placeholder
Replace this area with a screenshot or short walkthrough video during the media sweep.
Immovable static collider — walls, floors, arc-shaped bowls, sensor trigger zones. No pose outputs (it never moves), only an `id: float` for joints + event listeners. The `arc` shape is parameterised as a circular segment of N edge-chain segments, used for the dental ball-drop cup brim. **F381 P2.2 — `shape.kind: 'fromGeometry'`** reads vertex data from a wired `glyphGeometry` / `shapeGeometry` / `softMesh` source via the `vertices` + `subpathStarts` + `ringSubpathCounts` typed input ports. One closed polyline body is created per OUTER ring (hole subpaths are skipped — balls land on top of an "o", not inside its counter). For multi-glyph text, this means N rigid colliders are created with `id` reporting the first one (sentinel; use `physicsStaticBodyEach` or `physicsBodyLookup` to enumerate). Pair with the SAME geometry source feeding a `softMesh` so visible mesh + collider stay aligned by construction.
Inputs
| Port | Type | Description |
|---|---|---|
world | any | Wire to the sibling `physicsWorld.world` output. |
vertices | float32buffer | Wire from `glyphGeometry.vertices` / `shapeGeometry.vertices` / `softMesh.vertices` when `shape.kind: 'fromGeometry'`. For static colliders that should track a stable rest pose, prefer wiring from `softMesh.restVertices`. Ignored for other shape kinds. |
subpathStarts | uint16buffer | Wire from the geometry source's `subpathStarts`. Ignored for other shape kinds. |
ringSubpathCounts | uint16buffer | Wire from the geometry source's `ringSubpathCounts`. Lets the body builder skip hole subpaths and emit one polyline per outer ring. Ignored for other shape kinds. |
Outputs
| Port | Type | Description |
|---|---|---|
id | float | Engine handle. Wire to joint or collision-event nodes that filter by body. |
centerX | float | For `kind: arc`, the resolved center X in document px. Wire to `physicsBodyStagger.targetCenterX` to spawn dynamics centered on the cup mouth without hand-syncing two sets of viewport units. |
topY | float | For `kind: arc`, the Y of the upper opening edge in document px (the higher of the two arc endpoints in screen coords). Pair with `targetCenterX` for IK-style spawn-into-cup. |
bottomY | float | For `kind: arc`, the lowest point in document px (`cy + radius`). Useful for bottom-aligned spawning or measuring interior cup height. |
mouthWidth | float | Width of the shape's mouth/opening (chord between v0 and v(N-1) for open polylines, bbox width for closed shapes, chord between arc endpoints for `kind: arc`). Wire to `physicsBodyStagger.targetMouthWidth` + set spawnPattern: "fanFromMouth" to fan N balls evenly across the mouth without hand-tuning per-ball spacing. |
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
shape | physicsShape | {"kind":"box","width":100,"height":20} | Static collider shape — pick the kind (circle, box, polygon, edge, arc, polyline, fromSelector) and fill in the per-kind parameters. **Recommended for art-aligned colliders: `From Selector`** — derives the polyline from a live SVG element, resize-safe, no magic numbers. **For arbitrary shapes: `Polyline`** — vertex chain, same authoring story as clipPath. Use `arc` only when an analytic circular arc is needed without a backing element. |
x | float | 0 | World-space X position of the body in px. CSS units like "50vw" / "100px" also accepted; the loader resolves to px at bind time. Static bodies do not move under simulation; this is the fixed pose. |
y | float | 0 | World-space Y position of the body in px. CSS units accepted ("12vh", "200px"); resolved at bind. Static bodies do not move under simulation. |
rotation | float | 0 | Body orientation in radians. Static bodies hold this rotation forever. Use π/4 ≈ 0.785 for 45°, π ≈ 3.14159 for 180°. step 0.01 |
restitution | float | 0.5 | 0 = no bounce (dynamic bodies stick to this surface on impact), 1 = perfectly elastic (energy preserved), > 1 = energy-amplifying. Combined with the dynamic body's restitution per the engine's blend mode. min 0; max 2; step 0.05 |
friction | float | 0.5 | Surface friction coefficient. 0 = ice (dynamic bodies slide forever), 1 = typical solid surface, > 1 = high friction. Combined with the dynamic body's friction. min 0; max 2; step 0.05 |
isSensor | bool | false | When true, the collider generates collision events but does not push other bodies. Use for trigger zones — pair with `physicsCollisionPulse` (v2) to detect entry/exit. |
Related nodes
Envelope
Use physicsStaticBody 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-solvers/