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.
Below you will find a short description of the components which NVIDIA Omniverse™ ParaView Connector Plugin adds to ParaView. They consist of a custom Omniverse Connector render view, two filters, plus a toolbar in the View > Toolbars menu option which is enabled by default:
“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) or rendered volume fields 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.
Found under ‘View->Toolbars’, the NVIDIA Omniverse™ ParaView Connector plugin can be interacted with through an interface similar to other NVIDIA Omniverse™ Connect applications:
There is one button each for signing into an Omniverse Nucleus server, bringing up the settings panel, opening the current scene in an Omniverse application of choice, showing the documentation or viewing information about the plugin.
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, ascii or binary
Supports multiple connections/outputs at once
Supports color-mapped surface meshes
Structured volume representations (see Volumes and OpenVDB)
Lines and (piecewise linear) curves
Animated timesteps for all supported geometry types and volumes
Customizable per-timestep or uniform storage for mesh arrays, material parameters and textures
Transfer of any point and/or cell arrays
Opening scenes in other Omniverse apps from within ParaView
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 by navigating to ‘Tools->Manage Plugins’, and making sure the Omniverse Connector plugin is loaded.
Once the Plugin has been installed, you should find the Omniverse Toolbar is already in place (highlighted in red below). If not, just enable the option under ‘View->Toolbars->OmniverseConnector’.
Before creating an Omniverse Connector render view, it is recommended to at least familiarize yourself with the Sign-In and Settings menus. The following sections briefly explain the function of each button:
If output to a NVIDIA Omniverse™ Nucleus server is desired, signing in is required before opening an Omniverse Connector render view. The sign-in dialog allows users to connect to their Omniverse Nucleus server for mounts. Simply enter your Omniverse Nucleus ‘User Name’ and ‘Password’:
Address of an NVIDIA Omniverse™ Nucleus server.
Initiates the connection with selected user and server.
Stops the sign-in process and closes the sign-in window.
The settings menu is the main hub for changing the Omniverse Connector plugin’s parameters, and will be applied to the next Omniverse Connector render view that is opened. Therefore, its also automatically launched right before an Omniverse Connector render view is created, to allow for last-minute adjustments to be made.
Most often, the settings menu is used to browse for an output location where the USD files have to be written to. A detailed description of each setting is provided in the Settings Menu Explained section.
Although the options within the settings menu cannot be changed for an active Omniverse Connector render view, there are properties which can be changed at any time. Go to Omniverse Connector View Properties to find out which options this applies to.
Open View In Omniverse App¶
Once an Omniverse Connector render view has been created, this button opens the contents of the currently active view directly an Omniverse application of choice. For this to work, set up your desired Omniverse application (such as NVIDIA Omniverse™ View or NVIDIA Omniverse™ Create) in the settings menu. Afterwards, simply click the ‘Open View in Omniverse App’ button and the Omniverse application will launch with your visualization loaded and ready to go.
Launches your default web browser to the NVIDIA Omniverse™ ParaView Connector Documentation.
Opens a dialogue and displays version information about the installed NVIDIA Omniverse™ ParaView Connector, and provides helpful links to access release notes and to get support.
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 to output to a desired location (on a Omniverse Nucleus server or otherwise).
Create an ‘Omniverse Connector’ render view,
by clicking the ‘+’ tab and choosing Omniverse Connector:
The Omniverse Connector 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 is a regular render view which does not output to USD or communicate with Omniverse at all.
In the settings panel that pops up, use the ‘Browse’ button to select an output destination on a Nucleus server (no local disk), and make sure that ‘Output Extension’ is set to ‘.usd’.
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 disable ‘Texture Streaming’ in ‘Render Settings->Common->Materials’:
In NVIDIA Omniverse™ Create, navigate to your configured ParaView session, and open ‘FullScene.usd’.
Make sure Omniverse Live Synchronization is enabled in Create, by going to the layers menu and clicking the ‘Live Sync->Always On’ button (highlighted in red):
If working in Create 2022.2.0 or higher, skip this step
As a result, the Live Sync icon will turn green:
Change the color map in ParaView and see the colors update in Create:
If working in Create 2022.2.0 or higher, reload the ‘FullScene.usd’ manually
If you cannot see the Color Map Editor, enable it in the ‘View’ menu.
The result in Create:
Add a Plane in Create using the Stage UI panel, by right-clicking and choosing ‘Create->Mesh->Plane’:
the plane can be moved up and down along the Y axis using the ‘Move’ widget in Create, by dragging that particular axis:
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.
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.
The contents of the OpenVDB file depend on whether the property ‘Preclassified Volume Output’ is set in Omniverse Connector View Properties:
If it is not set, the OpenVDB output will consist of a single grid containing the data array used as input for ParaView’s volume rendering, highlighted in red in the following image:
Supported types include float/double(3) or int/long types. Short and byte types will be normalized to float data.
If ‘Preclassified Volume Output’ is set to true, ParaView’s transfer function will be applied to this data before it is written out to OpenVDB. The resulting colors and opacities (of float type) will be contained in separate grids called ‘diffuse’ and ‘density’ respectively. The following image shows Houdini rendering the OpenVDB output created by the Omniverse Connector on the ‘headsq.vti’ example dataset.
Because Omniverse Create does not directly support rendering UsdVolVolume prim with OpenVDBAsset fields, the Omniverse Connector Render View Settings allows for the volume representation to be changed to a textured UsdGeomMesh with corresponding MDL material:
This can be loaded into Omniverse Create, and rendered by setting the renderer to ‘Path Tracing’ and enabling ‘Non-uniform Volumes’. This is highlighted in red by the following image:
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() # Register custom settings proxy for the Omniverse Connector proxy = pxm.NewProxy('OmniConnectSettingsGroup', 'OmniConnectSettings') pxm.RegisterProxy("OmniConnectSettingsGroup", "OmniConnectSettings", proxy) # Change settings values omnisettings = pxm.GetProxy('OmniConnectSettingsGroup', 'OmniConnectSettings') omnisettings.SetPropertyWithName('OutputLocal', 1) omnisettings.SetPropertyWithName('LocalOutputDirectory', '/home/user/output')
Then, an Omniverse 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.
For an overview of the options that can be changed, consult the following list:
'OmniverseServer'->string 'OmniverseWorkingDirectory'->string 'LocalOutputDirectory'->string 'OutputLocal'->boolean 'CreateNewOmniverseSession'->boolean 'OutputExtension'->enum 'UpAxis'->enum 'PointsRepresentation'->enum 'LinesRepresentation'->enum 'TriangleWireframeRepresentation'->enum 'VolumeRepresentation'->enum 'ShowErrorMessages'->boolean 'ShowDebugMessages'->boolean 'NucleusVerbosity'->enum
where boolean values are
1 and enum values are simple zero-based integers aligning with their respective values in the dropdown list of the UI.
OutputLocal determines whether the
OmniverseWorkingDirectory is chosen for output (if
false), or the
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:
Omniverse Connector View Properties¶
The Omniverse Connector view properties are options pertaining to the currently active Omniverse Connector render view which can be changed at any time. They can apply to USD output just as well as anything else, such as disabling rendering output of an Omniverse Connector render view.
Set whether to render the output of the ParaView pipeline in the Omniverse Connector render view - improves efficiency when disabled. Has no bearing on USD output.
Force Time Varying Textures
All actors will generate one texture or colormap per timestep if this option is enabled, instead of just a single texture or colormap for all timesteps.
Force Time Varying Material Parameters
All actors will generate a separate material parameter value per timestep for each parameter that supports it if this option is enabled, instead of just a single parameter value for all timesteps.
Force Consistent Triangle Winding
When set, any mesh triangle order that is inconsistent will be corrected, and normals regenerated.
Preclassified Volume Output
For volumes, produce preclassified output where the transfer function is applied to the source data, producing a ‘density’ and ‘diffuse’ openvdb grid.
Revamped UI with new Omniverse toolbar, including sign-in, settings, and open-in-Omniverse-application buttons
Support for lines and (piecewise linear) curves
Choice of different representations for points, lines/curves, wireframe and volumes in settings menu
Support for volume output as textured mesh for compatibility with Create
Choice of scene up-axis, text/binary output
Optional output of time-varying textures and material parameters
Option to force winding order for triangle output
Any Omniverse Connector render view can now be opened into Omniverse application of choice via the click of a button
Log verbosity selection for Omniverse Connector and Nucleus separately
Support for continuation of output within an existing scene (session directory) after closing an Omniverse Connector render view and creating a new one (experimental)
Update of Omniverse Client Library to version 1.17.7
Updated Omniverse Client Library to version 1.17.4
Initial connector supporting ParaView 5.9
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 render 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.
Automatic (live) synchronization will not work for ascii (.usda) USD output.
Live synchronization with Omniverse Create 2022.2.0 or higher is not possible with connector versions 101.X.X or lower.
Colormapped surfaces can have trouble loading in Omniverse Create
Make sure to switch off texture streaming in Create, following the example Test the connector using the ParaView ‘wavelet’ source
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 so that they can be converted.
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 render view (use a separate view instead).