Final Project

Dates and Deadlines

Proposal due: Monday May 17th, 11:59pm

Rendering Competition: Friday June 4, 12:00pm

Final writeup due: Friday June 4, 11:59pm

Late days may not be used for the final project.

We strongly recommend that you work on the project in a group of 2. However, you can work alone or in a group of 3 with the approval of one of the instructors or TAs.

Each member of the group should have an identifiable subproject. The project should also be scoped to the number of people in the group; a project being done by a larger group should be more challenging than one from a smaller group. Look for projects where each person's work is separable, and yet everyone contributes toward a shared goal that could not be accomplished individually.
If you need a partner, post a note in Ed.


For your final project, your task will be to produce a realistic image of a real object or scene. The scene or object should be challenging enough to require you to design and implement an advanced rendering algorithm.

The final project is your chance to investigate an area that interests you in more depth, and to showcase your creativity. To get an idea of our expectations, check out these descriptions of projects from past course participants (pay special attention to projects from the past few years).

On June 9th, you will present your project to an independent panel of judges as part of the CS348b 2020 rendering competition. Teams creating the best projects (as determined by the judges) will receive exciting prizes!

Here are some things to think about following when choosing a project:

  • What are your goals? Try and phrase this as specific questions that you would like to know the answers to, e.g. How do I model reflection from surfaces with fine geometric structure, such as fur?
  • What unique imagery would convincingly demonstrate that you have accomplished your goals? Try and keep this in mind throughout your project, since in computer graphics our work is often judged by the images we make.
  • What has already been done in this area? You probably won't have time to completely investigate this, but you should definitely spend some time reading research papers. We can help you with finding appropriate references. When you read a paper, look for what has not been done as well as what is already understood; think about new things that you could try.

Project Ideas

Try to find a project idea that you're passionate about; you'll be spending a lot of time working on it, so it's good to be excited about it!

You may find inspiration from some of the assigned reading as well as from some of the more complex exercises in Physically Based Rendering. Also see the "Further Reading" section at the end of chapters that are about topics that may interest you for your final project.

Here are some ideas that you may find interesting or may spark ideas about other projects.

  • BRDFs and reflection models
  • Illumination
    • Modify pbrt's area light model to allow spatially-varying emission based on an image map. Implement a technique for importance sampling points on the emitter according to the image map's distribution.
    • Implement a technique like Conty Estevez and Kulla's for rendering scenes with many light sources.
  • Volumetric light transport
  • Sampling light paths effectively
    • Model a scene where most of the indirect lighting is concentrated in a small number of paths. Implement a path guiding algorithm like Müller et al. or Vorba et al. to render such scenes more efficiently.
  • Machine learning and rendering
    • Implement a denoiser based on CNNs using ideas from Chaitanya et al. or Bako et al.
    • Train a CNN to model multiple scattering and use it to render volumetric effects, as Kallweit et al. did.
    • Think of another clever use for ML with rendering and render something amazing with it.
    • Note #1: if you pursue a machine learning-based project, we expect you to train a model yourself and not to just apply a pre-existing trained model
    • Note #2: ML projects must have rendering as a foundation (light transport simulation) and not computer vision (e.g. GANs for image synthesis).

Keep in mind that many projects include a substantial modelling component; that can even be the main focus of your project. Examples include implementing algorithms that simulate fluid flow to model liquids or smoke. For example, to model hair, you might simulate a mass spring system.

Note: it's not a requirement to implement your project in pbrt. You're welcome to use other 3D programs for your project's implementation.

Project Proposal

As a first step you should write a one page project proposal using LaTeX, convert it into PDF format, and submit it via Github. Only one student per group needs to submit the proposal. The proposal should contain a picture of a real object or scene that you intend to reproduce. We suggest that you first pick something that you would like to simulate, and then investigate what techniques need to be used. A real object that you can carry around with you is best, but a good photograph or painting is almost as good.

In addition to having illustrative pictures, your proposal should state the goal of your project, motivate why it is interesting, identify the key technical challenges you will face, and outline briefly your approach. If you are implementing an algorithm described in a particular paper, provide the reference to the paper. Please list all group members' names clearly at the top of the page, and if you plan on collaborating with others, briefly describe how each person's piece relates to the others.

Here is a good example of a project proposal.

The purpose of the proposal is to get everyone organized early, and it will give us the opportunity to provide feedback as to whether we think your idea is reasonable, and to offer some technical guidance, e.g. papers you might be interested in reading.

Rendering Competition

On the day of the rendering competition (see dates at the top of the page), each group will present their results - make sure to rehearse your presentation a few times to be prepared!

Remember to bring the object/images that you are modeling and reproducing. The goals and technology that you developed should be obvious from the image itself. Keep in mind that you absolutely need to have your rendering done by this date--late days are not allowed on the final project.

For spring quarter 2021, the presentations will be over Zoom. More details to come, we will update this page once everything is finalized.

Your presentation must be structured as follows:

  • First slide: Names, Title & Inspiration - an example of the image you are trying to create, such as a photo from the real world, a particular effect you are interested in etc...
  • Second slide: Final image - The final image that you are entering into the rendering competition. This slide may only include a single image, and should represent the culmination of your results for the project.
  • Final slide: Technical Details - give a brief description of the algorithms/techniques you implemented in your project. You can assume that the judges probably have heard of the techniques before, and thus want a brief, precise summary of how they were incorporated into your project (how you used this technique to meet your needs). It is often helpful if you can display images contrived to demonstrate that your algorithms indeed work as claimed (test shots, etc). This is also a good time to let the audience know if a technique was tried, and didn't work (again, test images work great here)

After all presentations are complete, judges will rotate between groups asking further questions. Feel free to prepare additional slides / materials that will help you explain your results in more detail if asked to do so by a judge. At the end of the competition, the judges will vote and present prizes to the winning teams.

Final Writeup

Your final project writeup should be written in LaTeX and submitted as a PDF on Github by June 4th (no late days allowed). Only one submission per group is needed. The writeup should be roughly 3-4 pages, and contain the following:

  • A 2-3 page summary of the algorithms/techniques used to produce your images (use references to academic papers for extra detail). Please highlight how your implementation differed (was a subset of, augmented) the technique described in your references.
  • A description of problems encountered (techniques that did not work?) and how they were overcome
  • A clear description of what work each team member performed
  • A results/conclusions section containing your final image and any additional images you didn't have a chance to show during the competition that might be especially cool or good illustrations of your technique

Please take the time to create a high quality writeup for your project (think about it as writing a tech report you'd like to keep permanently on the web). We will be archiving the final project reports and they will be viewed for years to come.

Example final writeups from recent years:


The final project will count 40% (or more, if based on our judgment, we consider the project truly outstanding) towards your final grade in the course. We will consider strongly the novelty of the idea (if it's never been done before, you get lots of credit), your technical skill in implementing the idea, and the quality of the pictures you produce; tons of coding does not necessarily make a project good.

We encourage you to:

  • Work on a reasonably ambitious project (the course staff will work with your team on this as part of the project proposal)
  • Put a reasonable amount of effort into executing on your idea (it is acceptable if your image is a little buggy)
  • Submit a thoughtful writeup that demonstrates intellectual curiousity

When you are finished with your project you should post the source for your system and any test scenes and images that you have created. As stated above, you are permitted to work in small groups, but each person will be graded individually based on their own contributions. A good group project is a system consisting of a collection of well defined subsystems. Each subsystem should be the responsibility of one person and be clearly identified as their project. A good criteria for whether you should work in a group is whether the system as a whole is greater than the sum of its parts!

The final project can be a lot of fun. Good luck!