The VTK release team is thrilled to announce the release of VTK 9.5.0, a significant update to the Visualization Toolkit! While this is a new minor version, v9.5.0 brings a host of new features, performance improvements, and important updates that continue to empower developers and researchers in creating cutting-edge scientific visualization applications. VTK 9.5 reflects our ongoing commitment to modernizing the toolkit, enhancing its capabilities, and supporting the evolving needs of the scientific community.

Let’s dive into some of the key highlights from this release:

Core Modernization: C++17 Requirement

A foundational change in VTK 9.5.0 is the adoption of C++17 as the minimum required C++ standard. This move enables VTK to leverage modern C++ features, resulting in more robust, maintainable, and efficient code. Consequently, the minimum required versions for compilers like GCC, Clang, MSVC, and Intel ICC have been updated. This is a crucial step for the long-term health and advancement of the toolkit.

Enhanced Visualization and Rendering

VTK 9.5.0 introduces several exciting features and fixes in rendering, aimed at improving visual fidelity, performance, and user control.

High-Performance Label Mapping (vtkFastLabeledDataMapper)

Visualizing numerous labels can now be done at interactive frame rates thanks to the new vtkFastLabeledDataMapper. It leverages GPU texture acceleration to render hundreds or thousands of labels smoothly, a significant improvement over previous mappers for dense label scenarios.

Labels at each point of the dataset rendered at 2.77 frames per second with vtkLabeledDataMapper
Labels at each point of the dataset rendered at 413.76 frames per second with vtkFastLabeledDataMapper

The vtkFastLabeledDataMapper can be used with all VTK mappers for interactive data annotations.

Volume rendering of the aneurysm dataset with 300 text labels

New Grid Axes Actor (vtkGridAxesActor3D and vtkGridAxesActor2D)

Say hello to vtkGridAxesActor3D, the successor to vtkCubeAxesActor for rendering annotated grid axes. Previously the default in ParaView, this actor utilizes vtkAxisActor internally, offering superior label placement and a more refined appearance for your visualizations.

The new vtkGridAxesActor3D providing enhanced axis annotations.

New vtkGridAxesActor3D

PBR Lighting Fixes and Enhancements

Physically Based Rendering (PBR) support continues to improve. VTK 9.5 fixes issues with lighting calculations when mixing directional and positional lights, ensuring more accurate and realistic scenes. Previously, when both directional and positional lights were intermixed, the polydata mapper treated directional lights as positional. This resulted in incorrect renderings, as seen in the image below where the directional light shows a conical intensity fall-off and is reflected in neighboring spheres as if it were a point source.

Before: Directional light incorrectly treated as positional.
After: Directional light rendered correctly

With the fix in VTK 9.5, directional lights are correctly treated as point lights at an infinite distance from the scene, leading to accurate lighting.

WebGPU Advancements

Our experimental WebGPU backend continues to mature with new implementations for vtkGlyph3DMapper and vtkPolyDataMapper2D, expanding the range of 2D and 3D geometry that can be rendered using this modern graphics API. Memory auditing for the WebGPU backend has also been added, providing detailed GPU memory usage information.

Other Rendering Improvements

  • Rectilinear Grids: Volume rendering of rectilinear grids with cell scalars fixed to ensure accurate mapping
  • Independent Edge/Line Thickness: vtkProperty now allows setting cell edge thickness independently from line thickness for more nuanced visualizations.
  • Light Widget in Path Tracing: The vtkLightWidget is now supported in path-traced environments for interactive light manipulation.
  • Shadow Map Light Transforms: Light transforms are now correctly preserved during shadow map computations.
  • Composite PolyDataMapper Opacity Override: You can now render opaque blocks in a composite dataset even when the actor has an opacity < 1.0 by setting the opacity of the block to 1.0.

Improved Data Handling and I/O

VTK 9.5.0 brings several enhancements to data import, export, and in-memory handling.

GLTF Enhancements

