BS Contact 7.2 - Release Notes

Document version 1.3


Introduction

This document provides information about the new features and improvements in the most recent release of BS Contact 7.2.
In depth technical documentation is available in the BS SDK.
In additions to the WIN32 version 64Bit versions are now available.

Contents

 

BS Contact - Release 7.2

Release 7.205   (2009/05/19)

Release 7.204   (2009/05/13)

Release 7.203   (2009/04/30)

Release 7.202   (2009/04/22)

Cross browser installation

The new version of BS Contact is supporting the most common internet browser like IE6, IE7, IE8 and Firefox 2 and Firefox 3. The Mozilla plugin has been enhanced and is also supporting Google Chrome,Opera and Apple Safari.

[ return to contents ]

BS Contact 64 bit version available

BS Contact 7.2 is also available as 64 bit version for 64 bit operating system.
This is usefull when your application need a lot of memory to simulate huge scenes. There is also now 32bit wrapping in a 64bit operation system required.
[ return to contents ]

Zip Archive for easy content deployment

With BS Contact 7.2 Bitmanagement provides a new function for loading huge X3D/VRML worlds. Every inline node supports zip archive extraction. This solves the challenge of download race conditions and displaying untextures objects which are not expected by the user. All downloaded zip archives are extracted with the included folder hierarchy into the BS Contact cache to speed up the next session. As a content author you can compress your content into multiple zip files. You can also load a X3D/VRML file directly after the extraction from the zip file.

To download a zip archive with an Inline you have to write the path of the zip file into the url field. The path can be absolute or relative.
For optional loading a X3D/VRML file after extracting you have to name the file after a # -marker. This file can be in a folder hierarchy of the zip file. Every X3D/VRML file can be BS Contact encrypted and gzipped.

Inline Zip Example

    #download and extracting of the zip file
    Inline
    {
    	url "Texture.zip"   
    }
    
    #download,extracting and starting a VRML file from the zip
    Inline
    {
    	url "Content.zip#content/main.wrl" 
    }
    

Demos


Zipped Content
Zipped Content
Demo of zipped content.




[ return to contents ]

Progress Bar for loading content

When loading a scene in the standalone player, a progress bar, which indicates the loading status of the main scene (not inlines), will be displayed. This bar is by default turned off within a web-browser.
[ return to contents ]

Unicode Support for product localisation

BS Contact 7.2 now fully supports Unicode. All X3D and VRML files are read as Unicode UTF-8 representation and strings are stored using 16 Bit unicode characters. This release is also downwards compatible to read older VRML files in ANSI representation. If an invalied UTF-8 character sequence appears in the content parsing then falls back to ANSI encoding. Content developers are advised to check the encoding of their content.
This change effects the X3D/VRML node FontStyle. In the language field you can now specify the ANSI or UTF-8 interpretation for your strings in the X3D/VRML Text node.
[ return to contents ]

Base64 url decoding for embedding images in content

BS Contact 7.2 now supports base64 encoded ImageTexutures and urls in other media nodes.

Demos


base64 decoding
Base64 Texture
Demo of base64 decoded texture.




[ return to contents ]

Advanced realtime shadows

The Bitmanagement team has developed for BS Contact 7.2 advanced shadows techniques for realtime shadows in high quality.
The new shadow technique is an extension to the BS Contact node ShadowGroup.

With the latest version of BS Contact 7.2 you are now able to blurr the shadow map to have a diffuse shadow. Instead of a shadow map you can also use a depthmap. With this depthmap it is possible to have self shadows on objects. A more advanced technique for large shadow scenes is cascading shadow map (CSM). This technique allows you to have a more precise shadow over the whole large scenes independent of the distanze to the light. This technique is also used in the latest games.

      

ShadowGroup

