TIP:
It is rare for an object to use all of the Material node's parameters
at the same time. Just specifying an overall diffuseColor
is easy and gives good results. Adding specular highlights by
specifying a white specularColor and adjusting the shininess
field will suffice for most objects. Alternatively, you can
specify a black diffuseColor and simply use emissiveColor
to get full-intensity, glowing objects. If an object is purely
emissive (specularColor and diffuseColor are both
black), then implementations do not need to perform lighting
calculations for the object at all.
Partially
transparent objects can be used to create a lot of great effects.
For example, very nice smoke and fire effects can be created
using semitransparent, animated triangles. Unfortunately, not
all systems support partial transparency, so if you want your
world to be viewed by the largest number of people you should
stay away from transparency values other than 0.0 (completely
opaque) and 1.0 (completely transparent).
Perhaps
the greatest frustration for content creators with VRML 1.0
was creating scenes that would look good on all of the various
VRML browsers. Varying capabilities of the underlying rendering
libraries and different interpretations of the incomplete specification
resulted in vastly different appearances for identical scenes.
These problems are addressed in VRML 2.0 in several different
ways.
First,
ideal lighting equations are given, and the interaction between
lights, materials, and textures are well defined (see Section 2.14, Lighting Model). The VRML 1.0 specification
was vague about what the ideal, correct scene would look like
once rendered; VRML 2.0 is very precise. Implementations will
still be forced to approximate the ideal due to hardware and
software limitations, but at least now all implementations will
be aiming at the same target, and results can be judged against
the ideal.
VRML 1.0
allowed multiple materials to be specified in a Material node
and allowed the materials to be applied to each face or vertex
of shapes. VRML 2.0 allows only a single Material node, but
also allows specification of multiple diffuse colors for each
vertex or face, restricting the feature to a simple, common
case.
The ambientColor
field of VRML 1.0 is replaced by the VRML 2.0 ambientIntensity
field. Specifying what fraction of the diffuse color should
be visible due to ambient light is simpler and better matches
the capabilities of most interactive renderers. Specifying the
ambient reflected color as a fraction of the reflected diffuse
color also works much better with texture colors and per-face/per-vertex
colors, which are both treated as diffuse colors. It would be
very strange to see texture in the lighted parts of a textured
object but see nothing but the ambient color in the unlit parts
of the object.
However,
even with these changes, color fidelity will continue to be
a problem for content creators. Three-dimensional rendering
libraries and hardware are a new feature for inexpensive computers
and there will continue to be fairly large variations between
different implementations. Differences in display hardware--monitors
and video cards--can result in different colors being displayed
on different machines even if the VRML browser makes exactly
the same lighting calculations and puts exactly the same value
in the frame buffer. As standards for color reproduction on
computer displays develop and as 3D graphics hardware and software
on inexpensive machines mature, the situation will gradually
improve. However, it is likely to be several years before it
will be practical to decide what color you will paint your house
by applying virtual paint to a virtual house and judging the
color as it appears on your computer screen.
|