Loading GLTF scenes is now more flexible. The vtkGLTFImporter can now load scenes directly from in-memory streams. Additionally, vtkGLTFDocumentLoader allows selective loading of model data components like animations, images, and skinning information.

Multithreaded Readers and Performance

The vtkOpenFOAMReader now supports multithreaded reading of case files, which can significantly speed up loading large cases, especially from network drives. Performance for append filters (vtkAppendFilter, vtkAppendPolyData) has also been greatly improved through multithreading.

NetCDF Updates

VTK’s internal NetCDF library now supports the CDF5 format, enabling access to larger datasets. Support for unsigned integer data types in NetCDF files has also been added.

XArray Support

The new vtkXarrayCFReader allows loading Xarray datasets in your VTK – Python workflows. See the blog post on VTK-Xarray capability for details.

Advanced Filtering and Data Modeling

New tools for data manipulation and representation are now available.

Implicit Frustum and Widget

A new vtkFrustum implicit function allows defining frustum shapes, complete with a vtkFrustumWidget for interactive manipulation. This is useful for various geometric operations like clipping and slicing.

vtkExplodeDataSet Filter

The new vtkExplodeDataSet filter creates a vtkPartitionedDataSetCollection by splitting an input dataset based on cell scalar isovalues. This is a powerful tool for segmenting data, for example, by material or connectivity.

Example of vtkExplodeDataSet creating partitions based on region ids

vtkGenerateRegionIds Filter

This new polydata filter adds a CellData array identifying regions based on cell connectivity and normal similarity, useful for segmenting surfaces into meaningful patches.

Better Interactivity and Python Support

Enhancements for user interaction and Python integration continue to be a focus.

Qt Multi-Touch Gestures

For applications that utilize QtQuick/QML, support has now been added for multi-touch gestures through a dedicated PinchHandler QML component. This enhancement allows intuitive interactions such as pinching to zoom, panning across the interface, and rotating for VTK QML views on touch enabled surfaces.

Python support

The numpy adapter for VTK can now work with arrays of type vtkBitArray. The new @deprecated decorator provides a mechanism for marking Python VTK functions as deprecated. When these functions are used, the decorator generates a warning to alert the user about their impending removal in future releases. This ensures that developers are informed and can transition away from outdated functionality smoothly.

VTK now offers OpenXR and OpenXRRemoting modules packaged in convenient Python wheels for Windows, streamlining the process for Python developers who are interested in creating virtual reality (VR) applications. This enhancement simplifies the integration of VR capabilities into projects. However, it’s important to note that users will still need to install the appropriate OpenXR runtimes that correspond to their specific devices in order to ensure full functionality.

Other Notable Changes and Deprecations

  • API Change: The nlohmann::json vtkAbstractArray::SerializeValues() method has been removed to avoid conflicts with downstream projects using different versions of the nlohmann/json library.
  • Kokkos Backend Customization: Setting up compilers for Kokkos backends (e.g., CUDA, HIP) is now simplified, as VTK directly uses the Kokkos configuration.
  • Deprecations: vtkHierarchicalBoxDataSet and related classes are now deprecated in favor of vtkOverlappingAMR versions. Similarly, vtkTypedDataArray and its related classes are deprecated, with vtkGenericDataArray and template-based array classes like vtkAOSDataArrayTemplate being the recommended alternatives. The vtkHyperTreeGridVisibleLeavesSize filter is deprecated in favor of the more generic vtkHyperTreeGridGenerateFields.

Acknowledgements

This release is the result of dedicated work from the VTK development team and valuable contributions from our global community. We extend our sincere thanks to everyone who contributed code, reported bugs, and participated in discussions.

To get started with VTK 9.5.0:

We are excited to see the innovative applications you will build with VTK 9.5.0! Stay connected with the community through the VTK Discourse forum.

Citing VTK

When citing VTK in your scientific research, please mention the following work:

Schroeder, Will; Martin, Ken; Lorensen, Bill (2006), The Visualization Toolkit (4th ed.), Kitware, ISBN 978-1-93

Leave a Reply