Intro Graphics Final Project
Due: ???
For the final project, you should do something cool that's more that loosely related to computer graphics. You may work in groups of up to four. It is not strictly necessary that each person's task in your group be graphics related; someone could write code to make your game playable over a network, for example.
We can help point you at resources to get started on these projects.
You do not have to implement something that's never been done before. In fact, I recommend that you don't try to do this. The idea is for you to do some research on your own, learn about some technique in depth, and build a system to both solidify and demonstrate your understanding.
Project Possibilities
First, you can do whatever you want, subject to our approval. Here are some ideas to get you started. You might need to do some Googling to figure out what some of this stuff is.
Write a video game. They don't have to be 3D, but they shouldn't be trivial either. Pong is a bad idea. However, a very nice implementation of Arkanoid or Qix would be fine. With multiple people, consider adding network play, a sound effect engine (can be platform-specific if you want), nice texture-map artwork, computer opponents, etc. Video games from groups of four should really be pretty cool.
Use the programmable features of the GPU to do something interesting. Although new rendering effects might be possible for this project, consider trying to map a non-graphics algorithm to the GPU. A fast, interactive GPU-based fractal explorer comes to mind.
Non-Photorealistic Rendering. Simulate strokes to allow the user to create images in an artistic style (watercolor, pen-and-ink, etc). Many many many project ideas here.
Texture Synthesis. Research techniques for synthesizing new patches of texture from an input sample, and implement some. Compare their tradeoffs. Start here for info.
Wang Tiles. Wang tiles are awesome. They can do so many things. Seriously, Wang tiles are great. Plus, it's fun to say "Wang tiles". Try it. Implement something cool involving Wang tiles. This could be a texture synthesis application, or one of the other ones proposed in this paper, or anything else you think is cool and has something to do with Wang tiles. WANG TILES!
Other tilings of the plane. Wang isn't the only guy who has tiles named after him. Research Penrose tilings. Check out this paper, which is sweet.
Fancy ray tracing. Take your raytracer from assignment 3 and make it do everything you ever wanted a raytracer to do. Add an acceleration structure so you can render large scenes. Add support for depth of field and motion blur. Add more complex primitives (subdivision surfaces, anyone?). Implement area light sources and soft shadows. Experiment with different sampling patterns. Trace ray differentials for texture filtering! Add bump-mapping, solid texturing, procedural texture. Cellular textures are very cool. Constructive Solid Geometry!
Simulation/Modeling. Simulate some natural phenomenon and visualize it. These phenomena could be things like corrosion, water splashing, fluid flow, burning, breaking, thin-film interference, stalactites, waves, snowdrifts, anything you like. You can generate raytraced images or an interactive simulation system. If you want to raytrace things, you might want to use a raytracer that has an acceleration structure, like POVRay. Here are some projects from MIT.
Global Illumination solutions. Read in a mesh of polygons, and solve the radiosity equation. Flat-shade each polygon with its radiosity and write a walkthrough system.
3D Modeling. Implement an isosurface extraction algorithm like marching cubes, and visualize volumetric datasets. Implement Hughes Hoppe's "progressive mesh" algorithm (or multiple ones) for level of detail. Really almost anything on Hughes's web page (ASK FIRST). Implement a procedural modeling system for plants based on Lindenmayer-systems.
Image-based rendering (check out Stanford's light field project)
Interactive shadows. Research techniques for rendering shadows in an interactive rendering system, and implement several. What are the strengths and weaknesses of these algorithms? Some things to get you and Google started: shadow maps, shadow volumes, perspective shadow maps, adaptive shadow maps, shadow silhouette maps.
What to Turn In
You will need to make a web page crowing about how amazing your project is. It should contain background information about what you did, technical information about the system you built (algorithms, platform, etc), runnable executables and/or necessary data files, and SCREENSHOTS.
We will also be having a demo party, at a time and place to be determined later. If your program is interactive (i.e., your demo isn't just a slideshow of renderings) and needs special equipment (i.e. a latest generation GPU, very fast CPU, etc), then you should plan to bring your own computer to demo day. We will be hooking computers up to a projector for all to see. If you're just going to show images (because, say, your project is non-interactive and generates very pretty pictures very slowly), then create a PowerPoint presentation about what you did, complete with images. You can use our computer for showing PowerPoint.