BS Contact VRML/X3D 7.0

BS Contact VRML/X3D - Release Notes



This document provides information about the new features and improvements in the most recent releases of BS Contact VRML/X3D. Indepth technical documentation is available in the BS SDK.




BS Contact VRML/X3D - Release 7.0

Release 7  update (2007/05/22)

Built using Microsoft Visual Studio 2003.

New Nodes:

The node ImageTextureLOD supports a separate thumbnail texture, autogeneration of thumbnail images and eventOuts for reporting image dimensions.

The node FlashMovieTexture renders SWF files or streams to a texture and allows interaction with the embedded Adobe Flashplayer.

The node TouchSensor2 is reporting mouse double clicks events.

The node GroupAntiAlias allows antialiased rendering of a scenegraph via supersampling, for DirectX9 downsampling can be done in Shader.

The new node GroupRenderToTexture can be used to render a Group to a CompositeTexture3D node for applying postprocessing effects using shaders, GroupeRenderToTexture is supporting now multiple rendering targets.

A 3D Scene is processed using a Shader

The FX parameter semantic TEXTURE for texture parameters automatically passes the VRML texture node of the ShaderAppearance to the DX9 Effect, similar the semantic MATERIAL passes the values of the VRML Material node to an FX structure.

For MovieTexture and StereoMovieTexture there is now a view of the DirectShow Filter graph available. Using double click on a filter or output pin capture device settings can be changed.

SHIFT-F6 reports texture memory statistics for Direct X9:

Memory Status: 53% used                                 
# percentage of main memory used
  486016 free KB / 1048048 total KB physical memory
 3403296 free KB /  4093464 total KB paging file 
 2011360 free KB /  2097024 total KB of virtual memory
  479232 free KB /       0 total KB texture memory      
# free texture memory from DX8 Device (usually not current), 
  total memory isn't reported by DX9
17 textures    1104 KB used texture memory        
# number of textures and estimated memory use
Pool default        0 KB texture memory                 
# direct video memory textures(e.g.CompositeTexture,MovieTexture)
Pool managed     1104 KB texture memory                 
# normal "managed" textures 
oldestFrame 138 newestFrame 138 currentFrame 138	    
# frame age min max of all textures

FontTexture supports more graphic card specific texture formats.

The Text node supports the new field SFVec2f maxSize to limit the space and character wrapping.

Texture nodes are supporting the eventIn set_unload TRUE to unload the resource from memory.

The Inline node supports the X3D SFBool load field
if FALSE the Inline node does not get loaded, sending an FALSE eventIn unloads the inline.
Metadata nodes for Inline are now preserved.

The global alpha factor override, and the alpha factor override for Part nodes are now used for sorted transparency processing.

Global viewport option :

                          "0.25 0.25 0.5 0.5")  
         - a relative rectangle 
	Browser.setOption("viewpoint","x y width height")			 
         - an absolut rectangle in pixel

RenderToBitmap and RenderToVideo now works with Layer nodes using the DirectX9 renderer mode.

The new option for saveWorld2 "writeEventFields=true" can be used to write all eventOut fields, e.g. to dump state of world for inspection

Some problems using the DirectX9 rendering options autoMipMap and compressedTextures have been fixed.

BS Contact Stereo mode TechXpert 5 view mode and more multitexture modes are supported in DirectX9.
A new custom anaglpyh mode allows the setting of color channel factors and gamma. A new Philips Image-Depth 3D display mode is now supported.
The stereo projection matrix parameter focal distance is now supported in DirectX9 modes.

The Device and KeyBoard Sensors are reporting focus changed events.

Extensions for Nodes StereoTexture and StereoMovieTexture

Addition to Particles node:

	SFNode  emitter	            optional particle emitter 
                                    geometry, if NULL use sphere 
	SFFloat fadeStartFraction   fraction value when fading 
                                    should start in lifeTime : 
                                    Default 0.0 // new 7.02
	SFBool  sort		    FALSE, if TRUE, particles 
                                    are sorted from FAR to near
                                    viewer position 
	SFBool  billboard	    TRUE, if TRUE, particles are
                                    aligned towards viewer like
                                    a billboard, if FALSE 
                                    oriented in xy plane 

Teapot Geometry emitting particles
Rectangle emitting particles

Built-in SpaceMouse support

Sound node supports Direct Sound 8 Sound FX Processing for Chorus or Distortion effects

Sound2 with Echo effect and custom distance model
See Microsoft MSDN Documentation for the DSSFX effects and parameters

CompositeTexture3D implements change of pixel dimensions and parameter attributes including HDR formats.

CompositeTexture3D with parameter changes

Other new examples

Shader Model 3.0 example - Mandelbrot
Lambert Skin
Drop images on to the shape or 3D objects into the window.

Improved X3D Support

In this release of BS Contact VRML/X3D many incremental changes and additions have been made to more closely align BS Contact with the X3D ISO standard:

  • X3D classic encoding is supported (i.e. BS Contact handles the file extensions x3dv and x3dvz).
  • X3D MetaData nodes implemented
  • X3D CAD Profile nodes implemented (see above)

The following X3D data types have been implemented as X3D/VRML field types, COM interfaces and VrmlScript objects:

SFDouble    MFDouble
SFVec3d     MFVec3d
SFVec4f     MFVec4f

The saveWorld function provides basic X3D XML export support. Using the X3DV extension for saveWorld X3D Worlds can be saved in the classic encoding.

Many new X3D fields that have been added to standard VRML97 nodes have now been implemented in BS Conntact, for example:

  • The TouchSensor.description text is shown in the browser status bar and popup text.
  • The new Viewpoint.centerOfRotation field can be used to set the examine center.

New X3D Event utility nodes have been added:

BooleanFilter {}
BooleanToggle {}
BooleanTrigger {}
IntegerTrigger {}
TimeTrigger {}
IntegerSequencer {}
NodeSequencer {}
TriggerSensor {}

BS Contact multi-texturing and shader nodes are now supported in the XML encoding.
MultiTexture child nodes in XML encoding are now added correctly to the corresponding fields without using an explicit containerField attribute.

X3D Triangle and IndexedTriangle Set nodes have been added:

TriangleFanSet {}		
TriangleSet {}		
TriangleStripSet {}		
IndexedTriangleFanSet {}		
IndexedTriangleSet {}		
IndexedTriangleStripSet {}		

The nodes StringSensor and KeySensor are now X3D conform. In VRML encoding the classic Conctact KeySensor node is used witch allow canceling of the key event handling via the eventsProcessed flag. The X3D Version of KeySensor is available in wrl as KeySensorX3D node.

For X3D Scenes without a Viewpoint node the view is not automatically set to view the whole scene anymore.

A Syntax warning is written to the console if DEF names are defined a second time, likewise there is an warning if a geometry node in the traversable scenegraph is not contained in the geometry field of a Shape node.

[ return to contents ]


Below you will find two demonstrations showcasing just some of the enhanced multimedia capabilities of our latest version 7.0 release of BS Contact VRML/X3D, which can be downloaded for evaluation purposes, from our download center.

To run these high-end demos correctly, we suggest you configure BS Contact VRML/X3D as per the recommeded settings for each demo.

High resolution cathedral demo (recommeded settings)


Realisation by Laurent Privat Infographie



High resolution jade dragon demo with sub-surface light scattering effect (recommeded settings)


Realisation by Laurent Privat Infographie



[ return to contents ]

Firefox Plug-in and Opera Support

A new Firefox plugin has been developed. For Firefox users this enables easy installation via a single XPI file, plus full BS Contact API access from javascript embedded within the containing web page.

The Opera web browser is also supported via out manual installation.

More information ...

[ return to contents ]

JPEG2000 Texture Support

The ImageTexture node now supports the JPEG2000 wavelet compression image format (.jp2 or .j2k file extension). This allows higher quality images when compared with those of similar file size saved in the older JPEG file format.

More information ...

[ return to contents ]

OccluderGroup for Augmented Reality

The new OccluderGroup node allows content authors to seamlessly integrate real-world photos and video into their 3D scenes to create augmented reality applications. By specifying invisible occlusion geometry, other 3D objects in the scene appear to pass behind elements within a background photo or video, thereby enhancing realism.

More information ...

[ return to contents ]

Stereo Texture Support

BS Contact now supports stereo images. Content authors have the choice of using either the side-by-side JPEG stereo image format (.jps file extension) within a standard ImageTexture node or the new StereoTexture node, specifying separate left and right ImageTextures in the texture field.

