We developed interactive ambient occlusion method using CUDA for the final project of Purdue CGT 581 CUDA course.
Since ray tracing for each pixel is embarrassingly parallel, we were able to create
nearly interactive ambient occlusion.
Each CUDA thread send a ray for each pixel, when the ray hits a geometry, then calculates a bounced ray
based on Monte-Carlo random process.
From the bounced ray, we found the hit object, and add the distance of the bounced ray to frame buffer.
Finally, averaging and normalizing the frame buffer, so that create the final ambient occlusion map.
This work does not approximate ambient occlusion, rather based on actual occluded area and the distances.