A set number of particles are created within a cube. Each particle has a position and velocity, however it’s starting velocity is always zero.

As the system transitions to a new 3D model, the code iterates over every face of the new model, and calculates it’s area, and assigns each face a percentage of the available particles proportional to the total surface area of the model. Each particle is assigned a random target position on it’s assigned face, and the particle will continually adjust it’s velocity in an attempt to reach the target point. Given enough distance, the particle will overshoot it’s destination, leading it to reverse course, giving an elastic feel. Points closest to the face are preferred, but the transition occurs over time, beginning with randomisation of particle velocities from the bottom up, followed by the assignment of a destination to each particle, also from the bottom up. This gives the sense that the model is transitioning between order and chaos at the user’s will.