Outputs a PointCloud in which each point follows the position of the input PointCloud as its target, via a spring. Stiffness is the strength that pulls back toward the target and Damping is the decay of velocity, so the smaller Damping is, the more the points overshoot and shake. On the frame Kick Trigger fires, a velocity with the magnitude of Kick Force is added once to every point (the direction is a pseudo-random unit vector determined from the index). So that dropped frames do not make it go wild, the time of one step is capped at 0.05 seconds.
- Stiffness (default 60, negative values are treated as 0)
- Damping (default 6, negative values are treated as 0) — the decay is exponential,
exp(-Damping × dt)
- Kick Force (default 3)
- Velocity Stretch (default 0) — when greater than 0, points whose speed exceeds 0.05 turn to face their direction of travel, and their Z scale is stretched by a factor of
1 + speed × Stretch
When the input point count changes, the simulation state is reset: all points teleport to their target positions and their velocities return to 0. Moving Count upstream interrupts the spring motion.
Input ports
| Port ID | Type |
PointCloud | PointCloudInput |
Stiffness | float |
Damping | float |
Kick Trigger | trigger |
Kick Force | float |
Velocity Stretch | float |
Output ports
| Port ID | Type |
PointCloud | PointCloudOutput |
Scriptable members
| Path | Type |
stiffnessInput | float |
dampingInput | float |
kickForceInput | float |
stretchInput | float |
Synapse Apps (scripting)
await synapse.modules.create({ type: "SpringPoints" })