easy to interpolate data at corners (blend color using barycentric coordinates)
Two Questions:
Coverage: what pixel on screen does a triangle cover
Occlusion: if we have multiple triangles cover the same pixel, which one is closest to the camera
Visibility Problem: Virtual Sensor needs to figure out the colors of pixels to draw. Notice the Virtual Sensor is mirrored with x-axis for convenience.
Different situation a pixel can be covered by triangles. Getting analytical answer is too difficult.
Sampling
Sampling the Original Signal
Sampling Coverage
Sample Coverage Function: for all triangle, we sample its coverage function
Coverage Sampling Result
Breaking Ties
Ties can appear through sampling
Tie Breaking Implementation: OpenGL, Direct3D implementation
Reconstruction
Constant Reconstruction of Original Signal
Piecewise Linear Reconstruction of Original Signal
Reconstruction in 2D
Sampling and Reconstruction
Aliasing: When the frequency is higher than sampling rate, then reconstructed frequency can only be as high as sampling rate. (High frequencies in the original signal masquerade as low frequencies after reconstruction due to undersampling)
Aliasing Visualization
Image Reconstruction Example
Left: Original Signal; Right: Frequency Spectrum
Left: Reconstructed Signal; Right: Keep only low frequency
Left: Reconstructed Signal; Right: Keep only mid frequency
Left: Reconstructed Signal; Right: Keep only high frequency
Graph of z = \sin(x^2 + y^2). The ring has higher frequency as the radius increase
Graph of z = \sin(x^2 + y^2) when viewed from above, colored z value as brightness. Notice as the frequency increse, sampled frequency does not always increase due to constant sampling rate.
Sinc Filter
Nyquist-Shannon Theorem: A band-limited signal (ie. no frequencies above threshold w_0) can be perfectly reconstructed if sampled with period T = \frac{1}{2} w_0 and reconstruct (interpolation) using \text{sinc} = \frac{1}{\pi x}\sin(\pi x) filter.
\text{sinc} = \frac{1}{\pi x}\sin(\pi x)
There are two problems with \text{sinc} filter
Encode a hard edge (piecewise discontinuity in the triangle edge) needs infinite series of frequencies.
If for each pixel we use a \text{sinc}, then every pixel can affect every other pixel, therefore computational power is to expensive.
Two issues why we can't use \text{sinc}
Resulting "Jaggies" in static image; "Roping" or "shimmering" in animated images; Moire patterns in high-frequency area of images;
Supersampling
Supersampling: taking multiple random samples for each pixel
Turning supersampling into pixel
But error persists in supersampling
Analytic solution do exists in rendering checkerboard, but most things are not analytically solvable
Implementation Details
Coverage: check a point inside triangle by checking its relation to the boundary
Incremental Traversal
Incremental Traversal: Check pixel near each other
Parallel Traversal:
bound a triangle by a box
check every pixel in the box in parallel
Sticky Situration: parallel traversal will waste a lot of power
Coarse to Fine:
divide big box region into smaller boxes
check if the box overlaps with triangle
if overlap some, we subdivide more
if no overlap, all pixels in boxes are turned off
if all overlap, all pixels in boxes are turned on
Recursive Coarse to Fine, but actual trade off depends on hardware (usually 1 coarse to fine level is good)
Note: Coarse to Fine can also be improved with Incremental Traversal since boxes near each other share similar pixel.