0. Cubes (★)

Write a simple interative scene viewer and then manually create a human-readable 3D scene file for it. This is the only 100% individual project.


Math & Physics: Coordinate system
PL & Data Structures: Model-Entity
Array scene graph
Software Engineering: Compilation environment (g++/MSVC/icompile)
Revision control (svn)
Modeling test cases (in .scn.any)
Programmatically creating data
Visual Art: Working in 3D space
Abstracting shape
Modeling from reference

1. Meshes (★★)

Model a scene with a skybox, light sources, and a texture-mapped heightfield from a programmatically created model file.


Math & Physics:
PL & Data Structures: Indexed triangle mesh
Texture coordinates
Reading images
Using parametric polymorphism (templates)
Reference counting (shared_ptr)
Software Engineering: Working from a specification
Team software development
File format standards
Code review
Debugger (gdb/MSVC)
Visual Art: Lighting
Seamless tiling

2. Eye Rays (★)

Write a ray caster with direct illumination and reproduce an image of a complex scene.


Math & Physics: Ray-triangle intersection
Direct illumination
PL & Data Structures: Using a k-d Tree
Writing images
Image buffer
Closures (C++ functor)
Kernel-based concurrent programming
Software Engineering: Scheduling
Team management
Visual Art: Field of View

3. Recursive Rays (★★)

Implement Whitted's [78] recursive ray tracer with shadows and reflection, and then measure the performance and scalability of alternative spatial data structures and threading models.


Math & Physics: Shadows
Specular reflection
PL & Data Structures:
Software Engineering: Designing for reuse
Large team programming
Conducting an experiment
Automated tests and experiments
Visual Art: Color theory
Dynamic range

4. Photon Mapping (★★★)

Implement Jensen's [96] Photon Mapping algorithm for global illumination as a complete solution to the rendering equation.


Math & Physics: Deep dive into radiometry
Importance sampling
Russian roulette
Rejection sampling
PL & Data Structures: Working from scientific papers
Hash grid
Implementing polymorphism (C++ traits and overloading)
Software Engineering: Software architecture
Visual Art: Depth of field
Contact shadows

5. Midterm Project (★★)

Choose your own topic and team and apply what you've learned to achieve your own goals.


6. Real-Time Rendering (★)

Write your first hardware graphics program with custom shaders for transformation, direct illumination, and shadows.


Math & Physics: Motion blur
Affine transformations
PL & Data Structures: Register machine model
Object, World, and Camera spaces
Massively parallel programming
Functional programming
Software Engineering: Interactive debugging
Visual Art: Animation

7. Interaction (★★)

Create a third-person game with physics, character animation, and environment decals.


Math & Physics: Rigid body physics
Collision detection
Projection onto arbitrary surfaces
PL & Data Structures: Scene graph
Writing your own specification
Software Engineering: HCI
Visual Art: Framing and composition for a dynamic camera

8. The Final Project (★★★)

Design your own project for a team of any size to execute your artistic and technical vision. Refine and extend a previous project or explore a new area of computer graphics such as expressive rendering.