Articles: Video

 

Bookmark and Share

(30) 
Pages: [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 ]

3Dc: New Normal Maps Compression Algorithm

When RADEON X800 appeared, ATI Company introduced a new data compression algorithm for normal maps. This algorithm is known as 3Dc.

Normal maps are a new step in the bump mapping techniques, and today they get more and more popular. The idea behind the use of normal maps implies that the information about the object surface is stored as a texture, where each texture element saves three components of a vector perpendicular to the object surface in a given point, i.e. of the normal vector.

The use of normal maps allows obtaining a much more detailed and realistic image, without increasing the number of polygons used to build it. As a result, normal maps can be created from the difference between the high-polygon model and simple model of the object. Later on you can use only the simple model, but the normal map you apply to it will make it look almost as good as the reference image.

Usually, normal maps describing the object surface are applied together with the base textures storing the color info about the object. The higher is the level of details for the textures and normal maps, the more realistic the image will look. However, the use of textures and high resolution normal maps increases the memory bus workload that is why some alternative solutions are necessary to retain high level of performance. DirectX9 offers a set of DXTC algorithms providing efficient texture compression, and despite the info losses during compression manage to retain the acceptable texture quality. However, the compression of normal maps cannot be done with DXTC algorithms, because the sharp changes of the normal vector get lost as a result of compression and we get block artifacts instead.

The 3Dc algorithms supported by RADEON X800 on the hardware level is intended for normal maps compression and caused not such a great worsening of the image quality.

Let’s consider the 3Dc algorithm in a bit more detail now.

Firstly, the initial normal maps store three components of the normal vector in each element, while 3Dc stores only two components. When we turn the normal vector into a vector of a unit length, one of the components becomes no longer necessary: later on we will be able to restore this third components knowing the unit length of the vector and the coordinates of two remaining normals.

During the compression of two-component normal maps, 3Dc splits the whole thing into 4x4 elements blocks where each element consists of two normal vector components. The components building up 16 elements of the block are compressed separately: when we find the minimal and the maximal values among the first 16 components of the block elements, 3Dc saves them as they are. Then the linear scale of 8 values is built between the found minimum and maximum. Each of the 16 first components of the block elements is assigned the closest value from this linear scale and a three-bit index, the number of the closest value from the linear scale.

The second components of the normal map are compressed in a similar way. As a result, the 4x4 unit, which initially consisted of 16 elements each including 2 8-bit components of the normal vector, i.e. 256bit block, turns into a record of two 8-bit minimal values, 2 8-bit maximal values and 32 3-bit indexes, which makes the total of 128bit.

This way, when we compress dual-component normal maps, 3Dc ensures data compression with 2:1 ratio. The overall compression including the shift from the regular vector description to the dual-component description is done with the ratio of 4:1.

When we use normal maps compressed with 3Dc algorithm, RADEON X800 stores them in the graphics memory and transfers to the VPU compressed, decompressing them “on the fly”. The restoring of the third normal vector component in the pixel shader doesn’t take too much of the resources: just a few additional instructions should be added to the shader in this case.

So, the use of new compression method for normal maps allows reducing the memory bus workload immensely, when highly detailed maps are used, or, on the contrary, increasing the level of detail on normal maps while the amount of data to be processed and transferred remain the same.

 
Pages: [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 ]

Discussion

Comments currently: 30
Discussion started: 05/04/04 12:35:49 PM
Latest comment: 08/28/06 08:53:47 AM

View comments

You must log in to add comments.

Forgot password? Registration

remember me