VMD 1.9.3 Interactive GPU Ray Tracing Notes
angle-modulated transparency, rendered with the new GPU-accelerated
TachyonL-OptiX parallel ray tracing engine built-into VMD
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 361 series drivers or newer are required for the latest Pascal GPUs. Older GPUs (e.g. Fermi and older) are no longer supported. 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 50, 60, 70 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.:
VMDOPTIXDEVICEMASK=0x1 export VMDOPTIXDEVICEMASK or 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" EndSection