In this project I focused on an advanced rendering technique called Bi Directional Path Tracing with Multiple Importance Sampling this technique somehow combines the classic Path Tracing algorithm with Light Tracing algorithm and exploits the benefits of both techniques. First I start by some rendered images and then I will describe some technical details.
For Modeling I used try and error method to make the my Cornell Box look like the original Cornel Box. After spending hours working with Maya I made my box and it looked good. Then I realized that the data about the Cornell Box is available online! Which means I could save hours by just plugging in bunch of numbers! Anyways I think it was a good modeling practice and here you can see a comparison between my try-and-error-made model with the original Cornell Box.
Description of Path Tracing, Light Tracing and Bi‑Directional Path Tracing: Images are taken from [5]
For the Multiple Importance Sampling part we have to assign the weights of the paths relative to the probobility of having that path in our sampling scheme. At the end the estimated flux per pixel would be:
The only criteria here is that all the weights for paths of a given length sum up to one:
Any weighting that satisfies this condition would be an unbiased scheme which will converge to the final solution by increasing the number of samples.
For the Naive Bi Directional Path Tracing I used equal weights (1/n) for all the Wij of the same length. For implementing the Importance Sampling we should satisfy the following condition:
[1] Lafortune et al., Bidirectional Path Tracing", Compugraphics 1993
[2] Veach and Guibas, Optimally combining sampling techniques for Monte Carlo rendering, SIGGRAPH 1995
[3] Veach et al., Metropolis Light Transport, SIGGRAPH 1997
[4] Veach et al., Robust Monte Carlo Methods for Light Transport Simulation, Chapter 9 and Chapter 10
[5] Lafortune, Mathematical Models for Light Transport Simulation