Main Page for Final Project.

## Rendering Volumetric Scattering

In assignment 3, you did surface rendering where it is assumed that light only scatters when it hits a surface. In this case, the rendering equation is an integral over all surfaces in the scene. However, this surface rendering technique could not render some cool volumetric scattering effects like fog as shown below.

Image Credit: Chris Fontas

To model volumetric scattering, you need to compute an integral over all volumes and all surfaces in the scene. You can do this by modifying your path tracer. The main difference is that a ray may get scattered before it hits any surface in volume. You may find the following resourses useful for the project.

This chapter of Wojciech Jarosz's thesis introduces some basic concepts about volumetric scattering. This paper by Lafortune and Willems has implementation details. You can skip section 4 of the paper for a simple path tracing implementation. But a bidirectional path tracing implementation will definitely help you reduce noise in volumetric scattering rendering.

## Photon Mapping

You may have noticed that the path tracer in assignment 3 is very inefficient on rendering caustics. To improve caustics rendering, you can implement a technique called photon mapping. Photon mapping is more efficient on caustics because it allows path samples to be shared across pixels. The core part of photon mapping is a stucture to lookup photons inside a sphere in the scene. Options for the structure include KD-tree and hash grid.

Chapter 15.6 in PBRT is a good reference on photon mapping. You may wish to consult this paper on advanced, progressive photon mapping.

## Point Cloud to Mesh

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.

## Position Based Fluid Simulation

Fluid simulation may sound scary, but don't worry. This paper introduces a not very complicated algorithm for fluid simulation.