SFString mode Indicates the mode of operation for generating and projecting the shadow.
available modes are: shadowMap | shadowDepthMap
MFNode emitter Contains the scene graph with geometry casting shadows.
MFNode plane Geometry nodes with projected shadowMap. For self shadow the emitter and plane must be the same.
MFNode shadowMap Contains the CompositeTextures to render the shadow geometry. For CSM shadow you have to define 3 CompositeTextures.
SFNode shadowMapGenAppearance Appearance node used to write shadowMap CompositeTexture3D.
SFNode appearance Appearance node to project the shadow map onto geometry in the plane field. (used DX9 FX Shader for projectiveTexture mapping)
SFBool shadowMapBlurr If TRUE the shadowMap with be blurred by a 2 path gaussian blurr filter (7*7 samples)
SFFloat shadowMapBlurrFactor 1.0 2.0 an offset factor when blurring the shadowMap.
BlurrShader.fx needs to be present in the Contact Installation folder (number of samples can be adapted)

Demos


CSM Shadow
CSM
Demo of the Cascading Shadow Map.





DepthMap Shadow
DepthMap Shadow
Demo for DepthMap Shadow.





Blurr Shadow
Blurred Shadow
Demo for blurred shadow Map. The map is a orthographic view from above displayed transparently below the scene.




[ return to contents ]

X3D Compliance update

The following nodes are supported by BS Contact and described in the X3D specification.

ViewpointGroup
This node can be used to group viewpoint and activate them with an integreated proximity sensor. The exact specification can be found here.

ColorRGBA
This node defines a set of RGBA colours to be used in the fields of the color node. For more information about this node please take a look into the official color specification.

X3DDamperNode
All node which derivate from the X3DDamperNode are implemented in this BS Contact release. These are the follwoing nodes
For further information please take a look in to the X3D damper specification.

[ return to contents ]

X3D Shader nodes

The following nodes from the X3D Programmable shaders component are implemented:
The shaders are specified in the new shaders MFNode field of the Appearance node.

Demos


ComposedShader
OpenGL Brick ComposedShader
OpenGL Brick ComposedShader using external shader files. (OpenGL Renderer)





Inline ComposedShader
OpenGL Brick ComposedShader using inline shaders
OpenGL Brick ComposedShader using inline shaders. (OpenGL Renderer)





FX PackagedShader
DirectX9 FX PackagedShader
DirectX9 FX PackagedShader. (DirectX Renderer)




[ return to contents ]

GLSL Shader support

In addition to DirectX shader support BS Contact is supporting the GLSL original Shader Proposal using the ShaderAppearance VertexShader and FragmentShader nodes.

Demos

OpenGL HLSL example
3dshaders.com example GLSL shaders


[ return to contents ]

FlashMovieTexture improvement

The node FlashMovieTexture supports now some API for interacting with SWF files. Now you can invoke Flash functions implemented in the Flash movie from inside of BS Contact. The Flash function can return a value to BS Contact.
It is also possible to get from the Flash movie an eventIn to a script inside of BS Contact. If the Flash movie is sending an event BS Contact will trigger.

For security reasons if the FlashPlayer is running inside Internet Explorer it refuses to load content that is not served from the same domain. These examples are working as expected in Firefox or in the standalone BS Contact player.

  
    
MFString set_function At the Flash Movie you can invoke functions with this parameter. The first SFString in set_function is the function call and the second SFString is the return value from the Flash function.
MFString command This eventOut is fired when the Flash movie is sending a command.

Demos


Flash invoke
A Cube with a Flash Movie invoke Firefox or BSContact standalone only
Clicking on the cube moves the yellow circle randomly.





eventIn from Flash
EventIn from Flash command Firefox or BSContact standalone only






Dailymotion HD Video
Dailymotion HD Video Firefox or BSContact standalone only






Flex Flash
Flex Flash Firefox or BSContact standalone only






Youtube video
Youtube video Firefox or BSContact standalone only






Transparent flash video
Transparent flash video Firefox or BSContact standalone only





[ return to contents ]

Scene postprocessing support