The stand-alone BSContact.exe can load JPS files directly and a 3D scene is generated automatically to view the stereo image. Simple red/blue stereo separation can be activated in BS Contact VRML/X3D's right mouse menu Settings > Stereo > Red/Blue with additional options for adjusting the degree of separation.

More sophisticated stereo viewing and high-end device support is available in BS Contact Stereo.

More information ...

[ return to contents ]

Authoring Tool Updates

The node extensions file for VrmlPad has been updated to include all implemented BS Contact VRML/X3D 7.0 nodes. Available in the Download Center …

In addition to general maintenance, a PointSet export feature has been added to the BS Exporter for Blender. Available in the Download Center …

The BS Exporter for 3ds max has been updated with user interface streamlining and shader export improvements. Available in the BS SDK …

[ return to contents ]

Render to Bitmap

A new right mouse click menu item enables the rendering of high-resolution screenshots to a user's hard drive in either BMP or JPG image format. Now end-users can generate "print quality" resolutions from real-time 3D - resolutions that have traditionally only been available from high-end 3D animation and rendering applications.

More information ...

[ return to contents ]

Render to Video

A new right mouse click menu item enables the rendering of an animated scene to video as either an AVI file or a sequence of separate images.

More information ...

[ return to contents ]

Render Video Input to Texture

Content authors may now specify a video capture card or webcam by way of a 'capture:' prefix in the MovieTexture.url field. In this way, live video can be fed from the local computer directly onto a 3D object in the scene.

More information ...

[ return to contents ]

Tiled Texture Support

Modern graphics cards have a texture resolution limit of no greater than 4096 x 4096 pixels (and often much less on older cards). The TiledImageTexture node enables content authors to specify extremely large textures in the url field.

More information ...

[ return to contents ]

Addition to CompositeTexture3D

The CompositeTexture3D.update field allows the user to control regeneration of the texture. Setting this field to "ALWAYS" will cause the texture to be rendered every frame. A value of "NONE" will stop rendering so that no further updates are performed even if the contained scene graph changes. When the value is set to "NEXT_FRAME_ONLY", the texture is rendered once then reverts back to "NONE". Since this is an exposedField, it will automatically generate an output event that may be routed.

exposedField SFString update "ALWAYS" #|"NONE"|"NEXT_FRAME_ONLY"		

[ return to contents ]

CAD Component

The X3D CAD Component nodes enable CAD assembly structuring of complex models. They extension nodes Part and Assembly are extensions of the X3D CADPart and CADAssembly nodes and have the ability to easily override appearance, visibility and transparency properties of assembly subparts.


X3D CADGeometry component Specification




[ return to contents ]


New VrmlScript Functions

The following additions have been made to the VrmlScript Node object:
newString = node.toVRMLString([string options])

Converts a deep node scene graph rooted by node to a VRML encoded string

newString = node.toX3DString([string options])

Converts a deep node scene graph rooted by node to a X3D XML encoded string

 node = node.getSubNodeById(String searchString)

Find a child node in a Group scene graph. The search string defines the adress of the targeted child node to return and may contains several subindices separated by  ,. E.g. "12,@MYNODE,id_23"

if the first char starts 0..9 : return children[parseInt(index)]
@abc: search by child with DEF name abc
#0..9 : return children with an SFInt32 id field matchig argment index
otherwise abc : return children with an SFString id field matchig the argment abc.

newString = string.escapeUrl()

Escapes unsafe url characters

newString = string.unescapeUrl()

unescapeUrl escapes url characters

newString = string.encodeHex()

hex encodes characters

newString = string.decodeHex()

hex decodes characters


The following additions have been made to the VrmlScript Browser object:
bool Browser.unloadTextures(int maxFrameAge,int maxCount)

unloads up to maxCount textures, not used in at least the maxFrameAge number of frames. Returns true if any texture has been released from memory.

cmd = Browser.addFieldReplace(double atTime,Node targetNode,
      string targetEventIn,Field newFieldValue);
cmd = Browser.addFieldReplace(double atTime,Node targetNode,
      string targetEventIn,Field currentFieldValue,
      Field newFieldValue,double duration)

Add an field update to node targetTime at time atTime. The second form does an linear interpolation starting at time atTime from value current to target.

Example to animate the diffuseColor of some Material node : Browser.addFieldReplace(atTime,mat,'diffuseColor',mat.diffuseColor,new SFColor(1,0,0),1.0)

