Bunny Blaster

Matt Colón
CSC 570Q
Final Project
QSplat and Particles

Project Information

QSplat uses a point rendering system as compared to a triangle rendering system to represent a mesh. Each point is rendered as a “splat,” or a simple, colored shape such as a circle or square, and point connectivity is only used in the creation of the QSplat representation. In addition, level of detail is achieved by using a tree of boundary spheres that enclose an individual point at the lowest level and the entire mesh at the highest level. Because of the tree structure, view frustum culling can be implemented using the tree to speed up rendering.

Because mesh connectivity is not needed after preprocessing, points are individual entities that can be manipulated without needing to manage edge and triangle properties as well. Similarly, particle systems use individual points that collectively represent something larger, such as water or fire.

In my final project, I apply what I call mesh disintegration to a mesh represented using the QSplat method. In particular, I take an existing mesh, convert it to a QSplat representation, and then apply individual forces to each point in the mesh, converting each point in the mesh to a point in a particle system. For example, using a QSplat representation of the Stanford bunny mesh, I could apply an initial force along the normal vector of each point and the force of gravity at the push of a button to simulate an explosion. Similarly, a pool of particle points could slowly assemble itself into the bunny.

When creating the QSplat representation of a mesh, I add a flag to each point signifying if the mesh is using the point or if the point is considered a particle. By doing this, a mesh can be partially rendered while the rest of its points are still acting as particles. Effects such as melting and delayed assembly of a mesh can be achieved if all points are initially in one state and slowly convert to the other, several points at a time. Because of the bounding sphere tree structure being used, I can determine particle size by the depth of the tree, so a mesh can be represented with any number of particles from one to the number of points in the mesh.

This implementation uses collision detection in several forms, implemented in the following forms:

I have achieved the following aspects of mesh disintegration in this project:

Bunny Pictures


The Stanford Bunny rendered using the QSplat method.


The bunny rendered as a triangle mesh (compare with below)


The bunny rendered using the QSplat method (compare with above)


A visual representation of the bounding sphere hierarchy used (shown at a lower than optimal depth)


The splats of the bunny are drawn to always face the main camera (the blue box) and view frustum
culling prevents unseen parts of the bunny from being rendered in order to improve rendering efficiency


The different levels of detail that are achieved by rendering at different depths of the bounding sphere
hierarchy tree (left: top level, bounding sphere encompasses all of the bunny, middle: medium level, each
splat represents a bounding sphere that fits inside of the square, right: maximum depth level, each point's
bounding sphere splat is drawn)


Holes can be blown out of the bunny's surface, and the camera can enter the hollow shell
and still collide with the solid walls of the bunny (Ever wanted to know what it is like inside
of a chocolate Easter bunny?)


The bunny can be exploded en mass


The bunny can be melted en mass


The bunny can be disintegrated slowly


The bunny can be melted slowly


When all is done, the bunny can be reassembled back into its shape

User Guide

Camera Controls

Movement:

A or Up: Move forward
Z or Down: Move backward
S or Left: Strafe left
X or Right: Strafe right
Space: Strafe up
L Control: Strafe down
Mouse: Rotate view
Home: Reset orientation

Velocity:

PageUp: Increase velocity
PageDn: Decrease velocity
End: Reset velocity

*Note*
Fast velocities will cause the camera / mesh collision detection to fail.

Alternate Camera:

K: Switch between camera views
L: Switch control between cameras

Rendering Controls

Rendering:

Q: Render using QSplat
B: Render bounding spheres
T: Render triangle mesh
W: Render wireframe
P: Render points

Depth Control:

E: Switch between automatic and manual depth
O: Increase manual depth
I: Decrease manual depth

Particle Controls

Deforming:

G: Explode the entire mesh
N: Melt the entire mesh

F: Blast a small area at the crosshairs
D: Slowly disintegrate the mesh starting at crosshairs
J: Melt a small area at the crosshairs
M: Slowly melt the mesh starting at the crosshairs

Reforming:

H: Return particles to the mesh

Reset

Resetting:

R: Reloads the mesh from the file
Home: Reset camera orientation
End: Reset camera velocity

Downloads

You can download the bunny mesh and project executable here.

References

QSplat

QSPLAT: A multiresolution Point Rendering System for Large Meshes, S. Rusinkiewicz & M. Levoy, Siggraph 2000

Polygon Orientation

Billboard Explosions, D. Phan, CSC 476, Spring 2004
Retrieved from http://www.csc.calpoly.edu/~dhphan/explosions