【Omniverse】Development 101: Understanding Applications and Extensions
中文版本:【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.
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.
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:
- Kit Core Extensions: Provided by Kit SDK.
- Custom Extensions: Created by the user for specific functionalities.
- Sample Extensions: Provided by third parties or other sources.
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.
- Using kit-app-template: Automatically generates an extension template and registers it in the .kit file.
- 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.
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.
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.
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.
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.
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.
Then fill in the absolute path like this
c:/users/ginochang/workspace/omniverse/kit-workshop-siggraph2022/extsIf 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.jsonThe 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\extsInstead of using kit-app-template to create the extension path
kit-app-template\source\extensionsTherefore, 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:
- Clap 👏 or share your thoughts 💬
- Follow me on Medium
- Subscribe to me on Medium
- Connect with me on LinkedIn
You can also check out my other series of articles:






