| Thursday, December 13, 2007 |
 Bellerophon with SSAO |
Posted - 12/13/2007 5:03:52 PM | 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:
http://www.youtube.com/watch?v=qFBkddXaUDA
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..
| |
| Saturday, December 1, 2007 |
 Multimonitor support |
Posted - 12/1/2007 7:59:07 AM | Multimonitor support
Finally, I have recently added multimonitor support.
If you've followed Infinity's development for a while, you'll probably go, "eh ? I thought it already supported multiple monitors !?", thinking to Kaboom22's triple-screen setup.
The trick here is that Kaboom's system used a special device, the Matrox Triple head 2 GO to make windows "believe" there's only one physical monitor instead of 2 or 3. It's completely transparent to the program; Windows just reports a single screen of a wide resolution ( like 3840x1024 ) instead of three.
But if you have a multimonitor setup ( 2 or 3 screens ) without this device, like me.. well.. you're out of luck.
A week ago I decided to have a look at adding support for multiple screens into the I-Novae engine.
Technically, it's not so hard. After all, all you need to do is to create two windows, one on each screen ( in case of a dual screen setup ), to create two cameras, and to render the scene twice.
Of course, you get a 2 times slow-down ( or 3 times in case of a triple config ).
Fortunately, I took a different approach. I'm still creating my 2 windows, but I now use the engine's pipeline to create one virtual off-screen buffer. The scene only has to be rendered once. Much better! Then in the final stage, the buffer is shared and split between the windows.
It's also a lot faster in case your second monitor doesn't have hardware acceleration, because technically, the rendering only happens off-screen on the first monitor's device.
To implement all of this I had to tweak many small bits everywhere in the engine, and add new concepts. A few subtle bugs when sharing textures between different GL contexts with the texture cache. A monitor lister. Management of virtual windows. Etc..
The result is pretty cool, and if properly set up, the images are perfectly seamless. For example, consider this one, taken on a dual monitor config, each screen being full-screen 1280x1024 (click for full-screen):

That pic was simply taken with the "Print Screen" key in Windows.
Now, in windowed mode, you can see better how the buffer is split in 2 windows:

Note that nothing forces the windows to get perfectly aligned or to "touch", and they can even be of different resolutions ( meaning that it'll work perfectly even if your monitors have different resolutions ).
| |
|
| S | M | T | W | T | F | S | | | | | | | | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | |
OPTIONS
Track this Journal
ARCHIVES
October, 2009
August, 2009
July, 2009
May, 2009
April, 2009
March, 2009
February, 2009
January, 2009
November, 2008
October, 2008
July, 2008
June, 2008
May, 2008
April, 2008
March, 2008
January, 2008
December, 2007
November, 2007
October, 2007
September, 2007
August, 2007
July, 2007
June, 2007
May, 2007
April, 2007
March, 2007
February, 2007
January, 2007
December, 2006
November, 2006
October, 2006
September, 2006
August, 2006
July, 2006
June, 2006
May, 2006
April, 2006
March, 2006
February, 2006
January, 2006
December, 2005
November, 2005
October, 2005
September, 2005
August, 2005
July, 2005
June, 2005
May, 2005
April, 2005
March, 2005
February, 2005
January, 2005
December, 2004
October, 2004
September, 2004
August, 2004
|