VTK 8.1.0

The VTK development team is pleased to introduce VTK 8.1.0.

This release continues VTK’s evolution to multithreaded and GPU enabled fine grain parallel processing filters via VTK-m. VTK-m, introduced in VTK 8.0.0, is now bundled with VTK (technically we use a git submodule for it), we’ve made performance improvements to it, and added new algorithms (vtkmExtractVOI, vtkmPolyDataNormals, vtkmTriangleMeshPointNormals). We’ve also begun the process of transitioning vtkSMP threaded filters to VTK-m based implementations. In support of VTK-m we’ve updated the minimum C++ compiler requirements to be Microsoft Visual Studio 2013 or newer,  GCC 4.8.3 or newer, Clang 3.3 or newer, and Apple Clang 5.0 (from Xcode 5.0) or newer.

Beyond deprecating some vtkSMP filters, this release incorporates a substantial number of deprecations and deprecated code removals. The deprecations include:

  • Tcl bindings
  • Qt4 compatibility
  • the legacy OpenGL1 backend along with closely tied features such as Immediate Mode Rendering and multi-render implemented Antialiasing, Depth Of Field, and Motion Blur effects
  • vtkHyperOctree which is superseded by vtkHyperTreeGrid
  • vtkInstantiator. The replacement for vtkInstantiator is to use vtkObjectFactory where applicable or an explicit list of classes.

Likewise we’ve removed the previously deprecated Infovis/Parallel, Filters/Matlab and Filters/StatisticsGnuR modules. We expect that all of the newly deprecated code paths will be removed entirely before the next release.

VTK’s python interface has some new capabilities. First, debug builds of VTK now make better use of the PYTHON_DEBUG_LIBRARY that cmake detects. Second, in 8.1 the numpy_support.numpy_to_vtk facility will automatically convert non-contiguous arrays to contiguous array and manage the numpy memory reference. Third, python wrapped VTK class calls are safer (see VTK_EXPECTS and VTK_SIZEHINT macros) and are generally more pythonic and efficient (see VTK_ZEROCOPY).

We’ve made other changes to VTK’s build system. Specifically external modules now ensure that found targets are properly exported. This allows to have external modules to have external module dependencies. We anticipate larger scale changes to VTK’s CMake infrastructure, beginning with a CMake minimum version bump, in the next release.

For web based VTK applications, check out the recently announced vtk.js project for client side web visualization. For server side vtkWeb applications we’ve replaced the outdated version of Autobahn WAMP that we use for client server communication to wslink (over websockets) which is compatible with Python 3. For mobile devices we’ve made changes to VTK in support of a new mobile VTKViewer app that will replace KiwiViewer.

There are some updated file formats in 8.1. There is a new SegY reader for geophysical data. This originated in Jia Chen’s Google Summer of Code 2015 project. The XML based “.vtm” multiblock reader has a new load balancing scheme that distributes the load more evenly in some situations. XDMF3 gained an parallel write functionality and support for some of the FEnICs project’s higher order cell types. The later work came out of Michal Habera’s Google Summer of Code 2017 project.

Core data model and processing capabilities improved as well. Most significantly, we’ve added support for arbitrary-order Lagrange-interpolated cells for the following shapes: curve, tri, quad, tet, hex, wedge. See the new vtkLagrangeXXX classes in VTK/Common/DataModel and read all about it in the next Kitware Source to learn more. There is also additional support and bug fixes for polyhedral cells, especially in combination with mapped (zero-copy) grids for in-situ processing ala Catalyst.

New curved wedge cells and isosurfaces within.

Likewise the hypertree grid (vtkHyperTreeGrid) and its ancillary objects underwent a complete overhaul that reduces memory footprint and speeds up execution time. The refactoring brings: a more compact hypertree representation, a hierarchy of traversal objects (cursors and supercursors) that transport the minimum amount of information required for any given algorithm, and suite of updated and new hypertree grid filters that take advantage of the above.

HyperTreeGrid representation of a sphere octant.

Of course rendering continues to advance too. Offscreen and headless rendering support underwent refactoring to enable builds with OSMesa+GLX or EGL+GLX. We’ve made optimizations to Dual Depth Peeling and FXAA anti aliased rendering and enabled them with several previously excluded OpenGL implementations too. Color mapping (vtkColorTransferFunction) now supports the LAB CIEDE2000 color space. In this mode, the color interpolation will take the shortest path in the Lab color space using the CIE Delta E 2000 color distance measure. Meanwhile, VTK has a brand new interface to ray cast surface rendering via the vtkRenderingOptiX module which utilizes the GPU to trace rays. Also in the field of ray traced rendering, the OSPRay backend is now capable of full path tracing for surface geometry. Path tracing incorporates soft shadowing area lights, arbitrary surface materials and full global illumination to bring about the capacity for photorealism.

Path traced rendering in ParaView.

Volume rendering received attention too including fixes for a variety of bugs in the standard GL2 rendering paths (See TestGPURayCastUserShader and TestGPURayCastUserShader2). More notable is the fact that you can also now supply custom GLSL shaders for volume renderers for GL2. The OSPRay volume renderer is coming closer to full compatibility with initial support for direct volume rendering of unstructured grid and vtkOverlappingAMR data types in this release.

TestGPURayCastUserShader2 regression test result.

These are just a selection of the changes made by the 74 authors who made 1053 commits over the last 6 months to bring you VTK 8.1. Of course VTK is a large project most of which was untouched. The VTKExamples project makes the whole project much more approachable. This project received significant attention too. It is now regression tested with every VTK commit for starters. It also grew quite a bit with 111 new C++ examples since VTK 8.0. Of the C++ examples added, 73 examples from the VTK Book have been added. We anticipate moving the rest of the VTK book and in source examples to the VTKExamples project over the next few releases.

We’d like to thank all of the authors, bug reporters, and feature requesters who brought about 8.1. The next release, VTK 9 is expected to be released in the Spring.

3 Responses to VTK 8.1.0

  1. David DeMarle says:

    I updated the post to correct the misstatement that all vtkSMP filters are now deprecated. In actuality only SMPContour, SMPWarp and SMPTransform have been deprecated.

  2. Ashish says:

    vtkVolumeRayCastCompositeFunction.h, vtkVolumeRayCastMapper.h is missing from VTK 8.1.0

  3. Entwicklung Kornicki says:

    There was a nasty bug in previous versions of VTK in which the axes were sometimes not assigned the correct labels (e.g. y instead of x). Has this bug been fixed?

    Another problem in older versions of VTK was that using vtkAVIWriter, it was possible to use methods such as PromptCompressionOptionsOn which allow to set whether the compressor options should be displayed, but I do not see any possibility to modify in detail which compressor options should be selectable. My problem is that when I run our program and start capturing the video, it displays “Micosoft Video 1” as the first item of possible codecs to be used, but videos created using “Microsoft Video 1” apparently cannot be played by the standard video player of Windows 10. That is why I would like to remove this option but don’t know how to do that. Has this been fixed meanwhile?

Questions or comments are always welcome!