This page collects information about implementation status of VRML constructs, with respect to VRML 1.0 and 2.0 specifications. It also collects some details about handling of some nodes. If you want to know what is supported besides the things required by VRML specifications, you should read the other page about VRML extensions implemented.
No limits: VRML 97 specification defines various limits that must be satisfied by VRML browsers to call themselves "conforming" to VRML specification. For example, only 500 children per Group have to be supported, only SFString with 30,000 characters have to be supported etc. My units generally don't have these limits (unless explicitly mentioned below). So any number of children in Group node is supported, SFString may be of any length etc. VRML authors are limited only by the amount of memory available on user system, performance of OpenGL implementation etc.
Contents:
All nodes from VRML 2.0 specification are correctly parsed. The list below lists nodes that are actually handled, i.e. they do things that they are supposed to do according to "Node reference" chapter of VRML spec.
TODO for all nodes with url fields: for now all URLs are interpreted as local file names (absolute or relative). So if a VRML file is available on WWW, you should first download it (any WWW browser can of couse download it and automatically open view3dscene for you), remembering to download also any texture/background files used.
Nodes listed below are fully (except when noted with TODO) supported :
Note: VRML 2.0 SpotLight.beamWidth idea cannot be translated to a standard OpenGL spotlight, so if you set beamWidth < cutOffAngle then the light will not look exactly VRML 2.0-spec compliant. Honestly I don't see any sensible way to fix this (as long as we talk about real-time rendering using OpenGL). And other open-source VRML implementations rendering to OpenGL also don't seem to do anything better.
VRML 2.0 spec requires that at least 8 lights are supported. My units can support as many lights as are allowed by your OpenGL implementation, which is at least 8.
Background, Fog, NavigationInfo, WorldInfo
Note: WorldInfo.title, if set, is displayed by view3dscene on window's caption.
Switch, Group, Transform
Sphere, Box, Cone, Cylinder
Shape, Appearance, Material
TextureTransform, PixelTexture, ImageTexture
Note: ImageTexture allows various texture formats, including JPEG, PNG, BMP, PPM, RGBE. GIF format is supported by running convert program from ImageMagick package "under the hood". See glViewImage documentation for more detailed list.
Inline, InlineLoadControl
LOD
TODO: But we always render first (best looking) node, ignoring distance of node to the viewer.
Anchor
TODO: But clicking on anchor doesn't do anything for now. In other words, for now Anchor works just like Group.
Text, FontStyle
Most important properties (size, spacing, justify, family, style) are handled fully.
TODO: But some properties are ignored for now:
Viewpoint
Note: view3dscene displays also nice menu allowing you to jump to any defined viewpoint, displaying viewpoints descriptions. Extensive tests of various viewpoint properties, includind fieldOfView, are inside my VRML test suite in vrml_2/viewpoint_*.wrl files.
PointSet, IndexedLineSet, IndexedFaceSet, Coordinate, Color, Normal, TextureCoordinate
TODO: only one tiny (practically never used ?) case is not implemented: for IndexedFaceSet, the case when normalPerVertex = FALSE and normal = NULL (i.e. we have specified normals per face) is ignored (we just calculate our own normals in this case).
Billboard, Collision
TODO: These two nodes are not really handled: they just work like a Group. Sometimes that's enough for them to look sensible, but it's hardly a real support...
ElevationGrid
TODO: Fields ignored: color, colorPerVertex (always shape material is used or white unlit), normal, normalPerVertex, creaseAngle (always flat normals are generated).
Prototypes (both external and not) are 100% done and working :) External prototypes recognize URN of standard VRML 97 nodes, i.e. urn:web3d:vrml97:node:Xxx (see also our extensions URN on Kambi VRML extensions).
TODO: Some general features not implemented yet are listed below. They all are parsed correctly and consciously (which means that the parser doesn't simply "omit them to matching parenthesis" or some other dirty trick like that). But they don't have any effect on the scene. These are:
Although X3D support is not implemented at all (we even deliberately don't support X3D files in classic encoding, I want to improve VRML 97 support first), we already have some X3D-specific features implemented. For now they are available for VRML 97 authors, that is: we support VRML 97 with some X3D features "backported". As a reference, I used X3D specification with amendment 1 and revision 1, that is: the newest X3D specification as of this writing (2007-12).
X3D bits implemented are:
Appearance node has all fields from X3D specification allowed (but actually only shaders field is handled from these X3D-specific Appearance fields).
Parts of programmable shaders component are implemented: ComposedShader and ShaderPart nodes allow you to write shaders in GLSL language. See VRML extensions about using shaders for examples of use.
I consider VRML 1.0 status as "almost complete". All nodes and features are handled, with the exception of:
focalDistance is also ignored, but this is allowed by specification. And honestly VRML 1.0 specification is so ambiguous about this feature (browser should adjust flying speed to reach that point in a reasonable amount of time, perhaps the browser can use this as a hint...) that I see no reliable way to handle focalDistance.
Fortunately, VRML 2.0 replaced this with NavigationInfo.speed feature, with clear meaning (basically, it's just a distance per second), so please use this instead. (For my engine, you can use NavigationInfo node even in VRML 1.0 models.)
Extensibility features (isA and fields) are not handled fully, although you probably will not notice. For built-in nodes, isA and fields are correctly parsed but ignored. For unknown nodes, they are simply omitted up to the matching closing parenthesis.
This means that the only case when you will notice something doesn't work is when you use non-standard VRML node but point to a standard node with isA declaration. Then my engine will ignore isA declaration, while it should use it to interpret your node and (at least partially, when possible) handle it.
Finishing of handling this VRML 1.0 feature has rather low priority, since this mechanism was completely dropped in later VRML versions. VRML 2.0 and X3D replaced this by fantastic prototypes mechanism, which is basically an extra-powerful and elegant way of doing what VRML 1.0 tried to do with isA and fields feature (and VRML prototypes are already handled 100% by our engine).
Tested on our Kambi VRML test suite.
Examples from VRML 2.0 specification and The Annotated VRML 97 Reference were tested.
Files generated by Blender VRML 2.0 exporter are handled. I think that I support fully everything that can be generated by this exporter.
From Chaco's VRML Test Suite passes every file (that exists on server — some are missing, although I fixed missing texture for tests) besides recurse.wrl — it's an incorrect file, we should produce better error message for it.
NIST VRML Test Suite results are below.
Each test was classified as "pass" only if it passed fully. Which is a good objective measure, but also means that many tests failed because unrelated features are not implemented. For example, don't be discouraged by many failures in PROTO category. Prototypes were 100% working in all tests, and I consider their implementation as practically finished. But many other missing features (sensors, events, interpolators) prevented the tests in PROTO category from passing completely.
| Node Group | Node | Test Number | Result | Notes |
|---|---|---|---|---|
| Appearance | Appearance | 1 | + | |
| 2 | + | |||
| 3 | + | |||
| 4 | - | Visible shapes are rendered OK, but Extrusion is not rendered (not implemented yet). | ||
| 5 | + | |||
| 6 | - | IndexedFaceSet, IndexedLineSet, PointSet are OK. Handling of color for ElevationGrid not implemented. | ||
| 7 | + | |||
| 8 | - | IndexedFaceSet is OK. Handling of color for ElevationGrid not implemented, so texture is white instead of blue. | ||
| 9 | + | |||
| 10 | - | IndexedFaceSet errorneously modulates texture color by specified color. On ElevationGrid it "passes", but only because we just ignore color there, see 6 and 8 cases above. | ||
| 11 | - | Visible shapes are rendered OK (including the texture transparency), but Extrusion is not rendered (not implemented yet). | ||
| 12 | - | Like above: Visible shapes are rendered OK (including the texture transparency), but Extrusion is not rendered (not implemented yet). | ||
| FontStyle | 1 | + | ||
| 2 | + | |||
| 3 | + | Note that the test looks strange because the X axis line starts at X = -200. This is an error in the test file. | ||
| 4 | + | |||
| 5 | + | |||
| 6 | - | For horizonal text test passes, but vertical text is not implemented yet. | ||
| 7 | - | Handling Script not implemented yet. | ||
| ImageTexture | 1 | + | ||
| 2 | + | |||
| 3 | + | |||
| 4 | + | |||
| 5 | + | |||
| 6 | + | |||
| 7 | + | |||
| 8 | + | |||
| 9 | + | |||
| 10 | + | |||
| 11 | + | |||
| 12 | - | Rendering Extrusion is not implemented yet. | ||
| 13 | - | The texture top is not aligned precisely with text top. | ||
| 14 | + | |||
| 15 | + | |||
| 16 | + | |||
| 17 | + | |||
| 18 | + | |||
| 19 | - | Like case 12: Rendering Extrusion is not implemented yet. | ||
| 20 | - | Like case 13: The texture top is not aligned precisely with text top. | ||
| 21 | + | |||
| 22 | - | Visible shapes are OK, but rendering Extrusion is not implemented yet. | ||
| 23 | + | |||
| 24 | - | Visible shapes are OK, but rendering Extrusion is not implemented yet. | ||
| 25 | + | |||
| 26 | + | |||
| 27 | + | |||
| 28 | + | |||
| 29 | + | |||
| 30 | + | |||
| 31 | + | |||
| 32 | + | |||
| 33 | + | |||
| 34 | + | |||
| Material | 1 | + | ||
| 2 | - | Visible shapes are rendered OK, but Extrusion is not rendered (not implemented yet). | ||
| 3 | + | |||
| 4 | + | |||
| 5 | - | Visible shapes are rendered OK, but Extrusion is not rendered (not implemented yet). | ||
| 6 | - | Visible shapes are rendered OK, but Extrusion is not rendered (not implemented yet). | ||
| ...here I skipped some tests, to be checked later... | ||||
| Geometry | IndexedLineSet | 1 | + | |
| 2 | + | |||
| 3 | + | |||
| 4 | + | (These tests have nothing to do with IndexedLineSet, they are for IndexedFaceSet.) | ||
| 5 | + | |||
| 6 | + | |||
| 7 | + | (These tests have nothing to do with IndexedLineSet, they are for IndexedFaceSet.) | ||
| 8 | + | |||
| 9 | + | |||
| 10 | + | |||
| ...here I skipped some tests, to be checked later... | ||||
| Misc | EXTERNPROTO | 1 | + | |
| 2 | + | |||
| 3 | + | |||
| 4 | + | |||
| 5 | + | |||
| 6 | + | |||
| 7 | + | |||
| 8 | - | Currently, base URL for EXTERNPROTO is from the file where EXTERNPROTO is written, not from the file where it's instantiated. | ||
| 9 | - | Scipts are not supported yet. Also, the DEF declaration inside a script causes known problem with cycles in VRML graph. | ||
| 10 | - | |||
| 11 | - | Scipts are not supported yet. | ||
| 12 | - | |||
| 13 | + | |||
| 14 | + | |||
| 15 | + | |||
| 16 | - | Static result is OK, but sensors, interpolators and events do not work yet. | ||
| 17 | - | |||
| 18 | - | |||
| PROTO | 1 | + | ||
| 2 | + | |||
| 3 | + | |||
| 4 | - | Static renders OK, but sensors, events and routes don't do anything (yet), so touch sensor doesn't turn the light on. | ||
| 5 | - | Like case 4. | ||
| 6 | + | |||
| 7A | - | Static renders OK, but sensors, events, routes, interpolators don't do anything (yet). | ||
| 7B | - | Static renders OK, but sensors, events, routes, interpolators don't do anything (yet). | ||
| 7C | - | Static renders OK, but Collision and interpolators don't do anything (yet). | ||
| 7D | - | I didn't even bother testing, like above: they use sensors, interpolators and MovieTexture that are not implemented yet. | ||
| 7E | - | |||
| 7F | - | |||
| 7G | + | |||
| 7H | - | Extrusion is not implemented yet. | ||
| 7I | ? | The test file causes recursive inline, so the file cannot be loaded. Our engine loads files "eagerly", so it simply hangs. It should exit with nice error message, this should be fixed. | ||
| 7J | - | Like case 7A. | ||
| 7K | - | |||
| 8 | - | Static renders OK, but sensors, events, routes, interpolators don't do anything (yet). | ||
| 9 | - | |||
| 10 | - | Rendering Extrusion is not supported. However, I replaced extrusions by Boxes in the test, and the nesting prototypes works 100% OK. | ||
| 11 | - | Events etc. do not work yet. | ||
| 12 | - | |||
| 13 | - | Like case 10. | ||
| That's enough for now... I don't have time to check all the tests. If someone wants to do the work and do the remaining tests (and document results just like above), please contact us by vrmlengine-main mailing list. | ||||
Cases are marked above as "success" (+) only if they succeed completely. The table above was modelled after similar page OpenVRML Conformance Test Results.