The scene postprocessing is usefull to create cinematics effects like Bloom, Glow and other great effects known from the game industry. The PostProcessing node takes an input texture, renders it with a shader to an output texture or to the screen as a full size quad. Several PostProcessing nodes can be chained, they are processed in the order they appear in the scenegraph. It is implemented for the DX9 driver currently. The original input texture can be created by a GroupRenderToTexture node or can be any other CompositeTexture3D or Texture node.
  EXTERNPROTO PostProcessing[
  	exposedField SFVec3f bboxSize
  	exposedField SFVec3f bboxCenter
  	exposedField SFNode metadata
  	exposedField SFBool enabled
  	exposedField MFNode inputTexture
  	exposedField MFNode outputTexture
  	exposedField SFNode outputDepthTexture
  	exposedField MFNode shaders
  	eventIn MFNode addChildren
  	eventIn MFNode removeChildren
  	exposedField MFNode children
  	exposedField MFNode outputChildren
  	exposedField SFNode background
  ]
  ["urn:inet:bitmanagement.de:node:PostProcessing","http://www.bitmanagement.de/vrml/protos/nodes.wrl#PostProcessing","nodes.wrl#PostProcessing"]
  
  EXTERNPROTO GroupRenderToTexture[
  	exposedField SFVec3f bboxSize
  	exposedField SFVec3f bboxCenter
  	exposedField SFNode metadata
  	exposedField SFBool enabled
  	exposedField SFString path
  	exposedField MFNode outputTexture
  	exposedField SFNode outputDepthTexture
  	eventIn MFNode addChildren
  	eventIn MFNode removeChildren
  	exposedField MFNode children
  	exposedField MFNode outputChildren
  	exposedField SFNode background
  ]
  ["urn:inet:bitmanagement.de:node:GroupRenderToTexture","http://www.bitmanagement.de/vrml/protos/nodes.wrl#GroupRenderToTexture","nodes.wrl#GroupRenderToTexture"]
  
  EXTERNPROTO CompositeTexture3D[
  	eventIn MFNode addChildren
  	eventIn MFNode removeChildren
  	exposedField MFNode children
  	exposedField SFInt32 pixelWidth
  	exposedField SFInt32 pixelHeight
  	exposedField SFNode background
  	exposedField SFNode fog
  	exposedField SFNode navigationInfo
  	exposedField SFNode viewpoint
  	exposedField SFBool repeatS
  	exposedField SFBool repeatT
  	exposedField MFString parameter
  	exposedField SFString update
  	exposedField SFNode metadata
  ]
  ["urn:inet:bitmanagement.de:node:CompositeTexture3D","http://www.bitmanagement.de/vrml/protos/nodes.wrl#CompositeTexture3D","nodes.wrl#CompositeTexture3D"]
  
  

Typical example of a scene postprocessing:

1.) Render Scene to Texture FrameTexture
  DEF GROUP_RENDER GroupRenderToTexture 
  {
  	children [
  		# the scene to render 
  		......
  	]
  
  	# scene is rendered to this texture 
  	outputTexture DEF FrameTexture CompositeTexture3D 
  	{ 
  		pixelWidth -1 # take size of initial rendering area as size
  		pixelHeight -1
  	}	
  }
  
2.) process FrameTexture with shader to render on screen
  PostProcessing
  { 
  
  	enabled	TRUE  
  	inputTexture USE FrameTexture	 # bound as texture0 by default 
  	shaders	DEF FrameShader 
  	PackagedShader 
  	{
  		language "HLSL"
  		url "process_dizzy.fx"
  		exposedField SFFloat time 1	# a shader parameter 
  		field SFNode inputTexture USE FrameTexture
  	}
  
  	outputTexture [
  		DEF Output1Texture CompositeTexture3D 
  		{ 
  			pixelWidth -1 		pixelHeight -1
  		}
  	] 
  }
  
3.) just render inputTexture to screen
  PostProcessing
  { 
  	enabled	TRUE  
  	inputTexture USE Output1Texture
  }  
  

Demos


Dizzy postprocessing
Postprocessing with a dizzy deformation






Blur postprocessing
Postprocessing with a horizontal and vertical blur filter






Bloom postprocessing
Postprocessing with a horizontal and vertical bloom filter





[ return to contents ]

MultiAppearance

The node MultiAppearance allows switching between different Appearance node for a single Shapes node. This can be usefull for postprocessing effects.

