3501 #6: Particle Systems

Assignment 6: Particle Systems

Due date: Wednesday, Nov 17

This assignment will give you some practice implementing particle systems and parametric motion. The second portion of this assignment lets you build a piece of technology needed for your project.

Part 1: setup

Part 2: Vertex Shader explosion

Recreate the explosion effect without doing any CPU simulation. The shader should receive as input the initial position of the particle, its initial velocity, and the time, and the vertex shader should compute the new position for every time t along the parabolic arc of the particle. That is, the position will be X(t) = Xo + V*t - (1/2)g*t*t for vector position X (initial position Xo) and vector velocity V, with -(1/2)gt^2 for the cumulative effect of gravity.

Part 3: Your own effect

Invent your own particle system and implement it. You can do the dynamics either in the vertex shader (if it is very simple motion) or on the CPU (if you need more elaborate motion and can't get it to work in the memoryless shader environment). For full marks, the effect should have some visual interest and should not be an extremely common effect: in particular, do not do an explosion, fire, or smoke. Some simple ideas are to do undirected atmospheric effects such as snow or dust, or directed effects such as weapon fire or a spray of sparks from an impact; you can use one of these, or hopefully you can use your creativity to make a bizarre custom effect needed for your project.

Include a minimal UI (e.g., keypresses) to trigger or restart the effect.

Part 4: Bonus

For a bonus of up to +10%, write a "force field" particle effect in which the particles move on arcs on the surface of a sphere and which use the 3-term lighting model to determine illumination. Assign a large ambient term to imitate a glowing force field, but include nontrivial diffuse and specular values as well. You can compute the surface normal of each particle by taking the normal of the sphere (i.e., a unit vector pointing out from the centre of the sphere).

Handing it in

Hand in your project using WebCT. The easiest thing to do is to create a single zipped folder and submit that, rather than all the individual files. It might take a while to upload, so be prepared to take a little break while the files are in transit.