Performance with remote rendering depends primarily on two factors: rendering speed on the remote server machine and the available network bandwidth.
Rendering speed on the remote machine depends on the same things it would depend on if you were sitting at that machine, including CPU speed and graphics performance. In addition, it depends on whether rendering to an off-screen buffer can be accelerated (done in hardware) and whether there is enough accelerated off-screen buffer memory available.
Network bandwidth is usually the real limiting factor because RGB images are being transmitted and they can be quite large. For example, the image of a 640 by 480 window requires almost one million bytes of data (uncompressed). Here are some general guidelines for improving performance with remote rendering:
Use a fast network and fast network interface cards in all the machines involved.
Use a smaller window. For example, the image of a 320 by 240 window requires less than three hundred thousand bytes (uncompressed).
Use image compression.
If you are using an X server on the local machine, this is not currently an option. However VNC does it automatically. |
Although standard VNC does image compression, its algorithms are optimized for non-graphical applications. You may get better performance using a version of VNC (for example Tridia) that supports zlib compression. Also there is on-going work in the VNC open source community to integrate different image compression algorithms, for example JPEG. See the links on the VNC web site for the latest information. Other commercial remote viewing products, like ThinAnywhere™, also do very efficient image compression.
Use lower resolution rendering.
If you are using VNC on the local machine, this is not currently an option. However it is an effective technique if the local machine supports OpenGL texture mapping and has an X server that supports the GLX extension, e.g., Exceed3D™. |
The basic idea is to reduce the bandwidth requirement by sending a smaller image across the network. For example, an image that is 70% of the full window size contains approximately half as many pixels as the full image, allowing almost twice the frame rate (if we are bandwidth limited). There are no down scaling artifacts because Open Inventor renders at the smaller image size on the remote machine. Then the image is stretched to the actual window size on the local machine using linear interpolation (OpenGL texture mapping) on the local machine’s graphics board. Increasing or decreasing the image size (as a percentage of the actual window size) allows the user or application to trade image quality for performance. There are three environment variables that control “low res” rendering:
OIV_LOWRESRENDER If this variable is defined and the target display (local machine) supports OpenGL, then low resolution rendering is enabled. No change to the application is required.
OIV_LOWRESHIGHPERCENT This variable specifies the rendered image size as a percentage of the actual window size in the normal case. The default is 1.0 (full size).
OIV_LOWRESLOWPERCENT This variable specifies the rendered image size as a percentage of the actual window size when the Open Inventor viewer is in “Move as Low-Res” mode. The default is 0.7 (70 percent).