Implementing GPU-based path tracing
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...