VTK 9.5.0

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.

vtkLabeledDataMapper

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

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.
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.


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.
vtkExplodeDataSet
creating partitions based on region idsvtkGenerateRegionIds 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 ofvtkOverlappingAMR
versions. Similarly,vtkTypedDataArray
and its related classes are deprecated, withvtkGenericDataArray
and template-based array classes likevtkAOSDataArrayTemplate
being the recommended alternatives. ThevtkHyperTreeGridVisibleLeavesSize
filter is deprecated in favor of the more genericvtkHyperTreeGridGenerateFields
.
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:
- Download: Visit the VTK download page.
- Documentation: Explore the VTK documentation.
- Full Release Notes: For a comprehensive list of all changes, please see the VTK 9.5.0 Release Notes
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