This is my dissertation project and entailed creating a soft body system on top of the Vulkan API. The project has a framework in Vulkan in which multiple models loaded in from a .OBJ file can be rendered, manipulated and textured using an image file. The soft body system on top of this framework using the mass spring system where a model is represented by a network of masses connected together by weightless springs. During build time this network is generated from a model by creating an internal grid structure of masses as well as masses at each of the models vertices. Each mass is then connected to the n nearest other masses by springs.
The soft body network of a cube
The soft body behavior was achieved using a series of equations to simulate the different forces applied to the model this included: gravity, a spring force (an adaption of Hooke’s Law), and damping force to keep the system stable.
For the soft body collisions, an initial broad phase collision was performed using a dynamic axis aligned bounding box (AABB) intersection test. Then a narrow phase test was performed by finding the intersecting triangles of the two models. These triangles are stored inside a bounding volume hierarchy for optimisation.