Jump to content
  • entries
  • comments
  • views

Bellerophon with SSAO

Sign in to follow this  


Screen-space ambient occlusion.

I've been experimenting a new idea for faster SSAO. To keep it short, it's a post-processing effect that only requires the depth/distance buffer. The depth buffer is blurred in a smart way ( the amount of blur is determined per-pixel, depending on the absolute depth difference between the pixel and its neighboors ), then subtracted from the original depth. This gives a value that can be scaled to get an ambient occlusion term, then used to modulate the scene buffer.

There are many advantages over the previous SSAO effect:
- much faster
- less noise artifacts
- only requires depth, not normals

At the moment I'm using a two-pass separate gaussian blur with 17 samples. It's possible to increase the performance even more than downsampling the depth buffer to 1/4th of its area and reducing the blur to 9 samples.

The SSAO effect is subtle, but works well on the Bellerophon. It's especially nice on the shadowed areas.


SPECTRE has pretty much finished the Bellerophon, with the help of Eleandor for mesh fixes. I spent an hour to texture it with SpAce's texture pack. Nothing very advanced, simply box/planet mapping and drag & dropping materials over selected triangles. The result looks a bit repetitive, but it's already nice IMO.

Wide-screen 2 monitors views:

This is the SSAO buffer term:

Single monitor view:

I've also produced a video of it:

http://www.infinity-universe.com/Infinity/Media/Videos/bellerophon.avi ( 25 MB Divx 5 ). Note that it was taken in wide screen ( 1600 x 640 ), so while pretty high quality, it caused FRAPS to slow down a bit regularly ( gotta write all the uncompressed data to the hard drive in real-time, heh ! ).

Same video, with extremely poor quality, is also available on youtube:

Finally, random pictures can be seen here in full res:


Planetary engine:

In other news, I've also resumed work on the planetary engine. There are so many things to fix that I don't know where to start, but I'm soon in vacation, and I'd like this part to be considered done before January. I'm currently experimenting terrain texturing, but in random order I also have to fix z-fighting problems with the ocean surface, improve geomorphing, optimize a bit, etc..
Sign in to follow this  


Recommended Comments

Looking good as always - don't suppose you have any before/after comparison shots for your SSAO implementation? Can be quite hard to tell how much effect it has unless you can see a with/without comparison...


Share this comment

Link to comment
I would be interested to hear how much of a performance difference your new technique gives you over the old method. There are already quite a few different ways to do SSAO, so I suppose it would depend on how you implemented it in the first place.

One thing I noticed with your method's buffer - the Bellerophon's outline has been partially occluded even though there isn't anything near it. Is this intended or is it an artifact from the smart blending technique you mentioned?

As always keep up the good work - your screen shots always serve as an inspiration!

Share this comment

Link to comment
I tried blurring the depth buffer to achieve AO as well, since the texture reads are far more cache-friendly. However, I was put off by the fact that although the scene was shaded in an interesting way, there were many areas that were shaded when they shouldn't have been and vice-versa. I see that you are getting similar results, but what is interesting is how much nicer it makes everything look, even though it's not correct.

I think the lesson here is to stick a finger up to correctness because that looks fantastic in motion :).

Excellent and motivating stuff as always,

Share this comment

Link to comment
I still haven't found a good formula for removing the outline around objects. Depending on the orientation of the object (e.g. a chair in a room) I get a black outline which looks, when modulated with the scene, like a cartoon shader.

Share this comment

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!