Proposal: Replace LevelOfDetail with a faster LOD node

Gavin Bell (gavin@krypton.engr.sgi.com)
Thu, 20 Apr 1995 17:50:29 -0700


I really hate to do this, but...

We've found the existing Inventor 2.0 LevelOfDetail node to be to
slow, due to the fact that the switching mechanism is defined in terms
of how large objects appear on the screen. To jog your memories, a
level of detail specification looks like:

LevelOfDetail {
screenAreas [ 10000, 2000, 100 ]
Separator { # Child 0 info }
Separator { # Child 1, etc }
}

Child 0 will be drawn if the bounding rectangle of the bounding box of
the LevelOfDetail takes up 10,000 pixels or more on the screen, etc.

For Inventor 2.1, we're introducing a new node that will look like:
LOD {
ranges [ ] # MFFloat; World-space distances
center 0 0 0 # SFVec3f; Center of LOD in object space

Separator { # Child 0 info }
Separator { # Child 1, etc }
}

Advantages of the new LOD:
-- It is faster. It is easier to calculate the distance from the
center of the LOD to the eyepoint in world-space than it is to project
the LOD's bounding box and figure out approximately how many pixels
the projection covers.
-- It is invariant to rotations of the LOD about it's
center. If you have a long, skinny object the old LevelOfDetail would
switch as the object rotated.
-- It is easier to specify world-space distances.
-- It works better with orthographic cameras where screen size does
not diminish with distance.

Disadvantages:
-- Incompatibility with existing files. That's why we're giving it
a new name in Inventor, and not just changing the definition of the
LevelOfDetail node.

I propose that the LevelOfDetail node that is currently in the VRML 1.0 spec
be replaced with the new LOD.

(I'm torn between wanting to get the VRML 1.0 spec done, nailed,
out-the-door, and wanting to get it right the first time, but think this
change is worth it).

What do you think? The Intervista and WebSpace development teams both agree
that this should be changed for VRML 1.0; I'd like to hear from people
creating VRML content and from other people writing browsers.

PS: I hereby volunteer to write a public domain QvLib-based tool that
converts LevelOfDetail nodes to LOD nodes (I have to write the code for
Inventor anyway), so it will be easy to convert existing VRML scenes that use
LevelOfDetail to use LOD instead.