Final Project


This fall, we've surveyed a number of topics in computer graphics to give you a broad introduction to the field. Now, we're giving you the reins. Pick your favorite topic, do some reading and research, and make a cool demo!

Specifically: you'll come up with a scene that you'd like to render, figure out what technical features will be necessary to make that scene possible (and which you have not already implemented in a previous lab or project), implement those features, and show off your work in a short demo video. The scene that you create should have some consistent visual/aesthetic theme (e.g. a snowy forest, a futurist city, a cave full of crystals). We will evaluate your project on both technical and creative merits.

Project Groups

You will complete your final projects in groups of 2-4.

If you'd like to search for teammates beyond your usual circles, we encourage you comment on the Finding Final Project Groups pinned thread on Ed. Put up ideas and projects you are interested in, then get in touch with others who share those interests!

You may complete your final project in a group of 1 only under exceptional circumstances, and only with the permission of the course instructor.

Project Mentor TAs

Each group will be assigned a project mentor TA shortly after project proposals are submitted. This TA will be your go-to resource when working on your final project, and you should reach out to them when you have any questions or concerns. This TA may be different from the mentor TA you have had throughout the semester, as we try to match your group with a TA who has experience with the technical features you intend to implement.


You may NOT use late days for any final project submissions.

Form groups and submit project proposalsTuesday, 11/21 at 11:59 pm EST
Meet with mentor TA for design checkWeek of Monday, 11/27
Meet with mentor TA for project status updateWeek of Monday, 12/4
Submit your demo videoWednesday, 12/13 at 9:00 pm EST
Final presentation during lecture timeThursday, 12/14 at 10:30 am EST

Project Proposal

Submit your project proposal via this Google form by Tuesday, 11/21 at 11:59 pm EST.

The form asks you to provide the following information:

  • The name of your group
  • The names and CS logins of all your group members
  • Your idea for your final project, i.e. the visual theme of the scene you want to create. Feel free to include multiple ideas--we will help you choose which one(s) might be best for you
  • The specific technical features you intend to implement to realize this scene.
  • A public Github repository link for your final project (this can be empty, for the time being).
    • If you must make your repository private for some reason, be sure to give the course staff view access.

Note: the only "submission" of code for your final project will be in the form of this Github repository link.

Design Check

Once you've been assigned a mentor TA, arrange to meet them for a design check during the week of Monday, 11/27.

Prepare a more detailed project plan to discuss.

The objective of this meeting is to ensure that you and your team understand what's involved in implementing your ideas. You don't need to submit your project plan anywhere, but it should be written down. It must include:

  • A high-level overview of the flow of your final program
    • How will all the pieces fit together?
  • Division of labor and a rough plan of action
    • Who will do what, and when?
    • Where will you start?
    • What if you do not finish everything you set out to do?*
  • A description of how each feature will be implemented + any resources that you think might come in handy (e.g. papers, tutorials, algorithms, data)

* Design your project so that even if you only get part of the way through it, you still have an incomplete-but-displayable project.

Project Status Update

The following week, between Monday, 12/5, and Friday, 12/9, arrange to meet with your mentor TA again—this time, to discuss your progress on the final project.

Remember that the deadline is only a week away at this point!

Final Presentation

Prepare a 2.5 minute final presentation in the form of a pre-recorded demo video of your project.

Submit your demo video by Wednesday, 12/13, at 9:00 pm EST via this Google form. This form contains some additional instructions on what should be in your demo video.

Final presentations will take place on Thursday, 12/14, during lecture time (and beyond, as there will be a lot of projects to see--expect the presentations to last 2 hours or so). We'll watch a compilation of all the pre-recorded video presentations; it'll be a great way to celebrate the hard work you and your classmates have put in this semester!


  • You MUST record a demo video ahead of time. Live presentations will not be allowed (the time required to transition between groups would be prohibitive, given the size of the class).
  • Your video MUST be no longer than 2.5 minutes. If your video is longer than this, Daniel will simply cut it off when he edits it into the compilation.
  • The 9:00pm deadline on 12/13 is a hard deadline. If you submit your video after this time, it will not be included in the compilation (Daniel needs the remainder of the evening after 9:00pm to edit the videos together). This will incur a significant penalty to your final project grade.

Reminder: you do not need to submit any code at this point, provided that it's still accessible at the Github repository link you submitted in your project proposal. Make sure your repository's README documents how to use your program and any known bugs!

