| CPSC 424 | Computer Graphics | Fall 2025 |
The goal of the final project is to explore some topic in the field of computer graphics beyond what was covered in class. In addition, it addresses the "a significant written, oral, and/or visual presentation of work beyond the program code itself" component of a capstone course.
This is an individual project. You may get technical help from others, but the effort and ideas that go into producing solutions should be yours.
You may use AI as outlined in
the Use of AI policy —
Copilot's inline coding suggestions, explain, fix, review and
comment features but not code generation from English prompts.
Also:
Looking for examples to explain technical and
implementation-related topics is a common way to learn new things, and
is allowed but be careful to keep within the spirit of the type of
project you are doing — researching how to implement something
does not mean looking for an implementation and then copying it
or using it as an example for large chunks of code that you are
handing in as your own creation for an implementation or programming
project. Also be sure to include sources you use in your list of
references.
Topic/output option: Email your project topic, project type, and choice of output options. I would like to see everyone working on a different topic or at least different aspects of a large topic. If you choose something that someone else has already chosen, you may be asked to pick something else. The sooner the better for getting your first choice!
Progress update: This is a few sentences or paragraphs summarizing your progress so far and what you have left to do. Hand in a hardcopy of your update in class, otherwise email your update.
Project: Hand in the following elements as applicable for your project type and output option:
Hand in hardcopies in class.
Hand in your code and any other electronic materials by copying them to a folder project within your handin folder (/classes/cs424/handin/username, where username is your username). All elements handed in must be in a format I can view/run — use PDF for documents, make sure any images used with Blender are packed so they are contained in the .blend file, and for WebGL programs make sure you use relative paths and (for provided things) follow the directory structure we've been using or (for everything else) put elements in the same directory or a subdirectory of where your program is (and copy those subdirectories when you hand in your files) If you have other kinds of files or formats, check with me before the last minute to determine the best way to hand in your work.
Check that the result is that your files are contained in /classes/cs424/handin/username/project — if not, fix it!
Presentation: Presentations should be approximately 10 minutes long and will be done in class during the first part of the final exam timeslot.
Projects can take several different forms, with the option of a presentation and/or a paper.
Research paper. This is purely research about a topic in computer graphics, with no programming or practical work. It can be an in-depth exploration of a topic introduced in class (going well beyond what was covered in class) or a different topic entirely. Output options:
Implementation. Investigate a topic in computer graphics and implement the technique, algorithm, or some other aspect of the topic using WebGL or three.js — most likely by writing shaders. Output options:
Practical work. Investigate some topic in computer graphics and explore/demonstrate that topic using Blender or three.js. (The difference between this and an implementation project is that an implementation project the focus is on implementing the technique yourself rather than working with existing software or a library.) Output options:
Programming project or application. This type of project involves a more substantial implementation, such as a recursive raytracer or particle system from scratch, or the creation of an animated short in three.js or Blender. (The difference between this and an implementation or practical work project is the scale, cohesiveness, and polish — implementing a whole system or putting together a coherent short which utilizes multiple elements rather than one or more demos illustrating a topic.) Ouput options:
There are many aspects of computer graphics that could be investigated — the main criterion is that you go beyond what was covered in class. A number of possible topics are listed below. You can also, with approval, choose another topic of your own.
Rendering —
Most of these could be research paper
topics, implementation projects (if you implement shaders
demonstrating the effects), or practical work (if you combine
learning about what the topic is with demos of the effect using
three.js or Blender). A full recursive raytracer implementation
would be an application project.
Non-photorealistic rendering. Gooch shading and cel shading were introduced in lab 4. What are some other possibilities?
Photorealistic rendering. Soft shadows, caustics, diffuse inter-object reflection, anisotropic reflection, diffraction, dispersion, and subsurface scattering are some of the ways in which our rendered images fall short of true photorealism. Address some of these — what does it refer to and how can it be achieved? Or you could look at certain types of materials such as metal, marble, and/or skin and address how to achieve realistic rendering of those materials.
Global illumination models. Methods such as ray tracing, path tracing, photon mapping, radiosity, Metropolis light transport, spherical harmonic lighting, ambient occlusion, and image-based lighting (and variants) take into account light reflected from other surfaces in the scene and not just direct illumination from light sources. Look into some of these.
Physically based rendering. What is it? What's involved in it?
Raytracing. This needs to go beyond what is covered in class, such as implementing a recursive raytracer in WebGL, addressing extensions to the basic recursive raytracer to achieve greater realism, or looking into data structures for improving efficiency.
Other ways of achieving interesting effects, such as the stencil buffer and multipass rendering.
Modeling —
Techniques other than polymeshes for modeling objects, such as CSG (constructive solid geometry) or particle systems.
Data structures and algorithms —
How can aspects of the rendering process be speeded up? You could look at particular data structures such as quadtrees, octrees, BSP (binary space partition) trees and address what they are and how they are used, or focus on specific elements of the rendering process and address the techniques used in that application.
Using Blender —
Advanced lighting — consider features such as ambient occlusion, subsurface scattering, area lights.
Character animation — look into armatures, rigging, skinning, posing, and animating.
Physics engine — animate rigid bodies or soft bodies; simulate cloth, fluids, or smoke; or use particle systems.
Using three.js —
Explore more of three.js — what shaders does it provide? How do you work with custom attributes in a shader? How can you create dynamic cubemaps? How can you create scenes with multiple reflective or refractive objects? How do you use bumpmapping? What other features can you find and figure out?
Investigate particle systems in three.js and create something nifty.
Explore physics engines for three.js and create an animation that includes dynamics.
Applications —
Use WebGL, three.js, and/or Blender to create an animation or game. For an interactive program, you might model objects in Blender and import them into three.js.
Look into applications of computer graphics, such as in the movies. Address how graphics is used, specific techniques that are relevant, some history if appropriate, etc.
Libraries and hardware —
Learn about the last version of OpenGL, OpenGL 4.6. What's new or different about it compared to OpenGL 2? Or look into other libraries such as Vulkan (the "next generation OpenGL") or Microsoft's Direct3D. How do they compare to OpenGL and WebGL?
Learn about and explore WebGPU. (Chapter 9 of the text provides an introduction.)
How do GPUs work? Learn about the hardware architecture.
Look into general purpose computing on GPUs i.e. using GPUs to do computations unrelated to graphics. How does this work?
Page lengths are based on single spacing with a standard font size and margins. Please do not play games with font size and margin to either inflate a too-short paper to minimum length or squeeze a too-long paper into the maximum length.
All projects (paper and/or presentation) must have a bibliography listing references used, properly cited. The most common citation styles for CS are the ACM and IEEE styles, but the specific style you use here matters less than that you include citations with the appropriate information.
For technical references consulted for coding tasks, include a comment with a URL at the relevant point in the code if there's a distinct bug or task that the reference helped with as well as a (briefly) annotated list of all references used. "Briefly annotated list" means a list of URLs along with a short identification of what each resource is about / was used for — grouping URLs together into categories with a label or short description for each category is fine. Be thorough about listing everything you found helpful, but you do not need to include pages you looked at but did not learn anything from.
A research paper should include relevant background, context, advantages/disadvantages, etc while a paper or short paper (for other project types) can focus primarily on the technique itself.
For papers, the quality of writing and explanation is important. Explain your topic to your reader, which you can assume is someone who has taken this course but may not know more about computer graphics than that. Your writing should also convey that you understand the topic. Explain terms in your own words. Proper grammar and correct spelling and punctuation are expected, and your paper should be well-structured and appropriately organized.
Presentations should convey the key points of your topic. You should plan and practice your presentation ahead of time so that it is polished and uses (but does not exceed) the allotted time (10 minutes). For larger topics (such as a research paper) you should focus on an interesting or important part of the topic and cover that well rather than trying to cram too much into the presentation. Pitch the presentation for your classmates — assume a shared background in terms of material covered in the course, but do not assume knowledge of your particular topic outside of that.