home  /   who am i  /   my work  /   soap box

real-time physics simulations


The research paper describing, in detail, how the quanta-bond method of simulation works, as well as comparisons with other methods, is available below. For more concise information on implementing the algorithm, see the manual.

Description Version Last change Download
Research paper v1.0 October 29, 2011 ODT / PDF


Applying forces to a block hung from a rope
Applying forces to a block hung from a rope
Twisting a block made of semi-rigid material
Twisting a block made of semi-rigid material
Compressing a block made of rigid material with bond stress visible
Compressing a block made of rigid material with bond stress visible
Comparison of quanta-bond structure stress under gravity
Comparison of quanta-bond structure stress under gravity
Applying forces to a block hung from a semi-elastic rope
Torsion force applied to a block constructed of semi-rigid material
Compression force applied to a block made of rigid material


1. Overview

Performing a simulation requires a system definition and an appropriate timestep size to perform the simulation on. In order to solve the defined system, a hybrid-implicit integrator is used, allowing for stiff, highly coupled systems to be solved with a guarantee of stability. This manual briefly describes, at a high level, the steps necessary to construct and run a simulation.

No source code which implements the quanta-bond method of simulation will be released, however, the math necessary to construct an implementation independently is documented here.

2. Defining the System

Simple quanta-bond model Each system being simulated is constructed in terms of quanta and bonds.

Quanta are added to a system to represent a collection of atoms. Quanta maintain values representing their mass, position, velocity, and acting forces. Once the quanta are laid out in space, they can be connected with bonds.

Bonds can behave like springs with one of two options: the reacting force of the bond can grow linearly, or it can fall off inversely as the bond stretches. A bond can connect exactly two quanta to each other, and is defined to have a resting length, a bond force constant, and a dampening coefficient. The resting length is the length at which the bond exhibits no force on either of the connected quanta. The bond force constant is the amount of force applied to the quanta as the bond is stretched. The dampening coefficient is the amount of energy lost as the bond applies force to the connected quanta. More rigid bodies will have higher bond force constants, while softer bodies will be lower.

It is possible to modify a system while it is being simulated. By breaking or forming bonds under various conditions, body deformation can be achieved.

Once construction of a system is complete, it is ready to be simulated.

3. Selecting a Timestep

Progressing the simulation of a system forward in time is done in iterations, called timesteps. Selecting an appropriate timestep size can be difficult. If the timestep is too large, the simulation won't be accurate. If the timestep is too small, it'll take too long to progress a simulation forward and the simulation won't be real-time. Some experimentation is usually the best approach to selecting an appropriate timestep.

The typical approach is to select a timestep smaller than the desired frame rate, then progress the simulation multiple times per frame. For example, if 30 frames per second are desired, a timestep set at 1/90 of a second could be used. Each frame would then progress the simulation 3 times per frame. This method allows for a small timestep, improving the accuracy of the simulation.

4. Performing the Simulation

This is a quick description of the equations necessary to actually perform the simulation. The research paper explains the differential equations used, and how the integrator to solve those equations functions. In order to guarantee stability of the system, regardless of stiffness, a hybrid-implicit method of integration was used (as opposed to an explicit method such as Runge-Kutta).

The figure below represents a simple two quanta, one bond system and defines a set of required variables.

Quanta-bond notation

There are two possible equations which define the reacing force a bond places on quanta as it stretches. For bonds that apply a reacting force that grows linearly, the following equation is used:

Bond force equation

If the reacting force falls of inversely as the bond stretches, the following equation is used:

Bond inverse force equation

The final equation solves the change in velocity for an individual quanta. The change in velocity is computed for each quanta i. Each quanta may have j other quanta bonded to it. The change in velocity needs to be found for each quanta i, by taking into consideration the influence exerted on i by all bonded quanta j. In the equation below, h represents the size of the timestep:

Change in quanta velocity equation

Once the velocity change for each quanta i is known, the quanta's new acceleration is known. With the new information, the new velocity and position of the quanta can also be determined.

Because the quanta-bond method isn't fully-implicit, each quanta's change in velocity can be solved in parallel with other quanta in the same system. This allows for high-performance, high-accuracy simulations of both rigid and soft bodies.