Final Project

Due Tuesday, 15 December 2020, 5pm

This is a partnered lab assignment. You can pick a specific partner, a random partner, or to work alone. I strongly encourage you to work with a partner when given the option. You may choose a partner from either lab section. If you pick a specific partner, your partner must also choose you before the application will create a team and create a git repository for you. The final project is almost entirely your own design, so it is not critical that you clone repos today. You will be able to set your Partner preferences in teammaker soon.

1. Overview

The final project will allow you to explore a topic of your own interest in the remaining time in the course. I provide a few ideas below, but you are welcome to make other suggestions. The only real guidelines is that your project should use something we have done before in the course and also try something new that we have not implemented on a prior lab or demo.

2020 has been full of challenges and I encourage you to consider a project that has some easy to reach intermediate goals and some possible stretch goals. If you choose a project whose success is all or nothing, you run the risk of getting stuck and ending with nothing. Keep in mind with open ended design projects, there will be more unexpected hurdles that you will need to debug and since I am not designing your project, I may not be able to provide detailed technical assistance. The closer you stay to extension of past labs, the more likely you will be able to make initial progress quickly.

2. Project Proposal (16 November)

Before next week’s lab, you should submit a proposal in or roughly 600-1000 words. (1-2 pages of text). Your proposal should include the following elements:

  • A high level description of the project.

  • A description of ideas you will be using from class and new ideas you will be exploring.

  • A list of short term, primary, and reach goals. Short term goals should represent incremental progress you can make in a week. Primary goals describe what you would consider a successful implementation of your project. A reach goal can be a nice addition if time permits, but something that may not be possible if there are snags in the earlier stages.

  • A description on how you plan to determine if your project is a success.

3. Intermediate Report (02 December)

In this report, you should highlight your recent progress, discuss any roadblocks, and describe any adjustments you are making to your initial proposal. Submit this in

4. Demo

Each group will demo their final project during the final exam period 8 December 9am-noon. Demos will be roughly 10-15 minutes depending on the number of projects. You should provide a brief overview of your project and describe your primary implementation efforts. I expect most projects will be real time, and can be demonstrated live. If you are doing slow offline rendering, take screenshots and share during the demo.

5. Final Submission (15 December)

Your final repo should contain:

  • Code implementation

  • A write up of 2000-3000 words describing the main technical/creative highlights of your project.

  • A list of references used including web sites, books, or papers.

  • Any third party code aside from twgl, dat.gui, stats, or chroma.


Your project should combine some previous topics from the course and explore at least one new topic. You can aim for realism, efficiency, or artistic effect.

Below are just a few ideas:

  • A basic 3D game

  • 2.5D maze walkthrough with wall collision detection and goal detection

  • Physical systems - Cloth, Water

  • Metaballs. Given that Jamie Wong again does a lot of the work for you here, you would need to describe how you would extend his demos, though he isn’t using shaderToy or webGL really, so that could be the extension.

  • Terrain modeling with procedural noise.

    • CPU side with vertex shader and fragment shader

    • Or raymarching approach using fragment shader noise functions

  • Boids, or more elaborate particle systems than the fountain example.

  • Billboarding

  • Curved surfaces, B-Splines, B├ęzier surfaces, or how to make curvy things that aren’t spheres out of triangles.

Aiming for something that is roughly the scope/size of a lab assigment or a little longer is appropriate as you will have to design and implement things from scratch and this will take time. When possible, reuse components from previous labs/demos. You may also use third party sources with attribution, but your project cannot simply be the concatenation of third party work. You must implement or adjust some component of the project on your own. Check with me if you would like guidance on what you can borrow and what you should do yourself.


Once you have edited the files, you should publish your changes using git. See the General Guide for more details.