The NVIDIA Omniverse™ ParaView Connector offers a toolkit for ParaView users to send and live sync their model(s) to an NVIDIA Omniverse™ Nucleus Server, or alternatively locally output them to USD, with OpenVDB in case of volumes. As a result, a user will be able to edit and sync their ParaView data with any OMNIVERSE® Connect applications, or just import it into applications supporting USD or OpenVDB. Now, depending on the use case, ParaView users can choose the workflows and pipelines that work best for their needs while maintaining up to date revisions for all downstream consumers of their work.
Specifically, the NVIDIA Omniverse™ ParaView Connector adds to ParaView a new Omniverse render view, two filters, plus a tab in ParaView’s settings dialog for global configuration. See Install Instructions for a walkthrough in configuring and using the connector. A condensed list of Features is also available.
“Omniverse Connector” Render View
The Omniverse Connector render view works just like a normal render view, except that everything visible within this render view is sent over to an NVIDIA Omniverse™ Nucleus Server, or a local USD file. Specifically, for all visible ParaView actors in the view’s pipeline, their render data arrays (such as point, normal, texcoord and vertexcolor) will be converted to USD, and optionally sent over to Omniverse. This render data will be collected for each timestep viewed by the user and stored in the USD, alongside the data of previously viewed timesteps - unless the actor’s data does not change over time.
The Omniverse Connector render view is required for the two filters mentioned below. This allows users to allow additional data arrays to be included within the output of the rendered models, or manually specify which arrays are time-varying for animated datasets.
“Omniverse Connector Pass Arrays” Filter
This filter functions exactly as the normal Pass Arrays filter found in ParaView, but instead specifies exactly which arrays of a dataset are transferred to Omniverse. By default the Connector only sends render data arrays to Omniverse as explained before. Using the Pass Arrays filter permits you to extend that with any per-point or per-cell field array residing in your dataset.
“Omniverse Connector Temporal Arrays” Filter
The Temporal Arrays filter defines which specific arrays are time-varying - ie. obtain a separate copy of their data in USD or Omniverse at every single time step - and which arrays are uniform and therefore only have one copy of their data, applying to all timesteps. Enabling a checkbox in front of an array makes it time-varying, otherwise it is considered uniform. This is useful in a case where for example only the texcoord array changes from one timestep to another, and all other arrays stay the same. In such a situation, the connector cannot detect that the other arrays are uniform over timesteps, and will therefore generate a duplicate copy of data for every array at every timestep to be sent to Omniverse. With the Temporal Arrays filter, the user can avoid this data duplication on a per-array basis by explicitly defining arrays as uniform over all timesteps, so that they are not updated or duplicated if the user changes the timestep of the render view.
“Omniverse” Settings Tab
Found under ‘Edit’->’Settings…’, this tab is where users point the connector to a live Omniverse server or point to a local directory to save USD file output for visualizing later. The settings will be applied at creation of and Omniverse Connector render view, and will have no effect if changed once such a render view has already been created.
Additionally, the ‘Properties’ panel on the left-hand side of the ParaView Gui is expanded with an ‘Omniverse Connector’ section, where you can find additional settings which can be changed while an Omniverse Connector render view has been created.
Supports client-server setups
Works with headless (EGL) ParaView servers
Works in multi-node (MPI) environments (see MPI environments)
Works in python environments (see Usage with Python)
Can output to an Omniverse Nucleus server
Can convert to USD for local output
Supports multiple connections/outputs at once
Supports color-mapped surface meshes
Structured volume representations (see Volumes and OpenVDB)
Transfer of any point and/or cell arrays
Manual specification of uniform arrays over time
Please install the ParaView Connector plugin via the Omniverse Launcher, which will guide you through installing the connector plugin to your local ParaView install.
On Windows, it will ask for the location of an existing official ParaView install into which to copy the plugin
On Linux, make sure to call
export PVOV_INSTALL_PATH=<ParaView-install-dir>before running the launcher, which will point the installer to the right location
Please see Launcher Documentation for more information on installing connectors.
It’s possible to verify whether the ParaView Connector is properly installed by running ParaView, going to Tools > Manage Plugins, and making sure the Omniverse Connector plugin is loaded.
Configure the connector in ParaView’s settings¶
If the plugin is successfully loaded, then a new settings tab will be present in ParaView’s settings panel.
Navigate to Edit > Settings
After locating the “Omniverse connector” tab, enter your target Omniverse server or local location where USD scene files will be stored
Checking the “Output Local” box optionally lets you save USD output on your local machine instead of directly outputting it to an Omniverse server.
Test the connector using the ParaView ‘wavelet’ source¶
This section will walk through a very simple example using one of ParaView’s built-in data sources to demonstrate the connector in action. The steps outlined below assume that the connector plugin is installed, enabled, and configured.
Create an ‘Omniverse Connector’ view.
The Omniverse render view is the view which synchronizes with the Omniverse server. If you do not want your local view changes to propagate to Omniverse, simply use another view in ParaView instead. Remember that the default view when ParaView starts up already keeps view changes local and does not synchronize with Omniverse.
Add a ‘wavelet’ source and activate it with ‘Apply’.
Make some isosurfaces using the contour filter, and activate with ‘Apply’.
The example shown has isovalues at 100, 150, and 200.
Open NVIDIA Omniverse™ Create and navigate to your configured ParaView session.
You can install and launch NVIDIA Omniverse™ Create from the Omniverse Launcher (see here).
The scene will be in a USD file called ‘FullScene.usd’.
Change the color map in ParaView and see the colors update in Create.
If you cannot see the Color Map Editor, enable it in the ‘View’ menu.
Add a Plane in Create using the Stage UI.
And that’s it! Now you can enjoy using ParaView with Omniverse to do new and interesting things with your data, and do so collaboratively in real time.
Volumes and OpenVDB¶
One important feature of the ParaView Connector is its ability to convert structured volume data to OpenVDB.
For this to happen, one simply opens a structured volume in an Omniverse Connector render view, such as the wavelet
example from the previous section. Set its representation to ‘Volume’, and the connector will automatically generate
an OpenVDB file in the
volumes/ subdirectory of the output location. It’s contents will be the volume’s source data.
The OpenVDB file is referenced from within USD and therefore could be used in combination with the complete stage, or just on its own by loading it into any application supporting the file format.
Usage with Python¶
The ParaView Connector supports python environments such as a pvpython or state loading within the ParaView GUI. Typically, the Connector is set up in the following manner:
pxm = paraview.simple.servermanager.ProxyManager() omnisettings = pxm.GetProxy('settings', 'OmniConnectSettings') omnisettings.SetPropertyWithName('OutputLocal', 1) omnisettings.SetPropertyWithName('LocalOutputDirectory', '/home/user/output')
Then, a Connector render view must be created, which happens as follows in pvpython:
newRV = CreateView('OmniConnectRenderView') SetActiveView(newRV) Render()
If you want to load the python code as a ParaView state file, replace the above section with:
layout2 = CreateLayout(name='Layout #2') SetActiveView(None) newRV = CreateView('OmniConnectRenderView') AssignViewToLayout(view=newRV, layout=layout2, hint=0)
Any items attached to the view using
Show(item, newRV, ...) will be sent to Omniverse once
newRV.Update() is called.
The ParaView connector automatically detects when it is part of an MPI-enabled server process. In those cases, every server process will output its data to a separate subdirectory within the USD output directory. An additional multiscene USD file will be generated, combining the scene USD files from the separate process subdirectories as follows:
Synchronization with Omniverse¶
The ParaView Connector only exports data out of ParaView to Omniverse, but by design does not allow for data to be imported into ParaView
An Omniverse Connector view within ParaView does not offer a choice whether to synchronize with Omniverse or not, it will always do so
Use a separate view in ParaView to have a view which does not propagate to Omniverse, or multiple separate views to output different parts of the scene to different locations
Currently, only polygonal surface data is transferred to Omniverse
For example, use the “Tube” filter to turn line data into polygons
Only structured volumes make it through the connector, which are converted to VDB before transfer into Omniverse
Use the “Resample To Image” filter to transform volumes into structured volumes for Omniverse rendering
ParaView light kit information is not transferred to Omniverse, instead a single distant light is put into the scene by default
Raytracing cannot be enabled within the Omniverse Connector view (use a separate view instead)