Sitemap
Maochinn

Coding, Painting

【Omniverse】Development 101: Understanding Applications and Extensions

7 min readOct 3, 2024

--

中文版本:【Omniverse】學習筆記 — 01:Application and Extension

Based on the three courses introduced in 【Omniverse】Development 101: Getting Started with Kit-Based Development we have a basic understanding of what an extension is. It was also mentioned that “It serves as a basic template, composed of various extensions.” when I talk about Kit Base Editor. Therefore, this article will focus on what Applications and Extensions are in the Omniverse SDK.

Application

According to NVIDIA’s concept on the Omniverse website, a Stage is a scene that includes 3D models, lights, cameras, etc. The scene is displayed on the screen using USD render, and edited using USD Writer. These functionalities are all extensions, and when these extensions are combined, they form an application.

Press enter or click to view image in full size
Figure1: Omniverse Cloud Sensor RTX APIs are available as individual APIs that allow you to leverage Omniverse core technologies for OpenUSD and RTX in your

According to the kit-App-template document description

The Kit SDK Extension Architecture allow developers to define Extensions and Applications.

When describing Apps & Extensions, it is said that

You will start to think of Extensions as “pieces of capabilities” and of Applications as “the collection of Extensions”.

In simple terms, the SDK provides an easy way to stack blocks, allowing you to list the desired functionalities (extensions) in a .kit file and then build a Custom Kit Application. This means that an Application is just a combination of extensions, and the actual implementation and code are in the extensions.

Press enter or click to view image in full size
Figure 2: Omniverse Kit window

In the App interface, each block is an extension, similar to the UI created in the previous course we learn.

At the foundation of Kit SDK, the Kit Kernel provides the ability to bootstrap Applications and execute code. All capability on top of the Kernel is provided by Extensions. Kit SDK contains hundreds of Extensions providing runtime functionality such as USD, rendering, and physics — and other Extensions providing workflow solutions such as USD Stage inspectors, viewport, and content browsers.

Extension

The Kit SDK already provides many extensions, which we can call Kit Core Extensions. The relationship between your Custom Kit Application and other Extensions is shown in the diagram below:

  1. Kit Core Extensions: Provided by Kit SDK.
  2. Custom Extensions: Created by the user for specific functionalities.
  3. Sample Extensions: Provided by third parties or other sources.
Press enter or click to view image in full size
Figure 4: Kit SDK, application and extension

By combining the Kit SDK Extensions with one or more custom Extensions, new workflow and service based solutions can be created. The Extension Architecture of Kit has been designed for extreme modularity — enabling rapid development of reusable modules:

In fact, We have already learned these two methods of adding extensions in 【Omniverse】Development 101: Getting Started with Kit-Based Development. They correspond to the custom extensions and example extensions in Figure 3, respectively. So let’s briefly review how to add extensions based on the two lessons we’ve taken previously.

  1. Using kit-app-template: Automatically generates an extension template and registers it in the .kit file.
  2. Using the Extension Manager (and kit-extension-template): Create a new Extension Template Project directly in a different path.

The first way is to automatically generate an extension template according to the method provided by kit-app-template. At the same time, the .kit in kit-app-template needs to be registered. For example

"my_company.my_python_ui_extension" = {}

Therefore, we can search for this extension in the Extensions Manager window. We can notice that the extension we generated is classified in the NVIDIA custom category.

Press enter or click to view image in full size
Figure 4: The custom extension will be classified as third party in extension manager

Here, you can find Core, Sample, Internal, Deprecated. You can browse it yourself. If you explain it in a simpler way, you can imagine that Sample is a third-party extension, which includes our developers. Of course, NVIDIA also Sort of. However, custom extensions and official Kit core extensions will be classified in the NVIDIA category, which means that these extensions are necessary for this application, so they will be registered in the app’s .kit.

Another way to add extensions is to press the + sign in the upper left corner of the extension window, and then select New Extension Template Project to directly generate an extension project independently in other paths.

Press enter or click to view image in full size
Figure 5: New extension template project in extension manager

The difference from just now is that it will be classified under THIRD PARTY. In other words, the extension generated here is of course developed by a third party. The difference between it and the custom extension in the NVIDIA classification is that the extension here will be used It is reused, so it will be an independent project, not attached to a specific app. Therefore, its main category is THIRD PARTY, because most of it is developed by third parties.

Press enter or click to view image in full size
Figure 6: The extension project will be classified as third party in extension manager

Extensions created using the Extension Manager are classified as THIRD PARTY, meaning they are intended for reuse and are not specific to a particular app.

However, you may be curious, if I have a third-party extension written by someone else, how should I add it to the application?

Get 帽捲’s stories in your inbox

Join Medium for free to get updates from this writer.

The answer can be found in the second option in Figure 5, which will link to kit-extension-template. In short, we need to open the settings in the extension manager, which is located in the three bars in the upper right corner.

Press enter or click to view image in full size
Figure 7: Settings in extension manager

At this point, you can see that all extensions that can be used will be placed under these paths. In other words, only extensions under these paths can be searched.

Press enter or click to view image in full size
Figure 8: Extension Search Paths

The most conspicuous thing in Figure 8 is that there are three lines of paths with brighter fonts below. These are the paths I used to create three extension projects. Kit will automatically help us add the path to the setting. These extensions are THIRD PARTY and exclusive. Can be deleted, other gray font paths are classified as NVIDIA.
Therefore, if you have someone else’s extension, you can add the path directly in the settings. For example, here is a formally written extension.

After cloning, open the setting in the extension and press the + sign to add a path.

Figure 9: Add a extension path

Then fill in the absolute path like this

c:/users/ginochang/workspace/omniverse/kit-workshop-siggraph2022/exts

If successful, you should be able to see 4 more extensions in THIRD PARTY, because Kit will automatically grab the extension information from this path.

What is curious is that the THIRD PARTY extension information will not be registered in .kit, so where will it be stored?
We can find a user.config.json under a path similar to this

C:\Users\GinoChang\AppData\Local\ov\data\Kit\my_company.my_editor\0.1\user.config.json

The path we added will be stored in a JSON file, so that there is no need to manually add the extension path next time.

"exts": {
"userFolders": {
"0": "c:/users/ginochang/documents/kit-exts-spawn-prims/exts",
"1": "c:/users/ginochang/documents/kit-exts-command-library/exts",
"2": "c:/users/ginochang/documents/myname.example.scatter/exts",
"3": "c:/users/ginochang/workspace/omniverse/kit-workshop-siggraph2022/exts"
},
"enabled": {
"0": "myname.example.scatter-1.0.0",
"1": "myname.example.spawn_prims-1.0.0",
"2": "dli.example.command_library-1.0.0"
}
},

Another detail worth mentioning is that from the gray font path selected in Figure 8, we can find that the path for the application to get the custom extension is in

kit-app-template\_build\windows-x86_64\release\exts

Instead of using kit-app-template to create the extension path

kit-app-template\source\extensions

Therefore, this also shows that if you want to add an extension, you must rebuild it, because the SDK needs to move its extension from source to the _build folder.

Conclusion

If you want to develop an extension, you can use either the kit-app-template or the kit-extension-template method. The choice depends on whether the extension is specific to an app or intended for reuse. For more detailed specifications on extensions, refer to the official documentation.

As for more detailed specifications for extensions, just go to the official documents. This article mainly focuses on the officially provided methods.

Thank you for reading! If you found my article helpful or have any feedback, feel free to reply. If you’d like to support me, you can:

You can also check out my other series of articles:

--

--