Scene Vs Stage Vs World

I’m trying to understand the distinctions between Scene, Stage, and World.

it seems that Stage is a Pixar USD concept. Scene and World are Omniverse concepts. It seems like the only point of Scene is to make so objects reset properly when Reset is pressed – is this right?

If in a script you do:

world = World()

Does this world contain the objects you already have loaded in the stage or is it effectively empty?

Am I correct that doing DynamicCuboid(…) adds the cuboid to the stage but doesn’t add it to the scene? What about the world?

1 Like

Hi @dan.sandberg - In Pixar’s Universal Scene Description (USD), a Stage represents a scene and all the data associated with it, including prims, assets, and layers that logically contribute to the composition of that scene. Many 3D applications use different terminology to refer to a container for objects that compose a scene, such as “world” or “scene”. In NVIDIA Omniverse applications, Stage is a concept borrowed from USD.

You’re correct that the Stage represents the loaded USD Scene, i.e., all the assets and objects in your 3D scene. In Omniverse, the concept of Scene is tied to simulation and it is the container for all the objects included in a simulation. When you press reset, it sets all the objects in the simulation scene back to their original state.

As for the world, it is actually a PhysX concept. The PhysX world is the abstract representation of the physical environment for physics simulation. Everything connected with Physics simulation such as Bodies, Joints, Scene Queries happen within this PhysX world.

If you create a new world object with world = World(), it creates a new empty PhysX world. It doesn’t include the objects already loaded on the USD stage.

When you add an object like a cuboid using DynamicCuboid(), it adds the cuboid to the USD stage and also creates a corresponding physical representation in the PhysX world if PhysX simulation is enabled.

High-level simulation concepts like the scene and reset operations are not tied to USD by default. When you press reset, it’s resetting all physically simulated objects to their original state in the simulation scene. The USD stage itself isn’t reset unless those objects are also part of the USD stage.

In summary, a Stage is a USD concept related to scene composition, a Scene in Omniverse is a container for simulation objects, and a World typically refers to the container for physics simulation objects. It’s important to be aware of the context when dealing with these terms, as different systems may use similar terminology in different ways.

2 Likes

Hi, thanks for the details. If you already have two objects loaded in the stage, and then create an empty World, and then hit Play to run the simulation, doesn’t PhysX still simulate the objects on the stage? If so, what is the “World” really needed for? Just a short-cut to be able to access the simulation-context, scene, etc? Not understanding this:

If you create a new world object with world = World(), it creates a new empty PhysX world. It doesn’t include the objects already loaded on the USD stage.

1 Like