EXTERNPROTO MultiAppearance[
  	exposedField SFNode metadata
  	exposedField MFString path
  	exposedField MFNode appearances
  ]
  ["urn:inet:bitmanagement.de:node:MultiAppearance","http://www.bitmanagement.de/vrml/protos/nodes.wrl#MultiAppearance"]
  
  
        
MFString path names the render path for the corresonding appearances[] entry
MFNode appearances list of Appearance nodes
MultiAppearance can be used as an Appearance node in the Shape node. The MFNode field appearances contains different Appearance nodes for different render pathes. By default the first apperance from apperances is used for rendering a shape. By using the new SFString field path in GroupRenderToTexture or DrawGroup a path name can be set for rendering the children of these nodes. MultiAppearance is then switching to the apperance node matching the path name.
  MultiAppearance {
    appearances [ 
      Appearance { }  
      Appearance { emissiveColor 1 0 0 } 
      ]
      path["myRenderPath" "myEmissivePath"]
  }
GroupRenderToTexture {
       path "myRenderPath"
       ...
  }
If the path string value is not found in the path MFString field of MultiAppearance the first appearance node is used.

Demos


MultiAppearance
Using MultiAppearance with 3 different materials






[ return to contents ]

Seamless compostion of 3D and HTML in browser

With the new plugin for mozilla browser and the Internet Explorer you can now composite 3D with HTML in your webbrowser without seperating each other. The supported function is named windowless rendering and is supported by BS Contact.

[ return to contents ]

StereoMovieTexture enhancement

The implementation of StereoMovieTexture is now improved to use DirectX9 accelerated YUV to RGB surface conversion. Live streaming is now better supported using custom DirectShow source filters, GRF files or MMS streams. More information is available in the SDK.

Demos


Video player
Using StereoMovieTexture in a Layer3D, use next to switch videos / streams





[ return to contents ]

ImageTextureLOD

ImageTextureLOD is an ImageTexture node with additional fields for supporting thumbnails. The node falls back to show the thumbnailTexture or loadingTexture if the main texture has not yet been loaded. In addition with DirectX9 the loading of texture is done using a separate loader thread.

 
EXTERNPROTO ImageTextureLOD[ 
	exposedField SFBool repeatS
	exposedField SFBool repeatT
	exposedField MFString url
	exposedField SFNode loadingTexture
	eventIn SFBool set_unload
	exposedField MFString parameter
	exposedField SFBool thumbEnabled
	exposedField SFVec2f thumbSize
	exposedField SFNode thumbTexture
	exposedField SFBool showThumb
	eventOut SFBool isLoaded
	eventOut SFVec2f size
	eventOut SFFloat aspect
]
["urn:inet:bitmanagement.de:node:ImageTextureLOD"]

     
SFNode loadingTexture NULL or a TextureNode giving an image during loading.
SFNode thumbTexture NULL or a TextureNode giving the thumbnail version of the image.
SFBool showThumb default TRUE, if TRUE show the thumbnail texture
SFBool thumbEnabled default TRUE, If thumbTexture is NULL and thumbEnabled is TRUE allow the creation of a thumbnail of size thumbSize. This is currently supported for DirectX9 only.
SFVec2f thumbSize default -1,-1,if thumbSize > 0 0, the size for thumbnail generation can be set.
SFBool isLoaded sends TRUE if image has been sucessfully loaded
SFVec2f size reports the originial image size in pixel
SFFloat aspect reports the originial image aspect factor

Demos

Grid of images switching between thumbnail and full version.
[ return to contents ]

ImageTextureMipmapLOD


ImageTextureMipmapLOD
With the new node ImageTextureMipmapLOD you have the posibility to define your own Mipmaping system per object. This can be usefull to save graphic memory and to control the mipmap generation of objects. The texture mipmap levels are created on demand. This means if the user is close enough to load the next level it will be added to the existing mipmap texture. With this technique you can define high resolution user interfaces and textured mipmaped scene objects.


 
EXTERNPROTO ImageTextureMipmapLOD [
  exposedField SFBool repeatS
  exposedField SFBool repeatT
  exposedField MFString url
  exposedField SFVec3f center
  exposedField MFFloat range
  eventOut SFint32 level_changed
  eventOut SFBool isLoaded
  eventOut SFBool isFlipped	
]
["urn:inet:bitmanagement.de:node:ImageTextureMipmapLOD"]
      
