ParaView/Users Guide/CAVE Display

From KitwarePublic
< ParaView
Revision as of 13:18, 28 December 2011 by Nikhil (Talk | contribs)

Jump to: navigation, search

Introduction

  • ParaView has basic support for visualization in CAVE-like/VR or Virtual Environments (VE).
  • Like typical computing systems VE's consists of peripheral displays (output) and input devices. However unlike regular systems, VE's keep track of the physical location of their IO devices with respect to ab assumed base coordinates in the physical room (room coordinates).
  • Typically VE's consists of multiple stereoscopic displays that are configured based on the room coordinates. These base coordinates also typically serve as the reference coordinate for tracked inputs commonly found in VE's.
  • VR support in ParaView includes the ability to configure displays (CAVE/Tiled Walls etc) and the ability to configure and use inputs from VRPN and VRUI servers.
  • ParaView can operate in a Client / Server fashion. The VR/CAVE module leverage this by assigning different processes on the server to manage different displays. Displays are thus configured on the server side by passing a *.pvx configuration XML file during start-up.
  • The client acts as a central point of control. It can initiate the scene (visualization pipeline) and also relay tracked interactions to each server process managing the displays. The VR plugin on the client side enables this. Device and interaction style configurations are brought in through the ParaView state file (This will also have a GUI component in the near future).

Prerequisites

  • VRPN needs to be installed on the client side.
  • MPI needs to be installed on the server side.
  • Make sure to enable BUILD_SHARED_LIB, PARAVIEW_USE_MPI and PARAVIEW_BUILD_PLUGIN_VRPNPlugin when building for CAVE support.
  • Consequently, VRPN_INCLUDE_DIR and VRPN_LIBRARY should also be set.

Structure of Config File

<?xml version="1.0" ?>
<pvx>
  <Process Type="server|dataserver|renderserver">
    <!-- 
      The only supported Type values are "server", "dataserver" or "renderserver".
      This controls which executable this configuration is applicable to.
      There can be multiple <Process /> elements in the same pvx file.
      ------------------------------------------------------
      |  Executable     | Applicable Process Type          |
      |  pvserver       | server, dataserver, renderserver |
      |  pvrenderserver | server, renderserver             |
      |  pvdataserver   | server, dataserver               |
      ------------------------------------------------------
     -->
    <Machine name="hostname"
             Environment="DISPLAY=m1:0"
             LowerLeft="-1.0 -1.0 -1.0"
             LowerRight="1.0 -1.0 -1.0"
             UpperRight="1.0  1.0 -1.0">
      <!--
         There can be multiple <Machine> elements in a <Process> element, 
         each one identifying the configuration for a process. 
         All attributes are optional.
         name="hostname"
         Environment: the environment for the process.
         LowerLeft|LowerRight|UpperRight 
       -->
    </Machine>
  </Process>
</pvx>

Example Config

  • The following example is for a six sided cave with origin at (0,0,0):
<?xml version="1.0" ?>
<pvx>
 <Process Type="client" />
 <Process Type="server">
  <Machine Name="Front"
           Environment="DISPLAY=:0"
           LowerLeft=" -1 -1 -1"
           LowerRight=" 1 -1 -1"
           UpperRight=" 1  1 -1" />
  <Machine Name="Right"
           Environment="DISPLAY=:0"
           LowerLeft="  1 -1 -1"
           LowerRight=" 1 -1  1"
           UpperRight=" 1  1  1" />
  <Machine Name="Left"
           Environment="DISPLAY=:0"
           LowerLeft=" -1 -1  1"
           LowerRight="-1 -1 -1"
           UpperRight="-1  1 -1"/>
  <Machine Name="Top"
           Environment="DISPLAY=:0"
           LowerLeft=" -1  1 -1"
           LowerRight=" 1  1 -1"
           UpperRight=" 1  1  1"/>
  <Machine Name="Bottom"
           Environment="DISPLAY=:0"
           LowerLeft=" -1 -1  1"
           LowerRight=" 1 -1  1"
           UpperRight=" 1 -1 -1"/>
  <Machine Name="Back"
           Environment="DISPLAY=:0"
           LowerLeft="  1 -1  1"
           LowerRight="-1 -1  1"
           UpperRight="-1  1  1"/>
  </Process>
</pvx>
  • A sample PVX is provided in ParaView/Documentation/cave.pvx. This can be used to play with different display configurations.

Things to Keep in Mind

  • PVX file should be specified as the last command line argument for any of the server processes.
  • The PVX file is typically specified for all the executables whose environment is being changed using the PVX file. In case of data-server/render-server configuration, if you are setting up the environment for the two processes groups, then the PVX file must be passed as a command line option to both the executables: pvdataserver and pvrenderserver.
  • When running in parallel the file is read on all nodes, hence it must be present on all nodes.

Basic Steps for a Successful Setup

  • On a terminal run the server (6 processes each driving one display in the cave. Change the number of process according to the number of displays).
 # PV_ICET_WINDOW_BORDERS=1 mpiexec -np 6 ./pvserver  /path/to/ConfigFile.pvx

Note: PV_ICET_WINDOW_BORDERS=1 disables the full-screen mode and instead opens up a 400x400 window. Remove this environment variable to work in full-screen mode.

  • Open another terminal to run the client. (note: this client connects to the server which open up 6 windows according to the config given in cave.pvx). Change the stereo-type according to preference (see # ./paraview --help).
 # ./paraview --stereo --stereo-type=Anaglyph --server=localhost --vrpn --vrpn-address=Tracker0@localhost
  • Connect the client to the server.
  • Enable the VRPN Plugin on the client.