Browser.addRoute supports a 5th bool argument trace. If set to true the execution of this route is traced to the console, with source and target nodes and the new value. This is quite useful for debugging.

The following additions have been made to the VrmlScript String object:
newString = String.replace(String str,String search,String replace)

replaces all occurences of search in str with replace.

The following additions and enhancements have been made to the VrmlScript Math object:
Math.round(double value, int precision)

Rounds a number to the specified number of digits of precision (previously Math.round omitted the precision argument).

int Math.isNan(double x) 		

Checks the given double-precision floating-point value for not a number (NaN). isNan returns a non-zero value if the argument x is NaN, otherwise it returns 0.

int Math.isFinite(double x) 		

Determines whether the specified double-precision floating point value is a finite value. isFinite returns a non-zero value if its argument x is not infinite, that is, if –INF < x < +INF. The function returns 0 if the argument is infinite or a NaN.

double Math.logb(double x)

Math.logb() extracts the exponential value of the double-precision floating-point argument, returning the unbiased exponential value of x.

[ return to contents ]

Other Updates

DirectX 9 Renderer

  • Upgraded DirectX 9 utilty runtime to D3DX9_26.dll allowing shader model 3.0 support
    Improvements for shader model 3.0 graphics cards e.g. non power-of-2 texture support
  • A 24 bit z-buffer format is now chosen as default in DirectX9 if no user settings are provided
  • The renderer has by default mip-mapping and HW auto generation of mipmaps enabled if the cards supports it
  • Non power-of-2 textures can be requested by adding the parameter ["subtexture"] to texture nodes
  • The use of non power-of-2 textures disables mip-maps for this texture
  • The rendering modes solid, bounding box, and silhouette are now supported
    Likewise, the setRendermode() function supports the additional strings HiddenLine, BoundingBox and Silhouette

DirectX 7 Renderer

Non power-of-2 textures with mip-mapping enabled were missing in the DirectX7 driver for hardware supporting non-power of 2 textures.

OpenGL Renderer

The functionality of the OpenGL extensions ARB_texture_rectangle and NV_TEXTURE_RECTANGLE have been corrected.

The SUBTRACT multitexture mode has been added.

All Renderers

  • The default user texture size limitation has been upgraded to 2048 (previously it was 1024)
  • A state issue with multitexturing and transparency has been fixed
  • Fallback url's in texture nodes have been fixed

Embedding BS Contact in Microsoft PowerPoint Presentations

BS Contact VRML/X3D 7.0 can be integrated into PowerPoint presentations. The following short manual illustrates the ease with which this can done.

  • Download PowerPoint manual:  | |

Fullscreen Monitor Configuration

The monitor used in full-screen mode can now be specified via Browser.setOption('FULLSCREEN-MONITOR', 'MonitorName') or the new HTML object parameter 'FULLSCREEN-MONITOR'.

Any valid monitor name eg. \\.\DISPLAY1 can be used as an argument. Available monitor strings are system-specific and can be found via the BS Contact right mouse menu Settings > Fullscreen Monitor.


  • The standalone viewer BSContact.exe has been improved
  • Render to Windows Device Context support for COM developers
  • CullGroup caches bounding box for more traversal cases
  • Improved the clean up of circular node references
  • For certain VrmlScript errors the calling file is now reported
  • New Browser functions Browser.modifyViewpoint() and Browser.setViewpointByNode() enable the further customization of user navigation
  • The OrderedGroup Node now forces the processing of children, layers and transparency in the order given
  • The renderToBitmap function parameters have been extended
  • COM API: QueryInterface for MovieTexture StereoMovieTexture nodes is supported for getting IGraphBuilder interface

New setOptions

A number of new setOption parameters have been added:

  • Global viewport contol e.g. setOption('viewport-relative','0.25 0.25 0.5 0.5')
  • Layer clamping e.g. setOption('clampLayer', 'TRUE')

Content authors have complete control over the VRML/X3D scene time base with the following options:

  • relativeTime
  • time
  • timeStep
  • pause
  • timeStart
  • timeStop
  • timeRate

These options can also be specified with a WorldInfo node, for example:

WorldInfo {
  info "options:relativeTime=true,timeStart=0,timeStop=26.950,

[ return to contents ]

Further Information

Previous Releases

BS Extensions

ISO Specifications