Full Scene Anti Aliasing, Continued
The reason why FSAA has hardly ever been discussed in 3D gaming before is because it requires a huge amount of fill rate to realize it. The idea is pretty simple. For each frame that is displayed you can render a few frames of the scene into the 3D cards onboard video memory aka frame buffer and blend them by shifting those frames against each other at sub-pixel level. This is basically what the upcoming VSA100 from 3dfx is doing in its T-buffer. The other, more classical approach is to render the frame at a higher resolution and then sampling it down to the screen resolution by using at least bilinear filtering. I can show you some examples of that technique, which is also used by GeForce and GeForce2 GTS:
Here is the basic image:
You can clearly spot the annoying stair step effect.
Now here come the anti-aliased images:
150x15 to 100x10
This image looks a lot better already. It was produced by rendering the original image to 225% of its resolution and then sampling it down to the original resolution using bilinear filtering.
200x20 to 100x10
This AA example used 400% of the original resolution.
300x30 to 100x10
400x40 to 100x10
Finally this example was achieved by supersampling up to 1600% of the original resolution.
You can see that even 225% supersampling is already producing reasonable results, each new step up gains less quality over the step before. Please be aware that 225% resolution increase means an increase of x1.5 in X and Y direction, so even 1600% is not that much, the width and height of the image have been increased to four times their previous sizes.
Currently the GeForce and GeForce2 drivers are using supersampling to 400% under OpenGL and a choice from 400 to 1600% under Direct3D. Which ever you choose, get prepared for a major performance drop. This is not surprising but very understandable. When you use FSAA in Quake3 at a screen resolution of e.g. 800x600 a frame will be rendered to no less than 1600x1200, then it will get sampled back down to 800x600. Obviously the fill rate required for this job is the same that is required if you would play at 1600x1200 in the first place, which is why you get very similar frame rates to what you would get playing at this high resolutions. The same story is actually valid for 3dfx's VSA100 as well, but this one gives you the chance of using 2 frames or 4 frames for your FSAA. The 2-frames version is not as good looking as the 400% supersampling of GeForce, but it comes with less of a performance impact. The four frames version of VSA100 is adequate to the 400% supersampling of NVIDIA and it comes with the same impact on the fill rate.
You will have to try it out to see if FSAA is worth its performance impact for you. It always brings a quality improve that is quite noticeable, but as long as 3D chips don't have the fill rate and memory to support FSAA at 1280x1024x32 I will stay away from it. You will find benchmark results to that topic further down in the article.
What's Not New?
GeForce2 GTS is of course equipped with all those cool features that GeForce has already offered us for the last six months:
Cube Environment Mapping
Reflection of the surrounding environment on a 3D object may sound rather unimportant, but if you look around your room you might realize that many objects actually do reflect. A bottle of water, a mobile phone, a CD-cover, a picture frame, the front of your stereo, .... are only few examples of reflecting objects that could be found in any 3D scene just as much. To make the 3D-world more realistic those object should show reflections as well and for this purpose cube environment mapping was introduced into GeForce last year.
Cube environment mapping is a technique developed by SGI a while ago and NVIDIA was the first to bring it to home desktops. The idea is pretty simple. From an object with a reflective surface (and not from the room center, as I read somewhere else) you render six environment maps in each room direction (front, back, up, down, left, right) and use those to display the reflections on this object.
It can either be used to reflect in detail or blurred, but it can also be used for more accurate (per-pixel) specular lighting. The viewer/camera can move around the reflecting object without you noticing distortions or other artifacts in the reflection, something that's not possible with sphere environment mapping. Cube environment mapping is fully implemented into DirectX 7 and will certainly be found in 3D-games very soon.