Create spring-like behavior with physics:

// Create a spring joint
const spring = new BABYLON.PhysicsJoint(
    BABYLON.PhysicsJoint.SpringJoint, {
        length: 5,          // Rest length
        stiffness: 50,      // Spring strength
        damping: 0.5,       // Damping factor
        collision: true     // Allow connected bodies to collide
    }
);

// Create anchor point
const springAnchor = BABYLON.MeshBuilder.CreateSphere("anchor", {diameter: 1}, scene);
springAnchor.position.y = 15;
springAnchor.physicsImpostor = new BABYLON.PhysicsImpostor(
    springAnchor,
    BABYLON.PhysicsImpostor.SphereImpostor,
    { mass: 0 }, // Fixed position
    scene
);

// Create suspended object
const bob = BABYLON.MeshBuilder.CreateSphere("bob", {diameter: 2}, scene);
bob.position.y = 10;
bob.physicsImpostor = new BABYLON.PhysicsImpostor(
    bob,
    BABYLON.PhysicsImpostor.SphereImpostor,
    { mass: 2, restitution: 0.6 },
    scene
);

// Connect with spring joint
springAnchor.physicsImpostor.addJoint(bob.physicsImpostor, spring);

// Visualize the spring connection with a line
const springLine = BABYLON.MeshBuilder.CreateLines("springLine", {
    points: [springAnchor.position, bob.position],
    updatable: true
}, scene);

// Update the line in the render loop
scene.onBeforeRenderObservable.add(() => {
    springLine = BABYLON.MeshBuilder.CreateLines("springLine", {
        points: [springAnchor.position, bob.position],
        instance: springLine
    });
});