NVIDIA OpenUSD Development NCP-OUSD Exam Questions

Page: 1 / 14
Total 71 questions
Question 1

Consider a USD that has a root Xform, that has a child Sphere, that in turn has a child Cube.

Xform

- Sphere

-- Cube

When you open the USD, you see the sphere and the cube. But when you author the Sphere to be invisible, the sphere disappears, but the Cube is still visible.

What could be causing this behavior?



Answer : B

The issue is caused by an invalid scenegraph structure: a Cube gprim is nested below a Sphere gprim. OpenUSD considers nesting gprims under other gprims invalid, and usdchecker warns on this construct because important USD features such as activation and visibility are hierarchical and pruning. The OpenUSD glossary states that when an ancestor gprim is deactivated or made invisible, there should be no way for a descendant gprim to remain active or visible. (openusd.org)

Option B is correct because the authored hierarchy violates the expected gprim organization. The correct structure is to place geometry prims under transform or organizational prims, such as Xform or Scope, rather than directly under other gprims. Option A is incorrect because USD visibility is not purely explicit per prim. NVIDIA's Omniverse visibility guide states that setting a prim's visibility to invisible makes the prim and all children invisible. (docs.omniverse.nvidia.com) Option C is also incorrect because setting the Sphere invisible should hierarchically affect descendants in a valid hierarchy. This aligns with Visualization Visibility, Imageable Prims, Gprim Structure, and Valid Scenegraph Organization.


Question 2

Review the following code for creating 1000 sphere instances. When this code is executed, why will the authored prims not yield any instancing efficiencies?

for i in range(1000):

xform = UsdGeom.Xform.Define(stage, f"/test_{i}")

sphere_path = xform.GetPath().AppendPath("sphere")

UsdGeom.Sphere.Define(stage, sphere_path)

xform.GetPrim().SetInstanceable(True)

xform.AddTranslateOp().Set((i * 2, 0, 0))



Answer : A

The authored prims do not produce scenegraph-instancing efficiencies because the code authors local prim hierarchies directly under each /test_i prim rather than composing shared content through references, payloads, inherits, specializes, or variant arcs. NVIDIA's Learn OpenUSD scenegraph instancing guidance states that ''Instancing is driven by your composition arcs'' and explains that if there are no composition arcs on the instanceable prims, there is nothing from which OpenUSD can generate shared prototypes. (docs.nvidia.com)

Option A is correct because instanceable = true alone is not sufficient. OpenUSD scenegraph instancing works by sharing composed subgraphs brought in through composition arcs; in this code, every sphere is authored as a unique local child in the same layer stack. NVIDIA's Omniverse instancing guide states that if no composition arcs are directly authored on an instanceable prim, the prim behaves as if instanceable were false. (docs.omniverse.nvidia.com)

Option B is incorrect because instance roots may vary by transform, primvars, and other root-level data while still sharing prototypes. Option C is incorrect because the child sphere is not the instance root; marking it instanceable would still not create shared prototypes without composition arcs. This aligns with Content Aggregation Asset Modularity and Instancing Scenegraph Instancing, Composition Arcs, Instance Roots, and Implicit Prototypes.


Question 3

To make only the sphere visible given the following scene, which prims need their visibility opinions updated? Choose three.

#usda 1.0

def Xform "World"

{

token visibility = "invisible"

def Xform "Xform"

{

def Scope "Scope"

{

token visibility = "invisible"

def Sphere "Sphere"

{

}

def Cube "Cube"

{

}

}

}

}



Answer : A, C, E

The visibility opinions that must be updated are on World, Scope, and Cube. In OpenUSD, visibility is hierarchical and pruning. UsdGeomImageable defines the visibility attribute with allowed values inherited and invisible; effective visibility is computed from the most ancestral authored invisible opinion. The OpenUSD API further states that MakeVisible() may need to override ancestor visibility and hide sibling branches to preserve the intended result. (openusd.org)

In the given scene, /World is explicitly invisible, so the entire subtree is invisible regardless of descendants. /World must therefore be changed to visible behavior, typically visibility = 'inherited'. /World/Xform/Scope is also explicitly invisible, so Scope must also be changed to inherited to allow its children to be evaluated as visible. Once those ancestor invisibility opinions are removed, both Sphere and Cube would become visible by inheritance. To make only the sphere visible, the Cube must receive an explicit visibility = 'invisible' opinion. The sphere does not require an authored visibility opinion because it becomes visible through inheritance. This aligns with Visualization UsdGeomImageable, Visibility, Hierarchical Pruning, and Effective Visibility Computation.


Question 4

When a user is trying to change the drawMode of an element to bounds, and it doesn't work, what should you look into?



Answer : A

The correct troubleshooting path is to verify the prim's kind and whether UsdGeomModelAPI behavior is properly applied. OpenUSD's UsdGeomModelAPI documentation states that draw modes provide alternate imaging behavior for USD subtrees with kind model. The attributes model:drawMode and model:applyDrawMode are resolved to decide whether traversal should stop at a model boundary and replace the subtree with proxy geometry. For bounds, the replacement is the model-space bounding box of the replaced prim. (openusd.org)

Option A is correct because drawMode = 'bounds' is not a generic visibility toggle for arbitrary prims. It is a model-level imaging mechanism. The prim must participate correctly in the model hierarchy, and the relevant UsdGeomModelAPI attributes must be authored or inherited in a way that causes draw mode application. The documentation also notes that component models are automatically treated as if model:applyDrawMode were true unless explicitly disabled. (openusd.org)

Options B, C, and D are unrelated to model draw-mode activation. Physics collision APIs, volume schemas, and material binding APIs can affect simulation, volume representation, or shading, but they do not control whether model draw modes are applied. This aligns with Visualization Model Draw Modes, UsdGeomModelAPI, Kinds, Bounds, and Imaging Substitution.


Question 5

Considering the two files cars.usda and parkingLot.usda in the exhibit. When opening a stage with parkingLot.usda as the root layer, you observed this prim hierarchy:

ParkingLot

car01

You expected this:

ParkingLot

car01

chassis

parkingLot.usda:

#usda 1.0

(

upAxis = "Y"

)

def Xform "ParkingLot" (kind = "group")

{

def "car01" (references = @cars.usda@) {}

}

cars.usda:

#usda 1.0

(

upAxis = "Y"

)

def Xform "redCar" (kind = "component")

{

def Mesh "chassis" {}

}

def Xform "blueCar" (kind = "component")

{

def Mesh "chassis" {}

}

What are ways to fix this issue?



Answer : A, C

The missing chassis is caused by an unresolved reference target. In parkingLot.usda, the reference is authored as @cars.usda@ without a target prim path. When a reference omits the target prim path, USD uses the referenced layer's defaultPrim as the entry point. NVIDIA's Learn OpenUSD guide states that if no defaultPrim is set, bringing that layer in as a reference or payload resolves as an empty layer and emits a warning. It also identifies defaultPrim as layer metadata and a best practice for stages intended to be referenced or payloaded.

Option A fixes the issue by setting, for example, defaultPrim = 'redCar' in cars.usda, allowing @cars.usda@ to resolve to /redCar and bring in its chassis. Option C also fixes it by making the reference explicit, for example references = @cars.usda@</redCar>. NVIDIA's data-transformation guidance similarly notes that without defaultPrim, a stage cannot be referenced without specifying a target prim. Option B does not solve reference resolution; assigning a type to car01 would not identify which car to compose. Option D changes model-kind semantics only and does not affect the reference target. This aligns with Composition Reference, Default Prim, Target Prim Paths, and Asset Entry Points.


Question 6

When prioritizing ease of interchange and reducing dependencies between different applications in a pipeline, why might codeless schemas, schemas defined purely in .usda files, be preferred over codeful schemas, schemas with generated classes using usdGenSchema?



Answer : A

Codeless schemas are preferred when the pipeline goal is portability, easy distribution, and reduced application coupling. NVIDIA's Learn OpenUSD schema guidance states that schemas define data models and optional APIs for encoding and interchanging 3D and non-3D concepts, and notes a trend toward codeless schemas for easier distribution, with schemas becoming more focused on data modeling rather than behavior implementation.

Option A is correct because a codeless schema can be distributed as schema data and plugin metadata without requiring every consuming application to compile, link, or ship custom generated C++/Python schema classes. OpenUSD's schema-generation documentation identifies codeless schemas as schemas produced without corresponding C++ classes, where only generatedSchema.usda and plugInfo.json are essential for runtime registration.

Option B is incorrect because strongly typed convenience APIs are the advantage of codeful generated schemas. Option C is incorrect because fallback values are authored in schema definitions. Option D is incorrect because codeful and codeless schemas can both participate in schema registration and value interpretation. This aligns with Customizing USD Schemas, API Schemas, Codeless Schemas, Schema Registry, Data Modeling for Interchange.


Question 7

How does the concept of an edit target (Usd.EditTarget) interact with the stage in OpenUSD?



Answer : C

An edit target determines where authored opinions are written while working through the composed view of a stage. NVIDIA's Learn OpenUSD stage material emphasizes that a stage is not simply a file; it is a unified scenegraph populated from multiple data sources called layers. (docs.nvidia.com) In that layered environment, a developer often edits a composed prim while needing the resulting opinion to land in a specific contributing layer, variant, or composition context.

OpenUSD defines this role through UsdEditTarget: edit targets allow work on the composed stage and its UsdPrim objects while specifying which contributing site in the composition network should receive the authored opinions. (openusd.org)

Option C is correct because the edit target is the authoring destination, not a composition override mechanism. Option A is incorrect because USD does not automatically merge edits into all layers. Option B is incorrect because edits are not forced to the root layer; developers can target other valid layers or edit contexts. Option D is incorrect because setting an edit target does not disable sublayers or composition arcs. This aligns with Pipeline Development Layer Authoring, Edit Targets, Non-Destructive Editing, Stage Workflows, and Collaborative Layer Stacks.


Page:    1 / 14   
Total 71 questions