Main Page for Final Project.
Where to Look for Inspiration
Recent SIGGRAPH papers are a great source for ideas. Some papers contain a few relatively simple ideas that had not been thought of before -- these are great for easy implementation. Other papers build in a complex way on top of previous work. In this case, you may want to follow citations to original work from the 1990s and 2000s that may be easier for you to attempt.
If you have a specific rendering effect from the world in mind, there's probably a paper about implementing it! A great encyclopedic reference for rendering (though somewhat out of date now) is the PBRT book referenced in the readings, which is available online through Berkeley access.
Use a library you find online to load TrueType .tff or OpenType files and write a Bezier curve rasterizer to display them. Allow user to edit control points, save their own font files, and write example text in their own typefaces.
You could add UI and technical features to HW2. Some ideas:
- Add mesh simplification. Here is one example paper.
- Add remeshing, which make the triangles in the mesh have more similar areas and fewer degenerate angles. Here is one example paper.
Some ideas for extending the ray tracer. Feel free to ask for more detail and paper pointers with regards to any of these. Not all of these could count for a whole project, especially in a group of 2-3, so be clear about what you are trying to accomplish. Picking a scene and trying to render it is a good way to motivate yourself to implement multiple things. Even modeling a scene can be a reasonably large part of your project if it involves complex mathematical modeling of some phenomenon.
Textures and materials
You can add textures to a ray tracer too! However, you need to properly filter your textures. Here is a guide to doing this with ray differentials (a slightly offset ray traced next to your main ray that lets you calculate mipmap levels). Additionally,
You can also fairly easily add more BSDF options to your ray tracer, such as more realistic microfacet models. With more difficulty, you could add anisotropic materials.
You can even add normal mapping (bump mapping) to your ray tracer for simulating something like a distant ocean surface or a brick wall! This raises some very interesting filtering questions, addressed by methods such as LEAN mapping. There is much to explore in this space (see Eric Heitz's research for more on microfacets and filtering).
Yet another interesting direction is to add a glinting microfacet model. There are some very exciting recent papers (see Wenzel Jakob's other work) on this subject from SIGGRAPH 2014.
Here is the seminal 2001 paper with a dipole approximation. Newer methods have greatly improved on this, but it's a good place to start. This has lots of complicated math.
Check out Marschner et al., the paper cited in class. Again, there's lots of math, and you face a tough problem if you want to ray trace hair curves.
There's an interesting old-school volumetric approach by James Kajiya that could also be quite fun to implement.
Speeding up the ray tracer
There are both algorithmic and filtering methods to speed up ray tracers. Some of these are amenable to GPU implementations, which would provide a dramatic speedup, perhaps bringing your pathtracer to interactive speeds!
- Ray packets to trace similar rays at the same time.
- Multidimensional Adaptive Sampling and Reconstruction for Ray Tracing to make depth of field and motion blur rendering tractable.
Metropolis light transport
The elephant of unbiased rendering techniques. Fiendishly difficult to implement correctly. See Eric Veach's seminal paper and thesis (which is also the reference for bidirectional path tracing). Chapter 15.7 in PBRT may also be helpful.
- Make a cool GUI for image editing
- Implement a variety of filters and effects in a fast way
- Implement interactive paint-brushes with adjustable brush sizes and brush textures.
Interactive Graphics Using GPUs and OpenGL
You may wish to build an interactive demo scene, or even a small videogame. You are even free to build on top of existing game engines, as long as you clearly separate out what you build on top. As with other project ideas, take care to specify what the technical challenges are, and what you will build, in your proposal.