Smooth Levels of Detail

Heinrich Hey


Levels of Detail (LODs) are used to avoid the overload of the rendering hardware with too much polygons. Conventionally there are only a few numbers of LODs and therefore the change between two LODs is visible. Also the storage needed for the LODs is much higher than that for the original model, because each LOD is stored as a whole. This is important when the model is transmitted for network applications.

The new Smooth Levels of Detail (SLODs) ([1]) eliminate both problems. They make it possible to choose in real time from a very large number of LODs which are nearly continuous and which can be stored very efficient. The basic idea of SLODs is that an Brep object, consisting of vertices and triangles, is gradually simplified by joining the nearest pair of vertices and updating/discarding the triangles connected to them (pictures 1,2). Therefore if the original object consists of n vertices it results in n SLODs from the highly detailed original object down to where the whole object consists of a single point.




picture 1: triangle getting discarded because two vertices are joined




picture 2: triangle getting updated because two vertices are joined


The SLODs can be represented very compact because only the differences between each two successive SLODs is needed. In addition this can be encoded directly into a bitstream which can be used to store the object compressed without the use of additional compression tools. Another application of the bitstream is progressive transmission of the object over a network, which means that the object can be displayed with progressivly increasing quality while the bitstream is received. If this would be done with conventional LODs then there would be much more data to transmit because each LOD would have to be transmitted as a whole independently of its predecessors, and the object couldnīt be displayed with the same quality as fast as with SLODs.




textured cube (original 12 triangles)




textured cube (reduced to 10 triangles)



plant (original 13524 triangles)



plant (reduced to 8148 triangles)



plant (reduced to 3108 triangles)



plant (reduced to 840 triangles)


Implementation

In the current implementation (picture 3) a Brep object, which can be represented as a SlodBrep or an Inventor Scenegraph, is encoded into a clustertree (for immediate decoding) or into a bitstream (for compressed storage or transmission). Such an encoded object is then decoded back into a SlodBrep or an Inventor Scenegraph and the SLOD is selected by the max. allowed no. triangles or by the min. allowed clustersize (distance between vertices) (this is especially usefull for displaying several SLOD objects simultaneous with the same quality). The essential main part of the implementation is not bound to inventor. This allows an easy adaptation to other interfaces like OpenGl.




picture 3: dataflow in current implementation


A Brep object must of course contain vertices and triangles (Coordinate3, IndexedFaceSet) and can additionaly be colored (Material.diffuseColor, OVERALL or PER_VERTEX_INDEXED), textured (Texture2, TextureCoordinate2, PER_VERTEX) and can contain normals (Normal, PER_VERTEX_INDEXED). The stuff in brackets are the corresponding inventor nodes for the scenegraph. Use only one node for each of these classes.

Programming Reference

Demo Applications

iv2slod iventorfile slodfile
Encodes an inventorfile into a slodfile (bitstream). See implementation section for supported inventor nodes.
viewslod slodfile
Views a slodfile and allows interactive SLOD selection by adjusting the max. allowed no. triangles.
viewiv inventorfile
Views an inventorfile (without generation of a bitstream) and allows interactive SLOD selection by adjusting the max. allowed no. triangles. See implementation section for supported inventor nodes.

Literature

[1] Schmalstieg, Schaufler: Smooth Levels of Detail, TU Wien TR-186-2-97-03, 3.1997


© Heinrich Hey