3Dc - higher quality textures with better compression
What is a vector? What is a normal?
For those not familiar with physics or higher level math, a vector is a value that has magnitude and direction. A scalar value just has magnitude but no direction. An example of a scalar is 50 km/h. 50 km/h does not say anything about direction but is just a scalar magnitude. 50 km/h NW is a vector value because we have both a magnitude component and a directional component. Vectors are an important part of physics and a specific vector called a normal is integral to 3D graphics.
A normal is a vector that is perpendicular to the surface of a planar polygon. Below is a visual representation of a normal. The vector is 90 degrees to the surface of the polygon. The relevance of a vector will be seen in the upcoming discussion of the key feature in ATi's 3Dc technology.
A normal. And this is why I'm not a graphic artist.
Normal Maps
A normal map for an old man's head
A normal map is a colored representation of normals representing a surface. Normal maps are all the rage these days as it is used in bump mapping and lighting calculations. A normal is a vector defined by X, Y and Z components and normal maps are stored as a color map; the RGB channels conveniently map to X,Y,Z. But there is wasted space- images also have a 4th channel, called the alpha channel that defines translucency which is unused in a normal map.
S3 and 3dfx introduced texture compression technology that is still in use today in the form of DXTC. The respective formats work very well for images but not so well for normal maps because they are not traditional textures. Textures have mathematical patterns that are different than normal maps and this is where DXTC falls short-
With DXTC...
a) compression artifacts are more readily visible in normal maps
b) compression artifacts in normal maps are undesirable because lighting anomalies are very obvious
c) DXTC accounts for an alpha channel which normal maps do not have, wasting space
Notice the blocky artifacts when using DXTC compression on a normal map
This is where 3Dc comes in. 3Dc is a compression technology aimed at two channel data. Wait a minute. Didn't we just say a normal is a vector of 3 dimensions, hence 3 channels? Due to the amazing properties of math and normalization, the Z channel can be calculated through z = (1 - x^2 - y^2)^1/2 so essentially we only need to store x and y. Without going into any further technical detail, ATi claims a compression ratio of 4:1, a significant savings compared to uncompressed normal maps. This comes without the expense of major compression errors that is problematic with DXTC. ATi also has a DXTC compatible version in the works for the R3xx series and cards from other companies. The quality and compression will not be as good but the errors will not be as stark as the DXTC compressed maps.
 |  |
3Dc is easy to implement according to ATi. Support for 3Dc in Serious Sam 2 was implemented in a matter of days and according to ATi, was a surprise showing at Technology Days. Another demonstration that was shown that used 3Dc was a scene from Half-Life 2 where they switched between the non-compressed normal maps that have to be used on older cards and 3Dc. The difference in image quality was huge as there was a marked difference between the lower detailed normal maps and the high detail ones courtesy of 3Dc.
Half Life 2. Yes it does exist. Notice the drastic difference in detail on the water surface courtesy of 3Dc