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.
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 :
Browser.setOption("viewpoint-relative","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 planeTeapot Geometry 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 modelCompositeTexture3D implements change of pixel dimensions and parameter attributes including HDR formats.
CompositeTexture3D with parameter changesOther new examples
Shader Model 3.0 example - MandelbrotIn 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:
The following X3D data types have been implemented as X3D/VRML field types, COM interfaces and VrmlScript objects:
SFDouble MFDouble SFVec3d MFVec3d SFVec4f MFVec4f MFBool
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:
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.
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)
High resolution jade dragon demo with sub-surface light scattering effect (recommeded settings)
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.
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.
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.
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.
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 …
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.
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.
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.
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.
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"
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
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
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.
newString = String.replace(String str,String search,String replace)
replaces all occurences of search in str with replace.
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.
Non power-of-2 textures with mip-mapping enabled were missing in the DirectX7 driver for hardware supporting non-power of 2 textures.
The functionality of the OpenGL extensions ARB_texture_rectangle and NV_TEXTURE_RECTANGLE have been corrected.
The SUBTRACT multitexture mode has been added.
BS Contact VRML/X3D 7.0 can be integrated into PowerPoint presentations. The following short manual illustrates the ease with which this can done.
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.
A number of new setOption parameters have been added:
Content authors have complete control over the VRML/X3D scene time base with the following options:
These options can also be specified with a WorldInfo node, for example:
WorldInfo { info "options:relativeTime=true,timeStart=0,timeStop=26.950,timeRate=1.0" }