Below is another example of how dynamic gamma
correction allows what the developer had visualized to be accurately
rendered on screen without the need to constantly change gamma
space. The image on the left is rendered using normal gamma
properties while the image on the right is rendered post gamma
correction.
Colour Precision Anomalies :
There's also more to colour precision than just
banding or clamping. Bump maps in particular can exhibit some
very strange effects when they don't have enough precision to
work with. If we look at the basic 3D building block, the polygon,
we see it has three "normals", one at each vertex.
These "normals" are essentially information about
how light is being reflected from the polygon's surface, thus
if all the "normals" point straight up at 90degrees
to the polygon the GPU knows that it's looking at a completely
flat surface whereas if the "normals" are angled like
below the GPU knows that this flat polygon is actually forming
part of a curved surface and can render the applied texture
accordingly.
Normals
Just as additional normals need to be calculated
when a polygon is tessellated (divided into smaller sub-polygons)
so it is that additional normals need to be created when a surface
is bump mapped to calculate the additional lighting that's required
to reflect the new apparent shape of the surface.
Additional Normals Calculated During Tessellation
The problem arises when calculations are involved
using data values that are very close to each other. What can
happen is that rather than returning a small floating point
number a zero can be returned and this essentially cancels out
any realistic or accurate rendering data for this particular
normal. This form of catastrophic cancellation can set up an
array of interference patterns as normals vary between constructive
and destructive operation, or as NVIDIA word it they look like
"a topographic map operator has been applied rather
than smooth variation in height."
Low Precision Bump Mapping (Left) High Precision Bump
Mapping (Right)
In certain scenes such as those featuring rippling
water for example the effect becomes one of "checkering".
The only way to avoid this effect when using low precision is
for programmers to use wave effects that stay within a limited
physical parameters that in turn restrict the wavelengths, the
sizes, and the speed of animated waves. This means extra work
for the programmer and of course means certain water effects
can't be used for fear of creating such errors. Increasing precision
means programmers are free to create what they want without
having to steer clear of parameters they know will lead to visual
problems.
Per-Pixel Specular Components :
So what's so wrong with good old fashioned per-vertex
Gouraud lighting? Absolutely nothing in most cases provided
there's enough polygons on your model supplying plenty of normals
for lighting calculations. The difficulty comes with large polygons
which, because each has only three vertices and thus three normals,
don't provide enough lighting detail to be rendered accurately
and to look good. As a result we've seen a sustained push towards
per-pixel lighting effects such as the specular highlights demonstrated
in the images below. Because per-pixel effects require much
higher precision even something as relatively mundane as a specular
highlight can soon exceed the limitations of 8 bits and possibly
even the smaller FP formats (s1m10e5, where 1 bit is designated
for the sign, 10 bits for mantissa, and 5 bits for the exponent).
Specular banding.
Notice the poor quality of the specular highlight on the hood,
including the white-spot artifact. This is a direct result of
a lack of
precision for the required calculations
GeForce FX, with increased precision
Eliminates both specular highlight artifacts and banding.