Revision 10 contains several very important lighting fixes and support
for additional max lighting features. These fixes will change the
appearance of your world, if you use max Spot lights or use attenuation
with Spot lights and Omni lights. These fixes make the VRML97 output
much more faithful to the lighting in max. They are unquestionably bug fixes.
However, if you are concerned about the effect of these changes on your world,
you may want to keep a copy of the previous version of the exporter until you
have adjusted the lighting. The exporter is found in the directory stdplugs\mcvrmlexp.dle
in the max directory (usually C:\3dsmax4).
Revision 10 fixes these lighting bugs:
a legacy bug causing very poor mapping of attenuation values for Omni lights
(PointLight in VRML97) and Spot lights (SpotLight in VRML97).
a bug causing output of an incorrect Far Attenuation End for both Omni and
Spot lights (radius for PointLights and SpotLights in VRML97) when "Scale
to VRML Units" is selected.
a legacy bug causing output of incorrect values for a Spot light's HotSpot
and Falloff angles (beamWidth and cutOffAngle in VRML97).
Revision 10 provides a very close mapping of max's Attenuation curves to VRML97.
The author gratefully thanks Robert Mueller of Lightspeed Design Group for writing
a terrific paper illuminating the problem and demonstrating a suitable solution.
Unfortunately most VRML browsers have attenuation specifications that do not
follow the spec. See Known Problems for more information.
Revision 10 adds support for the following max lighting features:
Decay for Spot lights and Omni lights (found in the Attenuation Parameters
the "Diffuse" & "Ambient Only" check boxes and the
Contrast spinner on the Affect Surfaces panel of the General Lighting Parameters
Revision 10 will output a warning comment before Spot lights with rectangular
beams since this beam shape cannot be displayed in VRML97. All Spot lights will
appear with a circular beam.
Revision 10 adds support for the following max Environment features:
global lighting level.
Revision 10 fixes a legacy bug causing incorrect output, in Quad, Ngon or Visible
Edges mode, of objects using multi-materials. Objects using multi-materials
are output as a set of IndexedFaceSets, one IFS for the set of faces using each
material. The bug caused all faces of an object to be output in each
IndexedFaceSet instead of just those faces using the particular material being
Revision 10 fixes a legacy bug that caused faces with less than 3 vertices
to be generated when outputting Quads, Ngons or Visible Edges from geometry
with holes in it.
Revision 10 DEFs and USEs the Color arrays output when Color Per Vertex is
checked in the Generate group. If max is selected as the color source and you
have not assigned vertex colors in your scene, a warning comment is written
into the output file.
Lastly, Revision 10 fixes a legacy bug that caused mirrored objects to be animated
in the wrong direction.
Version 1, Revision 009
DEFs and USEs Appearance nodes (3ds max materials) using the 3ds max material
names. For multi-materials, adds comments indicating the name of the parent
multi-material and the sub-material slot number.
Slightly changes the format of DEFed node names.
Fixes several minor problems:
Anchor nodes pointing at viewpoints within the world could use the wrong
Sound node and DirectionalLight direction vectors and Billboard node axisOfRotation
vectors were incorrectly scaled when "Scale to VRML units" is selected.
When outputting objects that have sets of faces using different materials
from multi-material the exporter would leak some memory and repeatedly perform
the same computation.
Works around a problem with certain geometry where 3d studio max generates
an incorrect number of vertices and fails to initialize the extra vertices.
This could result in bad output "1.#NAN" when the uninitialized vertices
do not contain valid floating point numbers. The unexpected comment introducing
character '#' obviously causes problems in the output file.
Fixes a legacy bug of exporting the geometry of nodes whose Renderable property
Version 1, Revision 008
Fixes a crash that happened with certain geometry configurations when exporting
Fixes output for objects with mirror transforms.
Version 1, Revision 007
Fixes several legacy problems with export as quads, ngons and visible edges:
quads output sometimes skipped vertices resulting in incorrect triangles.
ngons output for polygons with holes and concave geometry had missing pieces
or would crash 3ds max.
visible edges output for polygons with holes and concave geometry had the
same problems as ngons plus addition problems with missing pieces.
Version 1, Revision 006
Fixes use of an incorrect DEF name in a USE request for an instanced object.
Version 1, Revision 005
Fixes a crash when typing into the edit boxes on the Sample Rates dialog.
Corrects the documentation describing the "once per animation frame"
radio buttons on the Sample Rates dialog.
New Features vs. discreet's Standard Exporter
Scales to VRML units
The exporter scales from the world coordinates of the max file to world
coordinate system of VRML. (Scale is misnomer. This feature maintains the
sizes of your models in their real-world coordinates.) You no longer have
to work with tiny models (inches for meters) or risk overflowing the VRML
browser's z-buffer resolution.
You can output a creaseAngle value. This is a bit of a hack but I have found
it useful. It puts the single value you specify into every IndexedFaceSet
Colors, Normals and TextureCoordinates now DEFed and USEd
This exporter generates Colors, Normals and TextureCoordinates once per
object, gives them a DEF name and USEs them in subsequent IFSes for the same
object. This greatly reduces the size of the output when exporting per vertex
colors or normals, or exporting a scene that makes extensive use of textures.
DEFs/USEs 3ds max Materials
Instead of outputting the definition of a material (as an Appearance node)
every time it is used, this exporter only outputs the definition the first
time the material is used. It assigns a DEF name to the definition and thereafter
reuses the definition via a USE statement.
Supports Environment Settings
If the Background Color set in the Environment Dialog is not black, a suitable
Background node is exported. max's global light level and tint, also set in
the Environment dialog, are applied to all exported lights.
Decay applied to Omni and Spot lights is exported using the attenuation
field of VRML97 PointLights and SpotLights.
Improved NavInfo helper
The NavInfo helper now supports "ANY" and also supports selection
of a subset of navigation types. You can for example select "WALK"
and "EXAMINE" but not "FLY". This feature is disabled
in the trial version. Trial version users will see the standard discreet NavInfo
helper. This prevents users being left with max files they can not read at
the expiration of the trial period.
Context Sensitive Help
Context sensitive help is provided for all controls on the export dialog.
Bug Fixes vs discreet's Standard Exporter
Normals Correctly Generated.
The discreet exporter writes more normals than there are faces or vertices
causing VRML browsers to abandon the normals list and render faceted objects.
Material Editor's Coordinates Roll-up Settings Correctly Output
This exporter generates a TextureTransform that correctly reflects the values
in the material editor's Coordinates roll-up. Unlike the discreet exporter's
output, rotations and scales of the texture will look the same as in max.
This exporter also supports the roll-up's Tiling control. Note that, unlike
VRML, max does not use the border pixels to fill the surface outside the 0
to 1 coordinates of the texture. To make the VRML output look close to the
appearance in max you must use a texture whose border pixel is the same as
the diffuse color of the surface.
This exporter does not support the roll-up's Mirror control which has no
obvious equivalent in VRML.
The generated TextureTransform is compliant with the VRML97 specification
but does not work correctly with Cortona up to and including v3 or with OpenWorlds
up to v2.5. These browsers interpret the center field with a sign opposite
to that required by VRML97. This is fixed in Cortona v3.01. All versions of
Cortona also ignore the repeatS and repeatT fields so the setting of the Tiling
control has no apparent effect.
Neither exporter supports the settings of the Bitmap Parameters roll-up
because max's internal public programming interfaces do not provide access
to these settings. If you need to crop or place your texture maps, use the
Coordinates roll-up instead.
Mirrored Objects Correctly Output
Objects which are instanced and have mirror transforms are now correctly
output. Since VRML97 does not support negative scale values, the instanced
geometry has to be duplicated in the output file with the vertices modified
as needed by the mirror transform.
Output as quads, ngons and visible edges now works correctly.
When writing meshes as quads and ngons, the discreet exporter often generates
bad VRML, bad polygons, mismatches faces and materials or crashes 3ds max.
Now you can take advantage of these alternate forms to reduce the size of
your output file.
No More Empty IndexedFaceSets
For each object, the discreet exporter writes an IFS for each material in
a multi-material even for materials not used by any faces of the object. This
causes it to generate IFSes with empty coordinates.
No More Duplicate DEF named IndexedFaceSets
The discreet exporter writes IFSes with duplicate DEF names when outputting
objects with multi-materials.
Hidden Bindable Nodes No Longer Exported
The discreet exporter writes VRML for all the NavInfo, Background and Fog
helper objects and all the Camera objects regardless of whether or not they
are hidden in the max file. This exporter will not export these objects or
show them in the "Initial ..." List Boxes unless they are unhidden
or "Export Hidden Objects" is selected. The List Boxes are updated
whenever the Export Hidden Objects control changes.
Does Not Generate Bogus Vertices in Coordinate Nodes
With certain geometry, 3d studio max generates an incorrect number of vertices
and fails to initialize the extra vertices. This can result in bad vertex
data in the output, "1.#NAN", when the uninitialized vertices do
not contain valid floating point numbers.
Does Not Export Geometry of Nodes Whose Renderable Property Is FALSE
The discreet exporter exports a node's geometry when the
node's Renderable property is FALSE.
Exports Lights Correctly
The discreet exporter generates incorrect values for Omni lights' attenuations
(PointLight's attenuation) and Spot lights' Hotspots and Falloffs (SpotLight's
beamWidth and cutOffAngle).
This is not really a problem just a note to prevent problem reports. If
you purchase and register the exporter while you have a max file open, you
may not see the new improved NavInfo helper until the next time you run 3d
studio max. This depends on whether the file contains a NavInfo helper or
whether you have selected NavInfo in the Create panel's Helpers list.
When outputting in Ngon mode surfaces that have holes in them, the exporter
may generate a single polygon that restarts from its origin. I.e. it is really
two polygons in one. This is not VRML97 compliant, but it works in some browsers.
Most VRML97 browsers have non-spec.-compliant implementations of attenuation.
The following table shows our test results:
Attenuation is not protected by the specified max(x,1)
function so it can become a multiplier causing excessive brightness
See only a penumbra around the fringes of illuminated
Blaxxun Contact 4.4
Extremely dark. Can only see faint shadows.
Blaxxun Contact 5.1
Just see a penumbra around the fringes of PointLights.
SpotLights can't be seen.
OpenGL with latest NVidia driver (v188.8.131.52 )
Like 4.4. Also if Material ambientIntensity is set object
glows, even when lights have ambientIntensity of 0, as if emissiveColor
Something is backwards in attenuation. Lights with more
attenuation appear brighter that lights with less attenuation. Also
does not clip lights to zero at radius value.
Clips but does not attenuate. In Cosmo, the light field
has very visible triangles.
OpenWorlds Horizon v184.108.40.206
Almost completely black.
Uninstalling & Restoring the Original discreet/discreet
Use add/remove programs to uninstall the software.
When the software is installed the original Kinetix/discreet version of the
plug-in is moved to vrmlexp.discreet in 3d studio max's stdplugs
directory (usually C:\3dsmaxN_N\stdplugs, where N_N is your max
version number). Rename this file to vrmlexp.dle to restore
the original plug-in.
When the software is installed, it adds an entry to max's plugin.ini file (usually
C:\3dsmaxN_N\plugin.ini) to make the help file available via Additonal
Help ... in max's Help menu. Unfortunately the version of InstallShield included
with Visual C++ does not support automatic removal of .ini file additions during
uninstallation. If you care, you will have to remove this entry by hand.
For technical questions and problems, send e-mail your questions to
Please send your suggestions for improvements and enhancements to .