VMD molecular scenes with ambient occlusion lighting, shadows, and
angle-modulated transparency, rendered with the new GPU-accelerated
TachyonL-OptiX parallel ray tracing engine built-into VMD
VMD includes a new built-in GPU-accelerated version of the Tachyon ray tracing engine, using NVIDIA CUDA and OptiX to achieve performance levels up to six times faster than the existing CPU versions of Tachyon. The new renderer is labelled "TachyonL-OptiX" in the VMD renderer window, and it supports the vast majority of Tachyon rendering features, with emphasis on ambient occlusion lighting, shadows, depth-of-field, high quality transparent surface rendering, and parallel rendering.

VMD molecular scene with depth-of-field focal blur,
ambient occlusion lighting, and shadows, rendered with the
interactive TachyonL-OptiX GPU ray tracing engine built-into VMD

The speed of the new GPU-accelerated ray tracing feature allows VMD users to interactively visualize moderate size molecular complexes containing a few million atoms with shadows, ambient occlusion, and on fast GPUs, even the depth-of-field focal blur effect can be rendered in real-time. The new interactive ray tracing feature uses a progressive refinement approach to allow users to manipulate the view using the mouse, and once the mouse is released, the interactive ray tracing engine refines the image with monte carlo sampling of lighting, focal blur, and so on. The interactive ray tracing engine allows multiple views to be saved at any time, as well as the default behavior of saving the final image shown when the user exits the viewer. Future versions of VMD will more closely integrate interactive ray tracing, enabling interactive ray tracing in the main VMD window, as an alternative to the traditional OpenGL-based visualization engine in VMD.

VMD GPU Ray Tracing Hardware and Software Requirements

  • VMD GPU-accelerated ray tracing requires NVIDIA GPUs that support CUDA.
  • NVIDIA 343 series drivers or newer are REQUIRED for the latest Maxwell GPUs. Older GPUs (e.g. Fermi) should work with driver version 340 or later. On systems with drivers that are too old, VMD will not recognize the GPUs, and/or will emit warning messages indicating that an out-of-date driver was detected, or the GPU ray tracer may fail at runtime.
  • GPU memory capacity and out of memory errors. GPU-accelerated ray tracing has a significant GPU memory requirement, unlike OpenGL rasterization. Best results will be obtained when using GPUs that have several gigabytes of memory. By default, VMD will use all of the available GPUs to accelerate GPU ray tracing, but a side effect of this is that it will be limited by the GPU with the least amount of on-board memory.
    • We recommend using GPUs with 3GB or more of memory for best results. The Quadro K5000, K6000, 6000, 7000, and the Tesla K20, K40, and K80, and the GeForce GTX 5[789]0, 6[78]0, 7[78]0 Ti, and GeForce GTX Titan series GPUs are ideal for accelerating ray tracing. These GPUs contian between 2GB and 12GB of on-board memory, often enough for fairly large QuickSurf renderings of molecular systems containing millions of atoms.
    • GPUs with less on-board memory can often be used, albeit at a reduced level of performance, by forcing VMD to use a less memory-intensive ray tracing acceleration structure. This can be done by setting the VMD environment variable "VMDOPTIXBUILDER" to the value "MedianBvh" at runtime. This can be done in a VMD script at runtime prior to rendering, e.g.:
        set env(VMDOPTIXBUILDER) "MedianBvh"
    • In cases where a host machine contains several GPUs, but some contain much less on-board GPU memory than the others, it is possible to direct VMD to use only a subset of the available GPUs for accelerating GPU ray tracing. This is accomplished through the use of hexadecimal flags to limit the set of GPUs VMD will use, through the "VMDOPTIXDEVICEMASK" environment variable, which must be set prior to launching VMD, e.g.:
        setenv VMDOPTIXDEVICEMASK 0x1
  • GPU kernel timeouts. GPUs that have an attached display will by default have a watchdog timer set in the NVIDIA kernel driver. If the GPU is busy for more than about 1 second, the long-running GPU kernel will be terminated. When rendering at very high resolution, or for very complex VMD scenes (those with a lot of transparent surfaces, reflections, or other properties that make them a challenging ray tracing subject), GPU kernel timeouts could potentially become a problem.
    • GPU timeouts can be avoided by changing the VMD antialiasing settings to use a smaller ambient occlusion (AO) count.
    • GPU timeouts can be disabled in the Linux display driver by adding the driver option "Interactive" and setting the value to false, as shown below:
      Section "Device"
          Identifier     "Device0"
          Driver         "nvidia"
          VendorName     "NVIDIA Corporation"
          BoardName      "Quadro K6000"
          BusID          "PCI:4:0:0"
          Option         "Stereo"  "4"
          Option         "ForceStereoFlipping" "true"
          # prevent OptiX timeouts
          Option "Interactive" "false"