VTK 7.1.0

The VTK development team is pleased to introduce VTK 7.1.0.

You might be tempted to think that 7.1 is just a minor release that tweaks the rendering after the big update that took effect last year in 7.0, but you would be wrong. Besides rendering, there are substantial changes to web (supporting javascript has been refactored into an external repository), filtering (revised zero copy arrays and SMP image processing filters), annotation, IO (efficient parallel file system operations), chemistry, and build system (laying groundwork for move to c++11). Even the code and documentation style has been significantly updated in this “minor” release. We recommend that all VTK users update to 7.1.

To get started using it, git clone it or get it from the download page, and maybe check out the VTK upgrade report. For the highlights continue reading.

RENDERING

Rendering was the focus of VTK 7.0, so we shall begin there. In 7.1 there are numerous minor updates to OpenGL2 including better management of resources with multiple windows, better support for line integral convolution, faster Composite PolyData Mapper renders, line stipple support for Context2D charts, and better support for Intel HD2000/3000 based systems on Windows. We’ve also fixed bugs in OpenGL ES on Android/iOS and in EGL based offscreen hardware accelerated rendering.

Some of the bigger items are support for offscreen and onscreen mesa in the same build, direct support for ray traced surface and volume rendering through Intel’s OSPRay renderer, and initial support for using the Oculus Rift and HTC Vive to bring VTK visualizations into Virtual Reality. Likewise we’ve updated and modified the included GL2PS library to work with the OpenGL2 backend. Note that upstream changes required for that have been incorporated into GL2PS but have not yet made their way into an official release. In addition the OpenGL2 backend now lets you directly render lines as tubes and points as spheres via shaders, has a 2x faster depth peeling implementation, a new hidden line removal renderer option that shows only the nearest face of wireframe geometry and an FXAA screen space anti-aliasing capability.

FILTERS

VTK is as much about data processing as it is about rendering and there have been numerous improvements here too. Entirely new filters include the DataSetRegionSurface filter (promoted from ParaView), the LinearToQuadraticCells filter, the BinCellData filter, the UnstructuredGridQuadricDecimation filter, and the Force Time filter for better temporal data processing. Improvements to boolean operations on polygon meshes were made in the vtkIntersectionPolyDataFilter.

VTK 7.1 also marks the introduction of threaded point cloud processing filters in the Filters/Point module and new DIY based vtkResampleWithDataSet filters that are more efficient and more capable than the older vtkProbeFilters in distributed memory parallel contexts. The resampling filters are really handy, for example, in converting unstructured composite data into structured formats for faster volume rendering.

Image processing filters in general are better parallelized with the inclusion of load balanced threading in OpenMP and TBB through vtkSMPTools. This is the outcome of a 2015 Google Summer of Code project by Vincent Chen. There is also a brand new vtkOpenGLImageAlgorithmHelper that facilitates creation of image processing filters that run on the GPU. See vtkOpenGLImageGradient for an example. Expect much more of this type of work in the next release of VTK, when the vtk-m project will be merged into VTK.

VTK’s data arrays have been overhauled in order to improve our support for zero copy operations which support in-place use of data generated by other packages. This is a pretty big change with new classes like the struct-of-arrays vtkSOADataArrayTemplate, several class and method renames and lots of refactoring under the covers. To learn all about it, check out this tutorial.

BUGFIXES

As always, there have been numerous bugfixes. The biggest this time was to fix a longstanding deficiency in VTK on Windows and let long running applications run for more than a few hours without crashing when faced with frequent rendering state changes. The fix was to  expand VTK’s Modified Time timestamp counters from 32 to 64-bit in the new vtkMTimeType. For backwards compatibility we have a preprocessor defined “VTK_HAS_MTIME_TYPE” flag so that applications can easily build against old or new VTK.

STYLE AND DOCUMENTATION

The source code itself underwent a significant code style modernization. This effort was meant to make VTK more palatable to new developers. In particular the remaining “BTX” and “ETX” wrapper exclusion markers have been removed, the brace indentation style was updated, and VTK’s non-standard documentation markup was replaced with mainstream Doxygen syntax. Meanwhile the python wrappers now automatically create Python docstrings from C++ Doxygen comments.

BUILD SYSTEM

Continuing with the thread of unsung necessities, we’ve made substantial changes to VTK’s build system and compilation infrastructure.  First off, VTK now uses VTK_OVERRIDE, VTK_DELETE_FUNCTION, and VTK_FINAL macros that allow it to transparently benefit from new features found in the C++11 standard. This is in preparation for next spring’s VTK 8.0, in which C++11 will be required instead of optional.

Other changes include updates to support newer versions of Android NDK, that we’ve fixed a compilation issue with Java Wrapping on OS X, and rewrote all of the module dependency relationships to be more meaningful and well-organized and generally better follow compile and run-time header inclusion rules.

Along the same line there are several new tests that improve VTK’s nightly regression test coverage in specific areas. VTK modules now label their tests to make it easier to run tests in particular directories. For example to run all of the tests for CommonCore just type “ctest -L CommonCore”.  This is especially useful for remote modules.  In related news VTK’s externally contributed wiki examples are now a remote module. Use them more easily now with the cmake option: Module_WikiExamples:BOOL=ON. VTK’s DEBUG_LEAKS tests, which are a very useful feature that help developers avoid introducing memory leaks into new code, have been updated in this release too.

IO

Several Readers and Writers received updates. The OpenFOAM reader now supports 64-bit labels and ignores instead of fails on nested lists following scalar data. There are new classes to perform efficient parallel file system operations as well.

In 7.1 we’ve updated to the newer proj 4.9.2 library for geographic projections and the latest version of TIFF. VTK’s ThirdParty Library update mechanism for XDMF is now an easy to run script and we’ve updated to the latest version of the library from ARL. This gave us a low overhead templating mechanism for data with repeated constant content. The Xdmf3 reader/writer also now supports now polyhedral cells (i.e. N face cells, where each face is a M edge polygon).

WEB

A fairly big change is that we’ve moved VTK’s internal Web/Javascript code out of VTK onto http://github.com/Kitware/paraviewweb, this code is used to create client side web pages that display VTK created server side content. The server side components remain in VTK though and have been updated to add push capabilities so that the Web server can send images to the client without waiting for the client to request a new rendered image. This allows better rendering performance in a web context. Likewise there are new capabilities for deferred rendering in Cinema and ArcticViewer. The Cinema changes are actually rendering specific changes that allow VTK to create more precise value rendered raster images via floating point textures in OpenGL. The ArcticViewer changes promote Python code into VTK that creates ArcticViewer datasets.

TEXT/ANNOTATION

Some nice improvements were made in the areas of text display and general annotation. There are new classes for progress reporting and billboard text to start. Text properties now have an option vtkTextProperty::UseTightBoundingBox that provides a conservative size result to better align text with. This produces the real bounding box instead of one that that includes ascents and descents when they are not present in the string. Other changes include a new EllipseArc polyline source and updates to the Polar Axis Actor.

CHEMISTRY

VTK’s Chemistry domain capabilities got a boost via support from the AFRL PETTT program over the summer. For details see https://blog.kitware.com/new-features-paraview-chemistry-pettt/

THANKS!

VTK 7.1 is brought to you by the efforts of at least 78 developers who made at least 1621 commits over the last eleven months. This is not including our upstream libraries’ authors and the infrastructure updates 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.0 is scheduled to be released in the Springtime. It will have expanded GPGPU capability with the integration of the vtk-m project. As mentioned before it will be the first release of VTK to require c++11 compilation.   

Questions or comments are always welcome!