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:
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
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 meshF: 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
You can download the bunny mesh and project executable here.
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