The Visualization Toolkit (VTK) development team is happy to announce the eighth major release of VTK. For the source, data, and documentation packages, please visit VTK’s website. Take a look at the VTK wiki for a complete list of API changes in v8.0.0 over the previous version.
The big news this time and the reason for the major version bump is the introduction of VTK-m which provides filters that run on GPUs and many-core processors. The VTK-m interface replaces the earlier Piston and Dax interfaces as VTK-m has subsumed them. As of VTK 8.0, there are new filters that average values to cells and points; remove duplicate points; perform clip, contour, and threshold operations; extract external polygonal meshes; and compute gradients and levels of detail. In tandem with this change is a new dependence on C++11 capable compilers as VTK now allows for and relies upon on a selection of C++11 features. VTK’s minimum supported compiler versions are GCC 4.8, Clang 3.3, XCode 5.0 and MSVC 2013. See The VTK Software Process document for a fuller description of the language level changes.
As usual, there are a wealth of improvements and fixes, large and small, across the board.
Regarding filters outside of vtk-m, there were many updates. There is the new vtkLagrangianParticleTracker for example, which is more configurable than the existing trace options and natively supports particle re-seeding and surface interaction. We’ve promoted vtkAppendArcLength from ParaView to VTK. This makes an “arc_length” point array with the length of the polyline from point 0 for each point. It can be used, for instance, to place equally spaced glyphs along a streamline. Point cloud processing received significant capability with filters that densify point clouds, compute density gradients and signed distance functions from them, and extract points within volume occupancy masks. We have also updated VTK to ensure that 6 component symmetric tensors are supported across the toolkit. In a related development, SignedTensor is a new remote module that provides glyphs for the visualization of signed second rank tensors. vtkCookieCutter is a new algorithm that allows cutting planar surfaces in VTK with one or more closed loops i.e. planar stencil surfaces. The new QVTKOpenGLWidget leverages Qt’s new OpenGL context creation mechanism and is meant to be a replacement for QVTKWidget for Qt5. Note that as of release time there are unresolved transparency related bugs that show up with this new Qt5 enabling class on some platforms.
In the general area of compilation and platform support note that 10.7 is now our minimum supported MacOS version. Also, debug library suffixes were corrected for Windows. Retina display support has been improved with some work in progress to fix remaining issues for higher resolution displays. On iOS, actor and object picking was fixed. Cross compilation can now leverage a cross compiling emulator as when building with dockross-manylinux-x64.
VTK’s charts and plots (a.k.a. vtkContext2D) gained the ability to draw vtkPolyData and an improved ability to export to PDF file format. On the web front, vtkWeb gained support for Python 3 by updating our Twisted thirdparty library version. On the client side we added an exporter from vtkWeb that outputs scenes for client side rendering via vtk.js.
In the area of IO, VTK’s use of stat was revised specifically to windows users to open files larger than 4GB. Similarly VTK’s native XML readers were updated to access larger files and to remove a hardcoded limit on the number of readable timesteps. VTK’s thirdparty expat, hdf5 and netcdf had significant updates. MPI-enabled hdf5 is now better supported and netcdfcpp was unbundled from the rest of VTK’s netcdf. There have been a wealth of updates to the OpenFOAM reader courtesy of ESI-OpenCFD (www.openfoam.com). They improved support for 32-bit and 64-bit binary formats and coverage of Lagrangian formats, made it possible to skip the initial conditions directory and thus many of the parsing problems associated with input dictionaries, and made it so that OpenFOAM’s embedded code blocks (used for dynamic coding) are now gracefully skipped by the reader. In other changes VTK gained a new native reader for GE and LANL’s hdf5 based Truchas simulation data files. Lastly the CAM NetCDF reader can now read interface layer attributes.
Rendering was the major focus of the 7.x cycle but it will of course continue to receive updates in 8. VTK now has a Vertex Buffer Object cache which allows VBOs to be reused more often, shared and updated more quickly. Our interface to OSPRay was updated to be compatible with version 1.3 and received fixes for shadow noise, point and edge coloring and surface with edges mode. In terms of Volume Rendering we now have support for GPU volume texture streaming from fixed partition sets and a brand new vtkMultiBlockVolumeMapper which correctly draws non-overlapping vtkImageData nodes within multiblock data sets. Lastly VTK’s dual depth peeling pass gained the ability to intermix translucent surface and volume data.
VTK’s support for external rendering systems and immersive virtual reality environments, first introduced in 7.1, received notable fixes and improvements as well. Volume rendering within HTC Vive using the vtkRenderingExternal module was fixed by setting the initial position of the camera in vtkExternalOpenGLRenderer to the coordinate origin. For VR systems using OpenVR, bugs related to an incorrect viewport size were corrected by ensuring that the window size, and left and right framebuffer sizes agree. Interaction also improved with the addition of fourth (ApplicationMenu) and fifth (Unassigned) customizable buttons and by linking the OpenVR grip button to the middle mouse button events.
VTK 8.0 is brought to you by the efforts of at least 79 developers who made 1017 commits over the last eight months. This is not including our upstream libraries’ authors and the infrastructure work that went on behind the scenes. We’d like to thank all of the authors, bug reporters, and feature requesters. A special shout out goes to those who tested the release candidates and fixed the items found in them. The next release, 8.1 is expected to be released in the Fall. It will have more GPU capable filters from updates to vtk-m.