What is VRML good for? One of its many uses is as a standard format for the exchange of 3D scene data between different applications. VRML has advantages over proprietary standards because its use is unrestricted and its specification is well known. (Also, it doesn't change as often -- one would hope.) What happens, then, when we see a VRML object we like, and decide to use it in a commercial rendering and animation system?
Fig. 1.
Fig. 1 shows a VRML gamma-2.2 rendering of an office scene with a nice fire extinguisher. (Click here if you want to look at the VRML for this scene.) We see this image and decide we'd like to use the fire extinguisher in our own model. We import the VRML model into our rendering and animation system, and extract the fire extinguisher object. This then gets put into a cruiser model we've been working on, shown below.
Fig. 2.
Fig. 2 shows a Radiance rendering our cruiser model with the new fire extinguisher. Notice that we now have a pink fire extinguisher instead of a red one. Even the hose appears to be made of something other than rubber. This is very disappointing, considering how much longer the rendering in Fig. 2 took than Fig. 1.
In a gamma-2.2 color space, colors don't mean reflectance anymore. They don't even mean reflectance**0.45, because gamma-2.2 materials do not interact with light the way physical materials do. Contrast (i.e., luminance gradients) due to specularity, curvature and light source distance are exaggerated, giving objects a different sort of appearance than they might have in real life.
This makes it very difficult to use VRML models in traditional or physically-based CG rendering systems, which expect colors to relate somehow to spectral reflectance. We could approximate true reflectance from VRML colors by raising the components to a power, but there are no import functions that currently do this because it is such an illogical operation. Colors have always been specified in a linear space, with the singular exception of image formats, where a gamma space makes sense for video compatibility and perceptual compression.
Similarly, no existing rendering and animation system exports VRML in a gamma-2.2 (or similar) color space, becuase this is not the traditional (or sensible) standard for CG rendering. They could be made to convert their colors, but they would be changing good information into bad information, and the results would still look very different in a VRML gamma-2.2 rendering due to gradient exaggeration.
The only logical solution from a data exchange standpoint is to stick with a linear color space, as is currently used by all serious rendering and animation systems, commercial or otherwise.
Questions, comments, etc.:
Greg Ward Larson Silicon Graphics, Inc. gregl@sgi.com