BS Contact Stereo 7.2 supports different stereo rendering modes. Stereo (also often referred to as "3D") requires presenting separate images with the right perspective for the left and right eye. Some types of Multiview autosteroscopic displays are requiring even more views.
Red-Blue stereo can be activated in BS Contact VRML/X3D's right mouse menu Settings > Stereo > Red-Blue.
In BS Contact Stereo there are different modes on how to output the separate view images:
This requires a professional Graphics card with hardware OpenGL Stereo Support (i.e. NVidia Quadro, 3D Labs, ATI-Fire GL, NVStereo Driver).
In the driver's control panel opengl settings OpenGL stereo support must be enabled. Here is an example configuration dialog for an Nvidia Quadro XGL card (in German).
In the Contact preferences the OpenGL driver must be selected, in the Contact OpenGL Settings dialog "Stereo" must be enabled in order to search for an stereo capable display format.
The player must be restarted if this option is changed, and now the option Settings ->Stereo -> Hardware is available.
If a stereo Open GL format is initialized Contact renders two times for the left and right buffer. In the Settings->Stereo -> Hardware (Quad Buffered) Menu must be enabled. This is automatically enabled If a stereo GL format is found and initialized at the next start.
Beside the stereo capable Open GL board an Monitor with a high refresh rate (100-160 HZ) and active Shutter Glasses (Like the Stereographics or ELSA Revelator glasses) connected to the Video Output / or stereo connector output. Alternatives are an HMD or stereo capable projectors. Another option are splitter boxes separating the stereo video signal into left-right separate signals for passive stereo projection. /p>
This method displays the scene in the same frame with Red for the left eye, blue for the right. It requires RED-BLUE glasses. It works best with objects displayed in wire frame.
This method displays the scene two times with split viewports. The viewing setup requires a dual output graphics cards, 2 stacked projectors with polarization filters and polarization glasses. The driver (e.g. NVidia NView need to configured to provide one continuous desktop over the two monitor outputs). Contact in full screen mode then covers both displays. This modes work with the Contact OpenGL and DirectX9 renderes. It is important to properly configure the NVidia NView driver to an horizonal span mode. It will not work with 2 graphics outputs configured as separate displays or clone mode.
This method is intended to use with the SpatialView 5 View multiview stereoscopic displays. 5 Views are interleaved in one output image. It requires multitexturing support in OpenGL or DirectX9. Stereo separation can be changed with the Stereo Options dialog box (F6).
This method is intended to use with the
techXpert multiview autostereoscopic displays. It
requires multitexturing support in OpenGL or DirectX9. Stereo separation
can be changed with the Stereo Options dialog box (F6).
This method is intended to use with Tridelity multiview autostereoscopic displays. It requires multitexturing support in OpenGL or DirectX9.
This method is intended to use with the Opticality auto stereoscopic displays. Depending on the type of the installed display up to 8 images are interleaved in one output image. It requires the BS Contact Stereo to run in the OpenGL mode and multitexturing support in OpenGL. The X3D Display Manger need to be installed. Stereo separation can be changed with the Stereo Options dialog box (F6).
Some settings can be tweaked using registry settings:
OpticalityDisplay.viewResolutionX, Default 1.0, a factor for
the internal render resolution, use 0.5 for higher rendering speed but lower
quality OpticalityDisplay.viewResolutionY, Default 1.0,
similar to viewResolutionX but for the height dimension OpticalityDisplay.autoDepth
boolean 0 or 1, Default 0: if enabled does Z-Buffer analysis for depth value
computation (slower rendering)
This mode will not work if the X3D Display Manager software is not properly
installed and working, here is an example screen shot of the
interleaved 3D image.
This method is intended to use with Philips 3D TV's. It requires OpenGL driver and outputs an image with a depth image in side by side format. The depth range must be manualy optimized using a good Viewpoint and NavigationInfo setting. The window must be maximized, so that the Displays switches to 3D mode.
This method is intended to use with the SeeReal auto stereoscopic LCD Monitor. The two images are interleaved vertically in one output image. It requires the Contact Open GL Driver and stencil buffer support. The screen resolution must match the physical resolution of the monitor.
The SeeReal display can also be driven by using the Contact Open GL Hardware Stereo mode, and setting the "vertical interlaced monitor" stereo format in the Display Settings of the graphics Driver (e.g. Nvidia Quadro ).
This method is intended to use with the
LG M4210D-B21 - 42" class LCD Widescreen Full HD Monitor with 3D multiview
autostereoscopic display.
This
method is intended to use with the
3D DLP HDTVs displays.
This method is intended to use with the
Alioscopy multiview autostereoscopic displays.
This mode uses DirectX9, the modulation colors for the left and right view and a
gamma factor can be specified. In OpenGL multitexturing is used.
This method is intended to use with iZ3D Monitor. It requires DirectX driver and outputs an image
with a depth image in side by side format. The window must be maximized over both screen, so that the Displays switches to 3D mode.
Experimental flipping between left and right frame at a given interval over
time.
Vertical or horizontal colum or row interleaving.
The stereo options can be configured in the following ways
In the registry under the key HKEY_CURRENT_USER\Software\Bitmanagement Software\bsContact the following options can be reconfigured:
General.stereoSeparation <float> - set eye separation default value
General.stereoMode <mode> - type of stereo mode to use
General.renderer <renderer> - type of renderer to use
Stereo.viewResolutionX <float> - width factor for the pixel size of the
rendering buffers, default 1.0, 0.5 means render at half resolution
Stereo.viewResolutionY <float> - height factor for the pixel size of the
rendering buffers, default 1.0
Stereo.enabledPath <bitmask>
bit mask for enabling/disabling specific drawing pathes, -1 uses all pathes, 1
would only render the first view.
Stereo.flipInterval <float> time in seconds for flipping in Flip frames mode
Stereo.leftColor <float> <float> <float> Left
modulation color for anaglyph mode, default: 1.0 0.0 0.0
Stereo.rightColor <float> <float> <float> Right
modulation color for anaglyph mode, default: 0.0 1.0 1.0
Stereo.gamma <float> gamma factor for anaglyph mode, default
1.0
During run-time some stereo options can be set using Browser.setOption(option,value) method:
stereo <bool> enable/disable stereo rendering
stereoSeparation <float>
stereoVertSeparation <float>
stereoFocalDistance <float>
stereoLeftColor <float> <float> <float>
stereoRightColor <float> <float> <float> Right
modulation color for anaglyph mode, default: 0.0 1.0 1.0
stereoGamma <float> gamma factor for anaglyph mode, default
1.0
stereoFlipInterval <float> time in seconds for flipping in Flip frames
mode
stereoViewResolution <float> <float> - factor for the
pixel size of the rendering buffers, default 1.0 1.0
stereoMode <mode>
Where mode is one off
MONO QUAD SPLIT-HORIZONTAL SPLIT-VERTICAL RED-BLUE SEEREAL FLIP INTERLACED-VERTICAL INTERLACED-HORIZONTAL OPTICALITY-DISPLAY SHARP3D SVI-5-VIEW SVI-5-VIEW-32 PHILIPS-IMAGE-DEPTH TECHXPERT-5-VIEW TECHXPERT TRIDELITY-5-VIEW ANAGLYPH RED-BLUE_MT MONO-TEXTURE SEEREAL_MT IMAGE-DEPTH ALIOSCOPY-8-VIEW LG-5-VIEW DLP-3D INTERLEAVED
setOption parameters can also be set in the 3D scene using the WorldInfo node:
WorldInfo { title "Stereo Test" info [ # Extra Contact hints : "options:stereoMode=RED-BLUE,stereoSeparation=0.06" ] }
The options can be queried using the getOption method:
print('stereo:'+Browser.getOption('stereo')); print('stereoMode:'+Browser.getOption('stereoMode')); print('stereoSeparation:'+Browser.getOption('stereoSeparation')); print('stereoVertSeparation:'+Browser.getOption('stereoVertSeparation')); print('stereoFocalDistance:'+Browser.getOption('stereoFocalDistance')); // only if stereo enabled : print('stereoViewResolution:'+Browser.getOption('stereoViewResolution')); print('stereoLeftColor:'+Browser.getOption('stereoLeftColor')); print('stereoRightColor:'+Browser.getOption('stereoRightColor')); print('stereoGamma:'+Browser.getOption('stereoGamma')); print('stereoNumViews:'+Browser.getOption('stereoNumViews'));
The following keys are useful to adjust the stereo view for comfortable viewing:
SHIFT- SHIFT+ on keypad, changes the stereo separation (distance between eyes)
CTRL-SHIFT - CTRL-SHIFT + on keypad, changes the focal distance ( distance
viewer position, position, target (where the eyes are focusing in a point))
CTRL - CTRL + on the keypad, changes the field of view.
CTRL-F3 and clicking with the mouse on geometry in 3D sets the focal distance (plane of zero parallax) to the current distance from the viewer to the object. This allows to quickly adpat the stereo focus.
Another option is the Contact Control Pad available via the F6 Key. In the stereo tab the eye separation and focal distance can be edited.The eye separation can be set negative in order exchange left and right views.
The ViewVolume node (see SDK) can be used to specify the projection parameters in more detail, compared to the Viewpoint node.
The values for stereoSeparation and focalDistance are heavily depending on the scene dimensions. The standard VRML unit is meters, corresponding to the default eye distance of 6cm.
The Save button save the current value of Eye >Separation and Focal Distance to an url file in the Contact Cache directory. This settings are reloaded the next time this file or url is loaded.
Certain Stereo Modes have OpenGL requirements, e.g. SeeReal mode needs an OpenGL stencil buffer, Hardware Stereo need an OpenGL stereo context. If the requirements are currently not given after switching to a stereo mode, one can reload the scene to have Contact adapt the OpenGL renderer settings automatically. For using NVidia Stereo Consumer Driver supplied stereo modes one usually have to turn off Contacts's stereo rendering modes.
BS Contact 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 StereoTexture node, specifying separate left and right ImageTextures in the texture field. For viewing stereo images directly the stereoSeparation should be set to 0.
The StereoTexture node supports the following image layout modes:
EXTERNPROTO StereoTexture[ exposedField SFString type exposedField MFNode texture ] [ "urn:inet:bitmanagement.de:node:StereoTexture", "http://www.bitmanagement.de/vrml/protos/nodes.wrl#StereoTexture", ]The texture field contains one or more Texture Nodes. ie. ImageTexture, PixelTexture or MovieTexture. The type field indicated the type of stereoImage.
The following types are supported for image layout modes:
Mode name | Image Layout |
MONO | 1 image, same for left and right rendering path |
LEFT-RIGHT | 2 separate images |
RIGHT-LEFT | same as LEFT-RIGHT but left and right image are exchanged |
SPLIT-HORIZONTAL | Left and right image in one side by side |
SPLIT-HORIZONTAL-FLIP | same as SPLIT-HORIZONTAL but left and right image are exchanged |
SPLIT-VERTICAL | Left and right image in one above below |
SPLIT-VERTICAL-FLIP | |
TILED-3x3 | image contains 3*3 views from left most to right most, for multiview displays |
N-VIEWS | the texture field contains multiple texture nodes, for a multiview stereo mode, each image in turn is used for the specific multiview rendering path |
The StereoMovieTexture node allows to use Stereo Movies availabe as separate files for the left and right eye or as side-by-side. The node is optimized for DirectX9 using a custom DirectShow Renderer. For best performance MPEG2 encoded material in side-by-side (SPLIT-HORIZONTAL) or above-below (SPLIT-VERTICAL) format is recommended.
EXTERNPROTO StereoMovieTexture[ exposedField SFString type exposedField SFBool loop exposedField SFFloat speed exposedField MFString url exposedField MFString rightUrl exposedField SFTime startTime exposedField SFTime stopTime exposedField SFBool repeatS exposedField SFBool repeatT eventIn SFBool set_pause eventOut SFTime duration eventOut SFBool isActive eventOut SFTime mediaTime eventOut SFVec2f imageSize eventOut SFFloat imageAspect exposedField SFBool scaleImage exposedField MFString parameter ] ["urn:inet:bitmanagement.de:node:StereoMovieTexture","http://www.bitmanagement.de/vrml/protos/nodes.wrl#StereoMovieTexture","nodes.wrl#StereoMovieTexture"]
Example: separate video streams for left and right channel
DEF STEREOMOVIE StereoMovieTexture { type "LEFT-RIGHT" url "left.avi" rightUrl "right.avi" loop TRUE startTime 0 repeatS FALSE repeatT FALSE parameter "subtexture" }
Example: Side-By-Side in one Video
DEF STEREOMOVIE StereoMovieTexture { type "SPLIT-HORIZONTAL" repeatS FALSE repeatT FALSE url "Movie_SBS.mpg" loop TRUE startTime 0 stopTime -1 parameter "subtexture" }
When using the Contact OpenGL driver stereo videos in 1 stream (e.g.Side-by-Side ) can be displayed using the StereoTexture node.
Example: Side-By-Side in one video using StereoTexture
WorldInfo { title "Stereo Test" info [ # Extra contact hints : # image already have stereo seperation "options:stereoSeparation=0.0,relativeTime=true,wwwProgress=true" ] } Viewpoint { description "Default" position 0.000 0 2.0 orientation 1 0 0 0 fieldOfView 0.844 } NavigationInfo { type ["SLIDE", "ANY"] } Shape { appearance Appearance { texture StereoTexture { type "SPLIT-HORIZONTAL" texture [ DEF MOVIE MovieTexture { parameter [ "SUBTEXTURE" ] repeatS FALSE repeatT FALSE url [ "dampflok 1 (512).avi" ] loop TRUE startTime 0 stopTime -1 } ] } } geometry # Aspect Ratio factor of image is 1.25 Rectangle { size 2.5 2 } }
The stereoSeparation is set to 0, because the video already contains separate views.
StereoMovieTexture supports capturing from Direct Show camera devices. The capture device can be configured in the Stereo Control Pad. Two exact equals cameras are required.
Example: Stereo Video Capture with the currently configured device
DEF STEREOMOVIE StereoMovieTexture { type "LEFT-RIGHT" repeatS FALSE repeatT FALSE url "stereocapture:Default" startTime 0 stopTime -1 parameter "subtexture" # avoid Power of 2 scaling # optional : custom transformation of the images : textureTransform [ TextureTransform { translation 0.0 0.0 } TextureTransform { translation 0.0 0.0 } ] }
The stand-alone BSContact.exe can load Side-By-Side, Left-Right and JPS files directly and a 3D scene is generated automatically to view the stereo image or movie including panning and zooming functionality.
An stereo image can be opened via the menuFile->Open Stereo Image.
The following suffix at the file name are recognized. _L. _R. _Left. _Right.
LEFT-RIGHT format is assumed.
jps, pns bms are JPG, PNG, BMP files in side by side format.
Once an image has been loaded the Page-Up, Page-Down keys can be used.
The node TiledImageTextures allows the use of high-resolution image material.
To improve qualtiy Mip-Mapping and Anti-Aliasing might be enabled in the Contact settings. To allow the loading of large images with the ImageTexture node the setting Performance - max texture size should be increased e.g. to 2048 or 4096 if the graphics card can handle these sizes properly.
Test Example configured to use RED-BLUE
StereoTexture test in RED-BLUE
Infos
Projectors (Stereo)
Barco VR
Barco Infitec Stereo projection
Glasses Free Displays
Workstation Graphicscards
Misc