Omniverse support

Hi!

We’re looking into porting part of our app into Omniverse and/or directly developing for it. Part of that is the various Optix bits I tend to.

Now I am wondering if there is any special Omniverse integration for Optix. I ran some searches but nothing turned up.

Thanks

Thorsten

Omniverse comes with its own renderer backends: RTX Real-Time, RTX Path-Traced and Iray Photoreal.

If you mean you want to port specific rendering functionality you have implemented in OptiX, I don’t think that is a feasible option. Omniverse is a higher level environment for writing applications.

There are two fundamental use cases to consider:

  1. You have some application and want to transfer the scene graph data to Omniverse and optionally live-edit content and see changes in all applications connected to the scene inside the Omniverse Nucleus server?
    Then you’d need to implement an Omniverse Connector using the Omniverse Client Library and the provided matching Universal Scene Description (USD) SDK.
    With the Omniverse Client Library you connect to the Nucleus server, manage data in there and get changes reported.
    With the USD SDK you generate *.usd files (“USD Stages”) which describe the scene graph contents.

  2. You want to implement an application which does something by combining, manipulating and visualizing various USD files, and work on their data?
    For that there is Omniverse Kit which is used to write extensions which build an application. Examples of this are the Create, View and Machinima applications.
    This might be on top of your connector if you need to implement specific things.

USD is a C++ API but there are Python bindings for it and basically everything in Omniverse as well, including the highly configurable GUI, which allows apps to be very dynamic and customizable.

I’d recommend looking through the Omniverse documentation and introductory videos to see what it offers.
Please find links inside the sticky posts of the Omniverse Announcements sub-forum

If you require specific information or help with that, please ask your questions inside the respective Omniverse sub-forums here.

Main landing page for Omniverse information: https://developer.nvidia.com/nvidia-omniverse-platform

Thanks, also for the high level view.

One detailed question, if I may :) Would there be a way to access, somehow, the geometry in a rendered scene in Optix? This is something that keeps bugging me that for the calculations we have to keep 2 copies of the same thing on the GPU, one for display in Unity, one for Optix calculations. If the mentioned renderer backends allow access directly to the geometry you could build acceleration structures around that (or something?)

If the mentioned renderer backends allow access directly to the geometry you could build acceleration structures around that (or something?)

As far as I know that is not possible.

Also that wouldn’t help in your case because the RTX renderers are implemented for DXR and Vulkan Raytracing.
https://docs.omniverse.nvidia.com/prod_rtx/prod_rtx/manual.html
https://www.youtube.com/watch?v=vTGI7NXe9g0

RTX renderers are implemented for DXR and Vulkan Raytracing.

TIL, ok thank you! It would have been very nice though. Will have to keep pushing to offload calculations on cloud/servers

Oh ok. One misunderstanding. I was (also) talking about running nucleus/server side Optix. I guess there is no support for that out of the box, but I can hook in my own .dlls to access Optix?

I guess there is no support for that out of the box, but I can hook in my own .dlls to access Optix?

No, that’s not how it works. Please read the Nucleus documentation first.

Generally if you want to work with data inside the Nucleus database, you’d write a connector on the client side which can retrieve the desired data from the USD files.

In case you want to do some rendering or simulation done with your own OptiX based application code, then that would effectively require to traverse an USD scene graph for the data you need and use that inside your application.

This effectively means writing a Hydra delegate. Hydra is the Pixar open-source framework to transport live scene graph data to renderers. Originally it was their OpenGL renderer in the past but got more abstract.
That in turn requires a solid understanding of the USD API first.
(In case it isn’t clear, yet, this is getting complicated.)

Even then, I have no idea how any of your application code could be made to run on server-side though. The Nucleus server machines might not even have graphics support.

Please ask your Omniverse specific questions on the sub-forums I linked above.

Ok, thank you. There seems to be some a few conceptual errors on our/my end then. I’ll give the docs a read.