I would like to understand the VTK community’s perspective on potential support for the OpenUSD standard. This thread was prompted by discussion at today’s VTK.js developers meeting.
Universal Scene Description is an open source project initially developed by Pixar Animation Studios. The project was released as open source in 2016. Earlier this year the Alliance for OpenUSD was announced by NVIDIA, Pixar, Adobe, Apple, Autodesk, and more. OpenUSD is used throughout NVIDIA’s Omniverse platform and has broad industry support for 3D application interoperability.
From the OpenUSD website:
USD is a high-performance extensible software platform for collaboratively constructing animated 3D scenes, designed to meet the needs of large-scale film and visual effects production.
USD enables robust interchange between digital content creation tools with its expanding set of schemas, covering domains like geometry, shading, lighting, and physics.
USD’s unique composition ability provides rich and varied ways to combine assets into larger assemblies, enables collaborative workflows so that many creators can work together with ease, and more.
OpenVDB is also mentioned for volumes, though less commonly.
VTK interoperability with OpenUSD would enable scientists, developers, general community members, to more easily move data between various platforms for processing and visual representation.
Some possible application-driven examples:
- Process spatial cloud data from multiple cameras in a ParaView scene, export as OpenUSD for advanced AI-driven rendering in NVIDIA Omniverse
- Ingest a scene from NVIDIA Omniverse into ParaView as input data for a predefined scientific processing pipeline
- Perform markups on medical research data in 3D Slicer, export as OpenUSD, animate for medical education with industry animation tools
- Ingest a prosthetic scene from AutoCAD into 3D Slicer to compare with patient CT images
In 2021 NVIDIA released the NVIDIA Omniverse ParaView Connector with USD connectivity. It doesn’t seem that connector is open source, or at least, I have not been able to track down the source repository.
My understanding is that historically VTK has avoided a scene graph representation, with the directive that scene graph implementation should be handled at the application level. For instance, 3D Slicer implements the MRML Scene. I would like to understand whether there are components that would make sense to be handled at the VTK library level for reuse, rather than requiring each application to figure out their own unique approach for supporting industry standards.
While initial discussion was in regards to VTK.js and related web applications, it would be good to first consolidate an approach from the VTK C++ level to guide that development.
I would like to better understand the VTK community’s vision on this topic and actionable next steps.
- Is OpenUSD support applicable to VTK’s user base?
- Is there existing support that I have overlooked, beyond the (seemingly closed-source) ParaView connector? Accompanying documentation?
- Even without a scene graph, is there a reasonable way to provide in VTK a reader composing VTK objects from an OpenUSD or OpenVDB description?
- Are there components of OpenUSD serialization that would make sense to handle at the VTK library level?
- What components do not make sense to support in VTK and should be offloaded to individual applications such as 3D Slicer?
Thank you in advance.