|
Global Compression
The streaming toolkit performs
LZ compression of the entire file using a public domain
component called 'zlib'; this is a lossless compression
technique that permits pieces of the compressed file to
be streamed and decompressed, and is computationally efficient
on both the compression and decompression sides.
Geometry Compression
Geometry compression is currently
focused on the 'shell' primitive. This is the primary primitive
used to represent tessellated information. Datasets typically
consist primarily of shells if the data sets originated
in MCAD/CAM/CAE applications.
Vertex Compression
- This involves encoding the locations of shell vertices,
providing reduction in file size in exchange for loss
of coordinate precision and slightly lower visual quality.
The degradation in visual quality is highly dependent
on the topology of the shell, as well as how the normals
information is being exported.
Normals Compression
- Normals compression involves encoding vertex normals,
providing reduction in file size in exchange for lower
visual quality. Again, the degradation in visual quality
is highly dependent on the topology of the shell, as well
as how the normals information is being exported. HOOPS/Stream
transmits compressed normals for vertices that have been
compressed, or if a normal has been explicitly set on
a vertex. Surfaces that had gradual curvature over a highly
tessellated region can look faceted due to the aliasing
of the compressed normals. 10 bit normals are compressed
using a look-up table of 1024 pre-defined values.
Connectivity Compression
- This compresses 'shell' connectivity information. This
compression technique can provide compelling reductions
in files sizes for datasets that contain many 'shell'
primitives. It takes approximately twice as long to read,
and ten times as long to write, but the savings can be
significant. It is not recommended for topologically complex
data sets (such as FEA models with interior faces or watertight
closed surfaces with topological genus greater than 5).
In addition to reducing the cost of connectivity to near
zero, vertices and normals are more cheaply encoded as
well, by making them relative to predicitions based on
connectivity and previously seen values.
Instancing -
HSF supports making copies of previously-seen geometry,
with an optional 4x3 transformation matrix (i.e. a 4x4
matrix without the perspective component) applied. The
HOOPS/stream searches for repeated instances using a fast
hash table to find candidates, then a full comparison
of all aspects of the geometry's vertices and attributes.
The following chart displays
the size of various files saved using .hsf compression settings.
("view_model" links to an ATL control only supported
on Internet Explorer)
| |
Formula1
Dataset |
Train
Chassis Dataset |
Piping
Dataset (instancing) |
| w/
LZ
Compression |
w/o
LZ
Compression
TK_Disable
Global
Compression |
w/
LZ
Compression |
w/o
LZ
Compression
TK_Disable
Global
Compression |
w/
LZ
Compression |
w/o LZ
Compression
TK_Disable
Global
Compression |
|
Full
Resolution
.hmf |
4,571
KB
|
23,497
KB
view model
 |
6,405
KB
|
|
344
KB
|
|
|
24
bits/Vertex
Full Res. Normals
No Advanced
Compression |
2,858
KB
view
model
 |
|
|
|
|
|
|
24
bits/Vertex
24 bits/Normals
No Advanced
Compression |
2,161
KB
view
model
 |
|
|
|
|
|
|
24
bits/Vertex
10 bits/Normals
No Advanced
Compression |
2,004
KB
view
model
 |
|
|
|
|
|
|
24
bits/Vertex
24 bits/Normals
Advanced
Connectivity
Compression |
|
|
|
|
|
|
Analysis
The data sets "formula1" and
"train_chassis" each have significant amounts of non-surface
data that is unaffected by any sort of advanced compression
scheme (308k for formula1 and 237k for train_chassis). So
considering only surfaces, and at identical 24-bit resolutions,
advanced compression algorithm compresses formula1 from
1304 down to 1130 and train_chassis from 1868 to 1175 (i.e.
an additional 15% and 58%, respectively). The reason for
the difference is that formula1 is broken into many small
pieces that do not perform especially well under our algorithm.
These two data sets pretty much capture the range of real-world
results that we have seen from data on which connectivity
compression can be used. These two data sets came to us
courtesy of Parasolid.
On the piping data set, we see
instancing doing most of the heavy compression, simply because
of the nature of the data. Almost the entire thing is made
up of copies of only a very small number of "symbols". For
reference, without instancing, the full-resolution piping
data set would have been 239kb with LZ and 848kb without.
This data set came to us courtesy of Coade.
|