Technical Requirements

Overall, we want your final projects to be cohesive and in-depth, but we don't have many strict requirements for what you must incorporate into your projects.

As a rule of thumb, you should aim to implement about one new technical feature per group member.

That said, if your group wishes to focus on one or two particular features and implement them to a higher degree of complexity, that's also fine! Discuss with your mentor TA or one of the HTAs to see whether your idea meets our technical requirements.

New Technical Features

Here's a list of technical features your group might want to implement:

This list is not exhaustive. It may not even overlap with what your group is interested in. Ultimately, your group can choose to do nearly anything in the realm of computer graphics (both 2D or 3D projects), as long as we've approved your project proposal.

  • Ambient occlusion (e.g. screen-space ambient occlusion (SSAO))
  • Anti-aliasing (e.g. fast approximate antialiasing (FXAA))
  • Bump- or displacement-mapping, with the ability to toggle it on/off
  • Camera or object motion along a path defined by a piecewise Bezier curve, (e.g. to render a ride on a roller coaster)
  • Collision detection (with bounding boxes/spheres, or at the polygon level), possibly including rotational physics
  • Depth of field
  • Deferred lighting
  • Environment maps (e.g. cube maps / skyboxes)
  • Fractals: objects (e.g. plants) or terrain
  • GPU raytracing
  • High-dynamic range (HDR) rendering, perhaps with bloom
  • Lindenmayer systems (L-systems)
  • Non-photorealistic or stylized rendering (e.g. cel-shading)
  • Piecewise Bezier surfaces
  • Procedurally-generated art, environments, and/or geometry
  • Shadow mapping, with the ability to toggle it on/off
  • Shadow volumes, with the ability to toggle it on/off
  • Volumetric Rendering
  • Wave-function collapse for constrained geometry generation

For additional inspiration, you can find past SIGGRAPH papers at this link, compiled by year and by category. You can also view final projects from past years on this YouTube playlist. Some projects from older offerings of the course (i.e. before Daniel was the instructor) can be found here and here.

More Specific Technical Requirements

Real-Time Applications

If your project is a real-time application, it should run at a minimum of 24 frames per second (fps).

If this is unattainable for your project, but you would still like to present it in video form, we suggest using ffmpeg to create a video from image stills (such as those you might grab from a framebuffer).

Use of Existing Code / Third-Party Libraries

We allow and encourage you to re-use code you wrote for the earlier assignments in this semester, even including our support code.

You are also permitted to look at code from books and online sources, but you may not copy others' code and call it your own.

You may use third-party libraries if you wish, however, this should be cleared with your mentor TA first. Keep in mind that your use of a third-party library does not decrease the amount of work we expect you to do. Any third-party libraries you use must be cited in your Github repository's README.


We grade final projects holistically, so there is no precise rubric/point breakdown. Your grade for this project will be determined by several factors.

Technical Excellence

How well did you accomplish what you set out to do? Is your implementation stable (i.e. bug free and does not crash)? Does your project represent a significant, yet reasonable extension on the topics covered in the labs and assignments? We also expect that you will do something non-trivial. Your mentor TA will be able to guide you here.

Artistic and Aesthetic Quality

Does your demo look and feel cohesive? You don't have to create a full-fledged environment, but we also won't be impressed with a single shape in the center of the screen. We also encourage things like nice 3D models, nice textures (consider taking digital photographs and converting them to textures), thoughtful choice of colors and materials, careful positioning of camera and lights, significant user interaction, etc.


Does it look like your presentation was thrown together at the last minute? Is your presentation sensible and well-organized? Does your presentation include everything we asked you to include, within the time limit?

How We Grade Members Of A Group

By default, all members of a group will get the same grade. If your group has any serious issues with another member's work, you should inform Daniel or the HTAs promptly; we will not make retroactive adjustments to grades due to issues we didn't hear about until the last minute.

Where Do I Start?

There are many ways you can start the final project. For example, you might want to start from one of our assignments' stencils, if you think it might be useful for the features you want to implement.

Here's a guideline for final projects in general:

  • Always begin by doing some research.
  • Discuss ideas for potential projects with your team
    • Ideally, your final project is something that you should all have a say and interest in.


Whether you're reading this just as you're getting started with your final project, or having completed it, we hope you have/had fun!