Brett Allen and Stefan Saroiu, CSE557 HW#4, 2000 Winter Quarter

We developed an animation interface to physical-based modeling of a blast wave impact on surrounding objects. We started with the "Animating Exploding Objects" paper from Graphics Interface 1999 (Mazarak et. al). This paper uses a connected voxel representation of objects to model explosions that result in solid debris. We coined the term "polyvoxel" to refer to a connected voxel object. When an explosion occurs, a blast wave travels through the scene. Each polyvoxel has internal links connecting the voxels. Whenever the pressure exerted by the blast wave is higher than the internal link, the link is broken. If there are no links connecting two or more parts of a polyvoxel, the polyvoxel will be broken into mutiple polyvoxels. Finally to each polyvoxel in the scene a blast force and a torque is applied and their motions are computed using rigid body mechanics.

Blast Wave Pressure Profile

The pressure profile generated by an ideal blast wave at some location can be accurately described by the Friendlander equation. There are three distinct phases through which an object passes when an explosion occurs: The Friedlander equation can be modeled by this formula [Baker73]:
where: We present below a plot (pressure vs. time) of the above equation given the following input:

Figure 1 Plot of Friedlander Equation

Simulated Fracture

In order to simulate fractures of objects due to explosions, some notion of connectivity of an object must be incorporated in the models. We decided each object in a scene to be represented by a collection of voxels. We therefore refer to an object as a "polyvoxel". In addition to a list of voxels, polyvoxels contains a list of tensions between adjacent voxels. We chose to model objects using polyvoxels over polymeshes due to their volumetric and spatial properties.
Whenever a polyvoxel is constructed, tensions between adjacent voxels are created. We chose to use a simple model of creating random tension strengths, by perturbing a random value generated within a certain range around some mean value:
When the simulation begins, the blast pressure due to the explosion is computed and the tensions between adjacent voxels are weakened. Whenever the tension reaches zero, the connection is broken causing the polyvoxel to fracture (to split into subsequent polyvoxels). Each polyvoxel's motion is determined using rigid body mechanics based on the gravity and the blast forces acting on it.

(a) Building Initially

(b) Blast Reaches Building

(c) Windows Destroyed

(d) Floors and Roof Destroyed

(e) Building Collapsed
Figure 2 Tensions weakened gradually as the blast sweeps through the building

Rigid Body Mechanics

In order to have the exploding chunks rotate correctly, we had to implement rigid body dynamics using polyvoxels. When the initial shape is created, we calculate the inertia tensor and the center of mass for the polyvoxel. We invert the inertia tensor and store the result. As the object turns, we can quickly calculate the inverse of the new inertia tensor for the current rotation as RI-1RT. However, if the polymesh splits, we must recalculate the inertia tensor and center of mass for the new pieces.

In the work by Mazarak et. al., collision detection is done between each polyvoxel. However, this creates an enormous computational burden. In our early simulations, we found that when debris is flying around, you often can't tell visually whether collisions are happening or not. To keep things simple, we just checked for collisions with the ground plane, and applied appropriate reactive forces and torques.




Disclaimer: Any possible connection between the grass, the sky or the building and the reality is purely a coincidence.
Reference Papers: