In this recipe, we will implement another method, called path tracing, for rendering geometry. Similar to ray tracing, path tracing casts rays but these rays are shot randomly from the light position(s). Since it is usually difficult to approximate real lighting, we can approximate it using Monte Carlo-based integration schemes. These methods use random sampling and if there are enough samples, the integration result converges to the true solution.
We can give the path tracing pseudocode as follows:
For each pixel on screen Create a light ray from light position in a random direction For the amount of traces required For each object in the scene Check light ray for intersection If intersection found Determine the hit point and surface normal Calculate diffuse and specular comp. at hit point Cast shadow ray in random direction from hit point Darken diffuse component based on shadow result...