Ambient Occlusion by the Bucket-Load
Volumetric Obscurance - Bradford Loos, Peter-Pike Sloan. I3D 2010
This paper presents two techniques, a simple line sampling technique and a more involved area sampling technique.
Line integral technique – Depth values are sampled in a uniform disc around each screen-space pixel. This disc has a radius that is constant in object space. For each sample, a line integral of the occupancy for that sample is computed. In plain speak, this is the ratio of stuff to non-stuff between the view-ray intersection of the unit sphere around the pixel and the aforementioned disc (see illustration). Therefore depth is considered analytically in the calculation of AO and as a result the computed AO should be less noisy during camera movement. The authors also posit that suitable results can be achieved with less samples because the samples are generated in screen-space vs. in object space, where object space sampling can result in multiple samples being close to each other in screen-space (which is where depth is ultimately sampled). This results in a more accurate consideration of nearby occluding surfaces.
Area integral technique- Very similar in spirit to Angelo Pesce’s “Variance Methods for Screen-Space Ambient Occlusion” in ShaderX7. A mip-map of depth average and variance is computed for the depth buffer. This
statistical information is then used to compute an AO value without undersampling artifacts. The authors state that only one sample can be considered before the performance becomes prohibitive. I’m probably misunderstanding their technique because it seems to me that most of the overhead is in generating the hierarchical statistical information about the depth buffer. In the case of one sample, you figure out the screen-space area of your sampling disc and sample the mip-map level in which a texel covers about the same amount of screen-space. If you decide to use five samples instead of one, each sample would represent about 1/5th the amount of screen-space as a single sample, so you would in turn sample the mip-map at the level in which a texel is about 1/5th the screen-space area of the sampling disc.I’ll have to reread this section later.
The authors also present a thickness model that is supposed to treat surfaces in the depth buffer as if they aren’t part of a relief image, i.e. each surface has a certain thickness, so nearby pixels shouldn’t be occluded by them if they are a certain z-distance away. I’m pretty sure that just about every SSAO technique already does this. It’s usually covered by a world-space distance falloff or depth thresholding.
The paper also discusses computing AO at different frequencies and combining them, which I believe is what is done in the article “Multi-layered, Dual Resolution Ambient Occlusion” by the guys at NVIDIA.
Volumetric Ambient Occlusion – László Szirmay-Kalos, Tamás Umenhoffer, Balázs Tóth, László Szécsi, and Mateu Sbert. IEEE Computer Graphics and Applications. 2009.
Though this paper is a little dense, it boils down to a few simple ideas. The most important is a method for generating occlusion test samples that are above the tangent plane, without actually having to do tangent plane calculations (ala Horizon-Based Ambient Occlusion). This is done by sampling within a sphere of radius R/2, with its center R/2 units away from the shaded point along the normal. This is the largest sphere above the tangent plane and also contained within the original sampling sphere (of radius R). Occlusion is calculated via an integral similar to that used in the Volumetric Obscurance paper discussed above.
Ambient Occlusion Volumes – Morgan McGuire. Technical Report. 2009.
This tech report is a much more fully developed implementation of the ideas I discussed in the article “Deferred Occlusion by Analytic Surfaces” in ShaderX7. The occlusion due to a triangle is computed analytically and splatted onto the scene in a deferred manner. The same equation was used for computing form-factors in Baum’s 1989 radiosity paper and was previously used for AO by Hoberock and Jia in the GPU Gems 3 article “High-Quality Ambient Occlusion”. A 3D bounding volume of the influence of each primitive is generated via the Geometry Shader to compute the occlusion value to be splatted. The reported framerates are surprisingly good, though I believe it is mentioned that AO is computed at a drastically reduced resolution. At least I think that is what is being referred to by “15×15 subsampling”. There is probably a lot of room for performance improvements to this algorithm. The author states that all AO Volumes are precomputed (dynamically outputting geometry from the GS adds 25% more render time). I don’t think is an unreasonable assumption.. most scene geometry in games is static. But considering that all bounding geometry is essentially a cube, an instanced stream of cubes could be rendered, where each cube fetches the primitive’s vertices it is bounding and computes its own vertex positions in the vertex shader. This would eliminate the use of the GS. Also, doing an early out in the pixel shader based on depth would help with fill in situations where the volume is covering parts of the screen that are in the distance and couldn’t possibly be occluded.
Hybrid Ambient Occlusion – Christoph K. Reinbothe, Tamy Boubekeur and Marc Alexa. Eurographics 2009.
Computes ambient occlusion by raycasting a voxelized representation of the scene per-pixel and filtering the results. This uses everyone’s (especially mine) favorite scene voxelization technique. Didn’t read this one too in-depth, but it seems to be worth a closer look.
February 5th, 2010 at 4:55 pm
Great to see people are reading our paper.
The multi-frequency stuff I think you’re talking about is actually a simpler idea than the multi-layer stuff done by Louis. When we talk about dual-radii, we just mean using two volumes at each point you sample, one small, one large. The sample counts can differ for each radius if you’d like. It’s just supposed to combine both crease-darkening and larger scale effects like contact shadows.
Louis’ stuff is using more of ‘shoot rays out and see what we hit’ type of approach so he shouldn’t have these types of problems. But when you compute the occupancy of a volume (like we do) if your volume is too small you miss the big stuff, and if it’s too big you miss the little stuff. So we tried doing both.
Thanks again for taking the time to read the paper.
February 6th, 2010 at 7:15 am
[...] Shopf gives a nice summary of recent ambient occlusion papers. AO is becoming the new Shadows—every conference must have [...]
February 10th, 2010 at 2:28 pm
Judging only Fig. 1 from the Volumetric Obscurance paper: what has this to do with AO? Look at all that halos (e.g. around the pillars). It rather looks like a blurred edge filter. It has nothing to do with AO. It might sound harsh and negative, but it appears to me that we are deviating more from real AO. First with techniques that approached AO, now with techniques that approach techniques that approached AO, until something totally unrealistic and unrecognizable.
February 11th, 2010 at 9:41 am
Well, if you’re quibbling about the title of the blog post, I guess I could have called it “Various Papers About Making Parts of Your Image Darker Using The Depth Buffer.”
The underlying technique described in that paper is not different than many of the other SSAO techniques. While I’ve often griped about the merits of “SSAO” techniques, someone said to me, “You know.. for disliking SSAO you sure do read a lot of papers about it.” The fact is that this family of techniques serves a purpose and adds something interesting to real-time applications. It may not be strictly ambient occlusion and may end up looking like a low-passed edge filter in many implementations .. but it’s got the name SSAO now and there’s no point in bickering about terminology
I thought Megan Fox had it right when she called her implementation “Crease Shading”.