SFBool repeatS Enable the flip around the S axis.
SFBool repeatT Enable the flip around the T axis.
MFString url As string noted the seperate mipmaps of the textures used for this object.
SFVec3f center Center of the object for calculating the distance to the camera.
MFFloat range As array noted the toggle distance of the mipmap levels.
SFInt32 level_changed This field is fired if a level of the mipmap is changed. It is sending the changed level.
SFBool isLoaded This field is an eventOut. It is firing when the node is ready with loading all textures but not stored in graphic memeory.
SFBool isFlipped If the texture is flipped this field is sending a TRUE value.
MFString parameter This allows to further specify how the texture data should be processed and used.
[ return to contents ]

Improved Collision Detection

Until now Browser.computeCollision() requires the user to compute the global matrix of an object. This is now simplified using a function called getGobalMatrix(). Additionally, a so-called SFPath (path in scene-graph) object can be generated once and reused for multiple collision detections using vrmlscript.

[ return to contents ]

TextToSpeech

With the new node TextToSpeech the written text will be spoken by BS Contact. The nodes support fields to adjust the voice, speed and volume. Only one voice can be active in a scene independent from the number of TextToSpeach nodes.
EXTERNPROTO TextToSpeech [
	exposedField	SFString	description
	exposedField	SFFloat		pitch
	exposedField	SFBool		enabled
	exposedField	SFFloat		volume
	exposedField	SFFloat		speed
	eventIn		SFString	text
	eventOut	SFBool		isActive
	
]["urn:inet:bitmanagement.de:node:TextToSpeech"]

SFString description A description string of the node. Default: ""
SFFloat pitch The pitch value of the voice. Default: 0
SFBool enabled To enable or disable the voice which should be spoken. Default: TRUE
SFFloat volume The volume of the voice. The range of the volume is 0-100. Default: 100
SFFloat speed Value specifying the speaking rate of the voice. Supported values range from -10 to 10 - values outside this range may be truncated. Default: 0
SFString text This field defines the text which should be used. If the field is triggered the voice will speak the text from the field.
SFBool isActive This field indicates if the voice is curently speaking. There can be only one voice in a scene active.

[ return to contents ]

Miscellaneous

Global sound focus

In Settings->Preferences>Sound TAB there is a a new option for global focus and sticky focus. If enabled Sounds are playing even if the Contact window looses focus.
For an individual Sound2 node one can add this option in the vrml file:

Sound2 {
     parameter ["globalFocus"]
     ...
}
Other parameters are stickyFocus and pitch for enabling pitch support. Otherwise a pitch value != 1.0 has to be set in a AudioClip to enable pitch support for that Sound.

Parsing of X3D MFString values

According to the X3D specification each element in an X3D MFString attribute should be qouted by " ". A warning is now reported if an individual value is not properly qouted. The fallback is to delimit the MFString element by whitespace. Example:

 <FontStyle
    justify='"MIDDLE" "MIDDLE"'
  />
<NavigationInfo type='"WALK" "EXAMINE" "ANY"'/> 

Improved saving of scene to X3D XML encoding

Browser.saveWorld and saveWorld2 are now better supporting XML writing with escaping of special chars and containerField support.

MultiTexture


Diffuse + Specular texture
MultiTexture modes has now support for 3 Arguments for the operation using the DX9 or OpenGL renderer. This allows more flexible operation for specular mapping.

New modes for operations are:
The node multitexture has also a new flag materialSpecular to turn off the default final add of color and specular color. The default value is FALSE
MultiTexture {
  materialSpecular FALSE  # turn off extra final ADD of current specular color
  mode [
    "DIFFUSE_TEXTURE_MODULATE"
    "SPECULAR_TEXTURE_CURRENT_MULTIPLYADD"   # SPECULAR * TEXTURE + CURRENT
  ] 	
}


Depth Bias Sloped
Avoid flicker

