Bellerophon with SSAO

Published December 13, 2007
Advertisement
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.

Bellerophon

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:

http://www.infinity-universe.com/Infinity/Media/Screenshots/bellerophon1.jpg
http://www.infinity-universe.com/Infinity/Media/Screenshots/bellerophon2.jpg
http://www.infinity-universe.com/Infinity/Media/Screenshots/bellerophon3.jpg
http://www.infinity-universe.com/Infinity/Media/Screenshots/bellerophon4.jpg
http://www.infinity-universe.com/Infinity/Media/Screenshots/bellerophon5.jpg
http://www.infinity-universe.com/Infinity/Media/Screenshots/bellerophon6.jpg
http://www.infinity-universe.com/Infinity/Media/Screenshots/bellerophon7.jpg
http://www.infinity-universe.com/Infinity/Media/Screenshots/bellerophon8.jpg

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..
Previous Entry Multimonitor support
Next Entry Parallax mapping
0 likes 5 comments

Comments

jollyjeffers
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...

Jack
December 13, 2007 05:22 PM
Jason Z
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!
December 13, 2007 09:17 PM
Gaiiden
Bee.. A... youtiful
December 14, 2007 02:41 AM
Stuart Yarham
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,
stoo
December 14, 2007 07:20 AM
FoxHunter2
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.
December 26, 2007 06:33 PM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement