GPU path tracer using NVIDIA OptiX (Difficulty Level: 1.5)
NVIDIA OptiX is a cool set of APIs built on top of CUDA to allow GPU ray tracing. It natively supports efficient BVH construction and ray-triangle intersection. We can write a path tracer on GPU using OptiX to support all effects in project 3. As a reward, we can expect a 10x speed up!
OpenGL Game (Difficulty Level: 2.0)
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.
Rendering Worlds with Two Triangles (Difficulty Level: 2.5)
How many triangles do you need to represent this scene and render it? Two! This article will teach you how to represent geometries using distance fields, and how to render them in real time in a fragment shader!
Point Cloud to Mesh (Difficulty Level: 2.0)
The goal of this project idea is to convert point cloud input data, which are often obtained by 3D scanners, into a mesh representation. This paper introduces an interesting and easy to understand algorithm that works reasonably well. If you want more of a challenge, you would probably try implementing this paper. To test your implementation, you can find some 3D mesh models from this repository. Then, you can run your mesh reconstruction algorithm on vertices of the input model. Once you have the reconstructed mesh, you can easily compare it with the original mesh from the model.
Two-Shot SVBRDF Capture (Difficulty Level: 1.5)
To measure a BRDF, we fix the shading point and change the incident/outgoing direction while measuring the light. However, this method is too difficult when we want to measure SVBRDF (spatially-varying BRDF), which is always different when we move the shading point.
It turns out that you can actually do SVBRDF capture using just your smartphone! You need two shots of the same scene from the same position, one with flash on and the other with flash off. Check out this paper.
If you're feeling ambitious, there's a follow-up paper that describes a method to capture the SVBRDF in just one shot!
Approximate Bidirectional Texture Function (Difficulty Level: 2.0)
BTF's, analogous to BRDF's, are a method of capturing realistic material properties from converting images of a material in varying light conditions into a texture that can be sampled from in a shader program. Check out this paper for an introduction to the BTF.
Mini Photoshop (Difficulty Level: 1.5)
- Make a cool GUI for image editing
- Implement a variety of filters and effects using fast and efficient methods
- Implement interactive paint-brushes with adjustable brush sizes and brush textures