To avoid z-buffer flicker BS Contact can shift co-planare objects. With the new DrawOp parameter you can enable this feature. The actual values are highly z-buffer resolution dependent. This technic is only available for DX9 render engine.






render flip
Render flip

Sometimes it is useful to flip a whole szene. This is possible with the new rendermethod which you can set with Browser.setOption(...).




 
      
'rendermethod','flip' Enable the render flip of the scene.
'rendermethod:flipx','true' Enable the flip around the x axis.
'rendermethod:flipy','true' Enable the flip around the y axis.
For more Information about Browser.setOption please take a look in the SDK.

BufferTexture


c++ COM snippet

In this release Bitmanagement added the new node BufferTexture to BS Contact 7.2. This node has the ability to receive Video images without interrupting the render loop of BS Contact. This node is reasonable for a COM application.



 
  EXTERNPROTO BufferTexture[
		exposedField SFBool repeatS
		exposedField SFBool repeatT
		exposedField SFString format
		exposedField SFInt32 pixelWidth
		exposedField SFInt32 pixelHeight
		exposedField SFInt32 levels
		exposedField MFString parameter
		eventIn SFBool set_unload
		eventIn SFInt32 set_lod
		eventOut SFBool isLoaded
		eventOut SFBool isFlipped
		exposedField SFNode metadata
		]
["urn:inet:bitmanagement.de:node:BufferTexture","http://www.bitmanagement.de/vrml/protos/nodes.wrl#BufferTexture","nodes.wrl#BufferTexture"]
This node is similar to the other texture nodes of X3D and BS Contact. Below are some hints for the usage of this node.

      
      
format format corresponds to the DirectX 9 SDK D3DFORMAT enumeration.
Please check with the DXCAPSVIEWER of the availability of formats.
parameter The parameter "animated" is important to create a direct Video Memory surface, otherwise an "managed" surface is created.
For more information about the parameter field please take a look at the SDK.
COM Interface The BufferTexture node supports the extra interface
[
object,
uuid(49FE19F3-E269-46ce-A9AF-E701ECC088EE),
dual,
nonextensible,
helpstring("IBufferTexture-Interface"),
pointer_default(unique)
]
interface IBufferTexture : IDispatch
{

HRESULT setFormat([in] int width,[in] int height,[in] int levels, [in] int format,[in] int options);

// returns current texture format (D3DFMT enum type)
HRESULT getFormat([out] int *width,[out] int* height,[out] int* levels, [out] int *format);

// get status, E_POINTER if no texture yet created
HRESULT getStatus([out] int *status);

// copy texture data in exact native format returned by getFormat
HRESULT setTexture([in] int level,[in] int cnt,[in,size_is(cnt)] unsigned small int * pixels,[in] int stride);

// generic possibly slower version , with format conversion in DX9
HRESULT setTextureEx([in] int width,[in] int height,[in] int level,[in] int format,[in] int cnt,[in,size_is(cnt)] unsigned small int * pixels,[in] int stride);

// get directly the IDirect3DTexture9 interface
HRESULT getTextureHandle([out] IUnknown **value);
};

DrawGroup Extension

 
      
SFBool delayed default : FALSE render DrawGroup delayed as transparent object after normal scene.
SFBool restoreOp default : FALSE , if TRUE automatically restores DrawOp value after children has been traversed.

RayHitInfo extension

The RayHitInfo node has new fields for more hit information about the object. This node is returned by computeRayHit and mouseSelect.

 
      
SFColor hitColor Interpolated vertex color at intersection.
MFVec3f hitMultiTexCoord Interpolated (multi) texCoord at intersection.
SFVec3f hitFaceNormalLocal Face normal in local coordinates

New Parameter for textures

 
      
compress Forces commpression to DXT1 for RGB or DXT5 for RGBA textures, ignored if animated.

[ return to contents ]

Download of BS Contact 7.2

You can download the latest version of the BS Contact 7.2 installer in the download center.
Beta versions are available here.

[ return to contents ]

Further Information

Previous Releases

ISO Specifications

2003 - 2013 Bitmanagement Software - All rights reserved.