Jittered, rotated and skewed grid AA

Xmas said:
Theoretically it would be possible to change the pattern per primitive, but there is not much sense behind that. The pattern for a given pixel should stay the same to prevent rendering errors.

Well, what I propose is a per-pixel pattern modification, practically, in my algorithm described there:
http://www.beyond3d.com/forum/viewtopic.php?t=5509

Please don't read the first post, just skip to the summary below, please :) The first post is wayyy too messy IMO.


Uttar
 
Thanks to KILER for bringing this topic up, one that I also wasn't very clear on, and thanks to Dave and Basic for clearing it up. :)

The More You Know...(TM)
 
Huh. Just realised that NVIDIA's 2X is actually sparce grid as well. NVIDIA just has the issue that its accuracty only gos up to 2x2 sample position, so beyond 2X there's not really much room!
 
DaveBaumann said:
Huh. Just realised that NVIDIA's 2X is actually sparce grid as well. NVIDIA just has the issue that its accuracty only gos up to 2x2 sample position, so beyond 2X there's not really much room!
Hmm covering 2 samples out of 4... that's not sparse, that's semi-sparse ;)
 
OpenGL guy said:
DaveBaumann said:
Huh. Just realised that NVIDIA's 2X is actually sparce grid as well. NVIDIA just has the issue that its accuracty only gos up to 2x2 sample position, so beyond 2X there's not really much room!
Hmm covering 2 samples out of 4... that's not sparse, that's semi-sparse ;)

OpenGL Guy, why don't you call yourself Direct3D Guy? :LOL: ;) :D

Also semi-sparse in theory can't be THAT bad. Except with nVIDIA chips their 2xAA nearly looks like no AA. When running it rather than viewing a screen dump you notice most jaggies are gone but DAMN! They could do a better job as my R300's 2xAA looks so much better in motion.
 
Xmas said:
No, 3dfx's pattern is a fixed "rotated grid" (2x and 4x edit: standard settings of the driver, it can be changed globally) which is actually a special case of a sparse grid like Basic explained. It does not change.

Theoretically it would be possible to change the pattern per primitive, but there is not much sense behind that. The pattern for a given pixel should stay the same to prevent rendering errors.
last time this came up, i got all jumped over for saying that 3dfx's AA was just RG. Everyone said "no its JITTERED!!"
Now what gives?
 
Althornin said:
Xmas said:
No, 3dfx's pattern is a fixed "rotated grid" (2x and 4x edit: standard settings of the driver, it can be changed globally) which is actually a special case of a sparse grid like Basic explained. It does not change.

Theoretically it would be possible to change the pattern per primitive, but there is not much sense behind that. The pattern for a given pixel should stay the same to prevent rendering errors.
last time this came up, i got all jumped over for saying that 3dfx's AA was just RG. Everyone said "no its JITTERED!!"
Now what gives?

That is what I was trying to clear up in this thread. Peoples misconceptions. :)

I know the guys here at B3D know. I don't take advice from anyone else.
 
Althornin said:
last time this came up, i got all jumped over for saying that 3dfx's AA was just RG. Everyone said "no its JITTERED!!"
Now what gives?

Let's say it like that:
The hardware is able to use a configurable pattern of N subsamples on a 8x8 grid. This pattern can be changed as Colourless' tool proves. Theoretically it can be changed per primitive, but this was never exposed by the driver.

The preset for 4x is the optimal 4-sample sparse grid. It is commonly referred to as "rotated grid", because it is similar to, but not equal to a 4-sample ordered grid rotated through its midpoint.

The preset for 2x is the optimal 2-sample sparse grid. It is commonly referred to as "rotated grid", because it is similar to, but not equal to a 2-sample ordered grid rotated through its midpoint.

The preset for 8x is not optimal.

Now for the jittered part:
Every triangle goes through triangle setup N times. For each sample you add the sample's x and y offset from the pixel center to the triangle's position. This could be called "triangle jittering". Perceptionally, instead of taking samples at different positions, you move the triangle around and always sample the pixel center. But mathematically this is of course equal.

However, it is not jitterered in the sense that sampling patterns vary, neither per pixel (spatial) nor per frame (temporal).
 
Xmas said:
The preset for 4x is the optimal 4-sample sparse grid. It is commonly referred to as "rotated grid", because it is similar to, but not equal to a 4-sample ordered grid rotated through its midpoint.

The preset for 2x is the optimal 2-sample sparse grid. It is commonly referred to as "rotated grid", because it is similar to, but not equal to a 2-sample ordered grid rotated through its midpoint.

OK, my curiosity is finally piqued. Can someone explain or provide some good links to papers that describe how n samples can be fixed optimally. I think the 4x case on why a "rotated" set is better than an "ordered" set would be a good start. Some rules I'm just guessing at.
- You probably wouldn't want any 2 samples to have the same x or y values.
- You want your samples evenly spaced? Say, in different quadrents.
- Center-edge rules? Like taking your samples half way between the center and edge of the grid.

For 2x I notice Nvidia's solution is just a reflection of ATI's does that make a difference? I wouldn't think so but then I see ATI's 6x which stangely doesn't have much symmetry. Any info on the definition of the grids ATI and Nvidia use?
 
Deflection. Search B3D for the paper "Super Sampling Anti-Aliasing Analyzed" or something like that.

The object of non-ordered samples is to get better AA quality along the horizontal and vertical axis.
 
3dcgi said:
Deflection. Search B3D for the paper "Super Sampling Anti-Aliasing Analyzed" or something like that.

The object of non-ordered samples is to get better AA quality along the horizontal and vertical axis.

Good article so far but... is it just me or are pages 7+ gone.
 
Tagrineth said:
demalion said:
I thought the Jittered basically meant varying sampling patterns, sort of like a mini noise filter to aid in breaking up aliasing to the human eye.

Bingo. That's exactly what 3dfx's method does, to prevent the eye from 'tiring' of the same 'boring' pattern. (the human eye becomes bored with regular patterns very quickly)

That's probably unlikely as it would make the HW a bit more expensive. It's much more likely to be functionally equivalent to AA as done by an accumulation buffer, i.e. the weighted sum of N images regularly sampled with each image offset by a different amount.
 
Okay, so quick question here...
Some people reviews reported blurring with nVidia's 4x AA on the NV35.
Could it be they're trying to do some type of jittering, but that it's bugged?
Heck, otherwise, it would have to look for edge quality better, no?

Uttar
 
Simon F said:
That's probably unlikely as it would make the HW a bit more expensive. It's much more likely to be functionally equivalent to AA as done by an accumulation buffer, i.e. the weighted sum of N images regularly sampled with each image offset by a different amount.

I remember 3dfx specifically saying the pattern wasn't regular.

Maybe the offsets aren't a perfect "rotated" grid, but a tiny bit off?
 
Tagrineth said:
I remember 3dfx specifically saying the pattern wasn't regular.

Maybe the offsets aren't a perfect "rotated" grid, but a tiny bit off?

IIRC, the VSA-1 sample points were programmable. You can set the sample points with registry settings, or some helper app. I think colourless did this with the Voodoo 6000, to get an 8x spase grid for example.

However, these sample points applied globally to every pixel. This is a better approach than a simple ordered grid, but it does not "prevent the eye from 'tiring' of the same 'boring' pattern." For that, samples would have to be applied differently per pixel, which VSA-100 did not do...at least, for AA. You could do that for other T-Buffer effects IIRC.
 
Uttar said:
Okay, so quick question here...
Some people reviews reported blurring with nVidia's 4x AA on the NV35.
Could it be they're trying to do some type of jittering, but that it's bugged?
Heck, otherwise, it would have to look for edge quality better, no?

Uttar

if nvidia was trying to do some jittering, it looks like they couldnt find the edges :LOL:

do you honestly think that its bugged? especially in regards to nvidia touting it as "in motion IQ"...what easier way to get rid of jaggies when "in motion" then to blur the image and make it look like its already "in motion" ;)
 
Joe DeFuria said:
However, these sample points applied globally to every pixel. This is a better approach than a simple ordered grid, but it does not "prevent the eye from 'tiring' of the same 'boring' pattern." For that, samples would have to be applied differently per pixel, which VSA-100 did not do...at least, for AA. You could do that for other T-Buffer effects IIRC.

I know you didn't originally write the "prevent the eye from 'tiring' of the same 'boring' pattern." but it is amusing.

To put this in a more technical framework, the fourier transform of a repeated grid (be it regular, sparse, rotated etc) will be another repeated grid with a large peak on the DC signal. This means that high frequencies in the source image will still appear as low-frequency aliasing. The eye is then quite good at noticing this low frequency error.
Some grid patterns, however, will produce slightly 'less offensive' fourier transforms.

With a true jittered sampling, the fourier transform consists of the DC point, a gap in the lower frequencies, and then a low background level in the higher frequencies, which means that high frequencies in the original image, when sampled, will appear as high frequency noise that the eye/brain doesn't mind nearly as much.
 
Back
Top