This paper has gotten the most attention from me from the limited time I’ve had to look through I3D papers. It’s not revolutionary or difficult to understand, but it seems fairly practical. The paper describes two methods. An image-based technique (i.e. performed on a 2D image of the scene, independent of geometric models/surfaces/media) for high-frequency ambient occlusion. Here, high-frequency refers to ambient occlusion caused by local surfaces to a point on a surface. A second technique addresses ambient occlusion on a global scale.
Image-based technique summary:
Each texel in a rendered depth map of a scene is represented as a sphere with a radius proportional to the depth in the scene. To find the ambient occlusion for each texel, sample some stochastic pattern in the neighbohood around the texel in question, calculating the area of the spherical cap subtended by the neighbor sphere (see Figure 3 in the paper). This calculation is used by many real-time occlusion techniques (see my other entry here )
Object-space technique summary:
For non-local ambient occlusion (inter-object occlusion, etc.), each object is represented as spheres. This setup is similar to the “Real-time Soft Shadows in Dynamic Scenes using Spherical Harmonic Exponentiation” paper at SIGGRAPH06. To calculate the ambient occlusion, an image-space technique is performed. A billboard is drawn at each sphere in screen space and the amount of occlusion of each pixel within that quad is increased by an amount based exponentially on the distance from the center of the quad. After performing this operation on all representative spheres in the scene, you have a rough approximation of the ambient occlusion.
I think these methods are certainly useful, and there are probably lots of small improvements that could be made in implementation that could improve performance. It may be more practical to use the image-based technique and not the global technique; It seems that the major bottle neck is the global technique. One improvement to the image-based technique would be to use an array of constants instead of a 1D texture lookup to find offsets for neighbors. Unnecessary texture fetches are bad.. especially dependent ones.
Another thing to look at might be optimizing the generation of the representative spheres (less = good) as in Wang et al.’s “Variational sphere set approximation for solid objects” paper and/or using low detail representations for distant objects. You could also construct the billboards used in the Geometry Shader from skeleton/medial axis vertices.