Frequently Asked Forum Questions | ||||
Search Older Posts on This Forum: Posts on Current Forum | Archived Posts | ||||
So, let's suppose you're going to render a game at some amazingly high resolution like 10x3. Each pixel is used to represent some area of coverage in your image.
Now, let's suppose that our scene is a sloped transition between a black object and a white object.
In computer graphics, short of any special filtering, the typical approach is to calculate the colour at the center point of a pixel (the red dots in the above images) and use that as the pixel's colour. In this case, the result is this:
This isn't really very accurate. For instance, that pixel in the top left is representing itself as entirely white, even though its immediately area contains a lot of black.
To get a better sense for color coverage for a pixel, the simplest approach is to take more spatial samples. So, instead of just sampling the colour at the red dot, let's consider sampling the colour at all of the purple dots:
If we determine the value at all of the purple dots within a pixel and average them together, we get this result:
It's hard to see that this is obviously better when looking at the pixel grid all blown-up, but let's look at slopes sampled like this at native res. Left is sampled just at pixel center, right is sampled at four points.
The image on the right looks more like an actual slope instead of a staircase, and will appear much more stable in motion.
//====================
: Obviously the textures are the same
Well, sort of. The textures are the same, but supersampling improves the quality of the filtering, particularly for surfaces viewed at oblique angles. Though anisotropic filtering in modern graphics hardware does a pretty good job of dealing with this as-is.
//====================
Here's something of a caveat:
Small stairstep patterns in video games are almost always geometric aliases. This means that it's possible to write a post-process algorithm that does a pretty good job of dealing with them without need for supersampling. The algorithm looks for stairstepping boundaries between two regions and replaces the stairsteps with a "perfect coverage" edge. One such algorithm that has received lots of recent popularity is SMAA 1x.
HOWEVER.
"Look for the stairstepping and turn it into non-stairstepping" only works if an object is being adequately detected in the first place. If you have a thin object in the far distance, a pixel center might land on it in one frame and then miss it in the next frame; in motion, parts of the object will shimmer in and out of existence, and even excellent algorithms like SMAA 1x will be hopeless to do anything about it. This is why the developers of SMAA designed it specifically to work nicely alongside increased sampling.
ALSO:
Plain old spatial supersampling is the simplest technique to boost sampling, and it works on every kind of spatial aliasing imaginable. It's also not too difficult to implement with a reasonable degree of correctness. But it works by increasing the load on every per-pixel part of the graphics pipeline, and is generally extremely inefficient. It's something that most people only consider when they have a game running with decent settings and are still not stressing their GPUs much at all.
Interestingly, temporal supersampling seems to be becoming extremely popular. The idea is that you use colour information from the previous frame(s) as extra samples, instead of rendering each frame at a high resolution. Reach's TAA is a very crude implementation of this which only works on moving scenes; it turns off for moving imagery (except when it fails to detect motion, which is when you get Reach's famous ghosting). Some eighth-gen games like InFAMOUS Second Son actually use their motion buffers to reproject the previous frame onto the new one, and this is done alongside more precise motion buffers; these new implementations do a phenomenal job of minimizing ghosting, while enjoying supersampling in motion. The result isn't quite as good as having tons of spatial supersampling, but it's also much cheaper.
Killzone Shadowfall's multiplayer does something very interesting with temporal sampling. It's "1080p", but it only renders half that many pixels on each new frame. It reprojects tons of information from previous frames to produce a "1080p" frame.
The result looks pretty good considering that the number of new spatial samples each frame is barely higher than 720p.
Halo CE at 8K Resolution | Trunks | 5/9/14 4:50 pm |
8K!? | uberfoop | 5/9/14 6:34 pm |
Isn't this basically just 16x FSAA? | RC Master | 5/10/14 10:12 am |
Re: Isn't this basically just 16x FSAA? | uberfoop | 5/10/14 2:11 pm |
Re: Isn't this basically just 16x FSAA? | Cody Miller | 5/10/14 7:27 pm |
Well... | ZackDark | 5/10/14 11:47 pm |
Why the hell wouldn't you? :-) | scarab | 5/11/14 4:21 am |
Re: Well... | RC Master | 5/11/14 10:09 am |
Heh | ZackDark | 5/11/14 10:46 am |
Speaking of which | ZackDark | 5/11/14 10:47 am |
Simple answer... | RC Master | 5/11/14 1:05 pm |
Re: Simple answer... | RC Master | 5/11/14 1:13 pm |
Wait | ZackDark | 5/11/14 2:21 pm |
Re: Wait | uberfoop | 5/11/14 2:26 pm |
Sounds delicious *NM* | ZackDark | 5/11/14 3:30 pm |
Why is this better? | Urban Reflex | 5/10/14 4:59 pm |
Re: Why is this better? | davidfuchs | 5/10/14 5:50 pm |
Re: Why is this better? | Urban Reflex | 5/10/14 6:09 pm |
Sampling and stuff, state of 3D graphics, *IMGs* | uberfoop | 5/10/14 6:52 pm |
Very informative. Thank you for that *NM* | ZackDark | 5/11/14 12:06 am |
Thank you Super Fooper, good stuff *NM* | CARDO 8 ATL | 5/12/14 4:21 pm |