As a first step, gradient vectors are normalized, transformed to polar
coordinates and quantized to 2x6bits. The same representation is
used by the rendering algorithm for interactive shading.
By exploiting spatial coherence within the encoded stream of voxels
the gradient information is reduced to 3-8bit per voxel,
depending on the smoothness of the boundary.
Both polar coordinates are encoded into separate streams, storing
differences between coordinates of successive voxels.
As most of the difference data consists of sequences of values in the
range of
which are occasionally interrupted by larger
values or clusters thereof, the encoder switches between two
different coding schemes. The first scheme is used to encode
sequences of differences in the
range of
using 1bit for 0 (most common), 2 and 3bits for -1
and 1, and a 3bit code to switch to the other encoding
scheme. Larger differences are encoded using Huffman coding with an
extra symbol to switch to the encoding scheme for small
values. A switch to the code for small values is only performed to
encode sufficiently long sequences of small values (keeps cost of
switching low).
The use of prediction techniques for estimating gradients and the encoding of the prediction error instead of encoding gradient differences seems to promise good results at first glance. Nevertheless, tests performed using linear regression [45] with a diameter of influence of 3 and 5 for gradient estimation, indicate that compression rates obtained using this technique are worse than with the above approach. One explanation of this observation might be that the given difference data actually exhibits very little spatial coherence in the data stream.