2007: The year SSAO broke

February 10, 2008 at 4:39 pm (Demos, Game techniques)


(image from RGBA demo kindernoiser)

One of my very first posts on this blog discussed the image space ambient occlusion paper by Shanmugam et al. That post has more hits than any other entry I’ve made here. So I thought I would take a few minutes and survey the state of the art in screen space ambient occlusion.

CryTek gave a presentation at SIGGRAPH 2007 in the Real-time Rendering course. They didn’t reveal any exact implementation details, but did reveal that they are only using the depth buffer from their z pre-pass (unlike the Shanmugam paper which uses depth and normals). They additionally noted that they use a per-pixel rotated disc of sample offsets to reduce sampling artifacts. This technique is common for reducing sampling artifacts in shadow mapping.

Iñigo Quilez ( of RGBA demoscene group, yay ) has created a website dedicated to his use of SSAO in the RGBA demo kindernoiser. One unique contribution is that he suggests doing a post-SSAO blur to lessen sampling artifacts. He has given the most detail by into the implementation of his technique, by far. A thread which follows some of the early results he was getting is @ gamedev. He also provides a analytic solution for the ambient occlusion due to a sphere here.

Megan Fox developed a technique which she refers to as “Crease shading“. It differs very little from the original Shanmugam technique. However, she provides an excellent breakdown of the technique and some comparison screenshots.

A tweak that I implemented for SSAO is to perform the ambient occlusion computation on a lower resolution texture and then upsample using an boundary respecting filter. I suggested on this blog (here) that the bilateral upsampling technique works well. I have received email from a few people that have tried it and are getting pretty good results.

So.. a whole lot of people were very interested in SSAO. Rightly so. Approximating an expensive technique like dynamic ambient occlusion (which itself is an approximation!) in a geometry-independent manner is a valuable tool. Of course, it has some serious drawbacks such as not being able to account for occlusion from back facing polygons and causing over occlusion, to name a few. If anybody knows of any other implementations/discussions of SSAO anywhere on the web, please post them here.



  1. Nick Porcino said,

    I’ve got a discussion going on my blog with a few more interesting techniques for SSAO, here, including one or two potentially realtime usable methods from the non-realtime world:


  2. levelofdetail said,

    Excellent article. Thanks for linking. I look forward to reading your blog.

  3. chelvis said,

    Great year. I’d been coding another implementation of SSAO:


  4. Angelo Pesce said,

    I’ve spent so much time reading your blog, and enjoyed it, that I wanted to do something to repay that. So yes I guess I could have chosen better gifts, but instead all you get is spam about my blog, that’s http://c0de517e.blogspot.com/

    Err… hope you like it.

  5. levelofdetail said,

    Unreal engine 3.5 showcasing SSAO at GDC 08 http://www.gametrailers.com/player/30825.html

  6. Andreas Lindmark said,

    I’ve made an implementation that uses ideas from Iñigo Quilez, Crytek and Shanmugam plus hopefully some original ideas. I’ve also tried Bilateral upsampling with good results.
    The implementation is part of my master thesis and im in the process of writting the report but if anyone is interested i’ll post it somewhere pubic when it is done.

  7. Andreas Lindmark said,

    oopss, always read twice before you make a post. The last line should of course be “…somewhere public…”

  8. levelofdetail said,

    I would be very interested!

  9. Recovering from I3D and GDC « Level of Detail said,

    […] interesting poster at I3D (and also a short talk at GDC) was an extension to SSAO. The idea was to calculate a piece-wise linear approximation of the horizon ala horizon mapping. […]

  10. Malmer said,

    I’ve fixed quite a lot of artifacts in the method used in the gamedev post. I used it for 3dsmax scanline renders, but it can be modified for shader use.

    Check my blog for code and images:

  11. realtimecollisiondetection.net - the blog » A brief graphics blog summary said,

    […] Nick Porcino and Jeremy Shopf nicely summarized several approaches to screen space ambient occlusion. I like the utter simplicity of Mike Pan’s approach as implemented in Blender. […]

  12. Lost in the Triangles » Blog Archive » Strided blur and other tips for SSAO said,

    […] you’re new to SSAO, here are good overview blog posts: meshula.net and levelofdetail. Some tips and an idea on strided blur […]

  13. Screen Space Ambient Occlusion – meshula.net said,

    […] An interesting discussion in a thread at Level of Detail. Shalinor discusses the related technique of Crease […]

  14. Horizon Split Ambient OcclusionJeremy Shopf said,

    […] interesting poster at I3D (and also a short talk at GDC) was an extension to SSAO. The idea was to calculate a piece-wise linear approximation of the horizon ala horizon mapping. […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: