CS 684, Homework #3
Antialiasing
Ryan Graham
This assignment demonstrates 4 different sampling strategies to deal with
aliasing in 2 different images. The 4 strategies are:
-
Regular
-
Jittered
-
Multijittered
-
Adaptive
The Adaptive
method (for a single pixal):
Sample the 4 corners of the pixal
if (any 2 values are different) then
subdivide pixal into 4 regions, run Adaptive method on each region.
else
color = sum(4 samples) / 4
The first image is the function:
L(x, y) = (0.5 + 0.5*fade*sin(2.0*Pi*a*exp(5*a)))
where: a = x / (double)nx
fade = (1.0 - y / (double)ny)^3
Here are the results:
|
1 sample/pixal
|
4 samples/pixal
|
16 samples/pixal
|
100 samples/pixal
|
| Regular |
 |
 |
 |
 |
| Jittered |
 |
 |
 |
 |
| Multijittered |
 |
 |
 |
 |
I think the thing to notice here is that regular and multijittered
converged to the correct image faster, e.g., at 16 samples/pixal the regular
and multijittered images look correct, where as the jittered image still
has some noise.
|
*maxdepth = 10, **epsilon = 0.3
|
*maxdepth = 20, **epsilon = 0.03
|
*maxdepth = 10, **epsilon = 0.0
|
*maxdepth = 20, **epsilon = 0.0
|
| Adaptive |
 |
 |
 |
 |
*maxdepth = the maximun number of subdivisions allowed on a pixal.
**epsilon = the tolerance allowed between intensities to consider them
equal.
( Ideally epsilon should be 0.0, but I was just
curious to see what would happen if it wern't. The results aren't pleasing.)
The next image is an infinite black and white checkerboard. The viewing
parameters are:
lookfrom (0, 0, 1)
lookat
(1, 1, 0)
vfov
90 degres
vup
(0, 0, 1)
(I placed the sphere in the scene just because I decided that if
I was going to trace in 3D, I ought to have a 3D object)
|
1 sample/pixal
|
4 samples/pixal
|
16 samples/pixal
|
100 samples/pixal
|
| Regular |
 |
 |
 |
 |
| Jittered |
 |
 |
 |
 |
| Multijittered |
 |
 |
 |
 |
For this particular image, it looks like multijittered is the
best. Although no image looks good until around 100 samples/pixal, the
multijittered images seem to converge faster.
|
maxdepth = 0, epsilon = 0.0
|
maxdepth = 1, epsilon = 0.0
|
maxdepth = 10, epsilon = 0.0
|
maxdepth = 20, epsilon = 0.0
|
| Adaptive |
 |
 |
 |
 |
So with no recusion depth we see that sampling just on the corners of
the pixals misses some information. However, by just allowing one subdivision
in each pixal we get pretty good results in the front, but still bad aliasing
in the back. We can also note that allowing more than one subdivision doesn't
seem to give us any more information and thus (for this image) was a waste
of time.
Comments: Ryan Graham