VTK 9.6.0

We are thrilled to announce the release of VTK 9.6, which introduces a host of new features, including robust WebAssembly (WASM) enhancements, native ONNX support, significant performance optimizations, improved rendering capabilities, and numerous bug fixes.

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

WebAssembly and Web Capabilities

VTK 9.6 takes a giant leap forward in web development support, making it easier than ever to bring high-performance visualization to the browser.

JavaScript Wrappers and Standalone WASM

You can now generate JavaScript bindings for VTK C++ classes using Emscripten, enabling the creation of web applications with a simple CMake option (VTK_WRAP_JAVASCRIPT). Additionally, new interfaces allow for the development of remote or standalone WASM applications using the vtkWebAssembly.wasm binary, providing distinct sessions for client-server or local-only contexts.

Wayland Support

The vtkEGLRenderWindow now supports native Wayland as a backend, enabling both onscreen and offscreen rendering on modern Linux compositors.

Java Support

This release brings significant improvements to VTK’s Java support. Several build errors in the generated Java wrappers were successfully resolved. The process for creating and uploading Java Maven packages to Kitware’s Maven repository, located at https://github.com/orgs/Kitware/packages, has been restored. To maintain stability and quality, new Java test jobs have also been added to VTK’s Continuous Integration (CI) process.

AI and Advanced Filtering

Native ONNX Inference

AI integration has arrived in VTK with the new vtkONNXInference filter. This allows you to run AI models directly within your VTK pipeline using the ONNX framework. The filter can process parameters to output cell or point data and supports using existing field data as model input.

Point Matching Transform

A new vtkPointsMatchingTransformFilter has been added, allowing you to easily deduce the affine transform required to align a point set by specifying four pairs of points in space.

Visualization and Rendering Enhancements

VTK 9.6 introduces refinements to rendering quality and flexibility.

Composite Data Texturing

The vtkCompositePolyDataMapper now supports applying textures to individual blocks within a composite dataset. By assigning textures via block flat index, users can achieve rich, heterogeneous visualizations.

Composite polydata with per-block textures

Scalar Bar Title Separation

Control over your annotations is now more consistent. The VerticalTitleSeparation property in scalar bars is now respected for both vertical and horizontal orientations, ensuring your titles are perfectly spaced.

Diverging Color Interpolation Fix

We have updated vtkColorTransferFunction to correctly handle Hue as circular when performing diverging interpolation. This resolves artifacts seen when using colormaps like Viridis in diverging modes.

Core Performance and Data Modeling

Faster Observer Operations

A significant optimization has been applied to vtkObject, changing how observers are stored. By moving from a linked list to a std::map, operations like AddObserver, RemoveObserver, and InvokeEvent now scale much better, with RemoveObserver changing from O(n) to O(log n) complexity.

Benchmarking observer operations

Refactored AMR and New Grid Types

The AMR data model has been refactored for better future-proofing, with vtkUniformGridAMR now inheriting from vtkPartitionedDataSetCollection. Additionally, a new abstract vtkCartesianGrid class unifies the API for vtkImageData and vtkRectilinearGrid, simplifying algorithms that operate on structured data.

Cell Validation

The vtkCellValidator and related classes (vtkPolygon, vtkPolyhedron) have been improved to detect a wider range of mesh defects, such as coincident vertices and inverted faces, reporting them via a new vtkCellStatus enumeration.

Improved I/O and Python Support

USD Export

A new vtkUSDExporter allows you to export entire VTK scenes to the Universal Scene Description (USD) format, bridging VTK with modern 3D content creation workflows.

Python Free-Threading and Numpy Integration

VTK 9.6 supports Python’s free-threading mode (PEP 703), readying the toolkit for Python 3.13+. Furthermore, VTK composite arrays now support standard Numpy functionality (like numpy.mean and slicing) directly, making data analysis in Python more intuitive.

Other Notable Changes

  • Build Requirement: The minimum supported version of Microsoft Visual Studio is now 2019.
  • Memory Safety: A massive cleanup effort has replaced ~75% of GetVoidPointer usages with safer alternatives to prevent unnecessary data copying and improve stability.
  • Stream Support: Many readers, including STL, PTS, and DICOM, now support reading directly from C++ streams.

Community and Getting VTK 9.6

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

We are excited to see the innovative applications you will build with VTK 9.6! 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