Pre-Summer Sale Special - Limited Time 70% Discount Offer - Ends in 0d 00h 00m 00s - Coupon code: mxmas70

Home > NVIDIA > NVIDIA-Certified Professional > NCP-OUSD

NCP-OUSD OpenUSD Development Question and Answers

Question # 4

Which of the following are valid principles of asset structure? Choose three.

A.

Legibility

B.

Redundancy

C.

Navigability

D.

Modularity

E.

Compressability

Full Access
Question # 5

Which of the following are valid reasons for choosing to use or develop a standalone converter instead of an importer/exporter for a digital content creation (DCC) application? Choose two.

A.

Standalone converters are the only way to convert proprietary formats.

B.

A converter always produces higher-fidelity results compared to an importer/exporter.

C.

You don't have access to an SDK to develop a native exporter for the DCC.

D.

Your workflow requires batch conversion that is not suitable within the DCC.

Full Access
Question # 6

As part of a data exchange workflow, you have exported the following file from your DCC tool, and notice that the displayed extents box of the sphere is too large:

#usda 1.0

(

defaultPrim = "Model1"

)

def Sphere "MySphere"

{

double radius = 0.5

float3[] extent = [(-3.0, -3.0, -3.0), (3.0, 3.0, 3.0)]

}

Your tool, and also the final consumer of the scene data, would like best-fit correct extents. Which of the following could the export process do to address this problem for any exported boundable prim?

A.

Remove any authored "extent" values - USD will automatically calculate the correct extents for you.

B.

Check and, if necessary, fix any authored extent values on all boundable prims.

C.

Add an "extentsHint" attribute to all boundable prims with the correct bounds.

D.

Create a Scope prim for each boundable prim and make it a parent of the boundable prim.

Full Access
Question # 7

Why is extract, transform, load (ETL) a useful design pattern for USD data exchange? Choose two.

A.

It guarantees that all data converted to OpenUSD is lossless and identical to the original format.

B.

It separates concerns, making it easier to maintain and adapt data exchange pipelines for different needs.

C.

It ensures that all OpenUSD workflows use a standardized data structure, regardless of the original format.

D.

It helps preserve the integrity of the original data format while allowing tailoring for different use cases.

Full Access
Question # 8

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))

A.

There are no composition arcs so the instanceable metadata is ignored.

B.

Every sphere has a different position so the instanceable metadata is ignored.

C.

You must also call Usd.Prim.SetInstanceable(True) for each sphere prim that is created.

Full Access
Question # 9

Another department at your company has provided layer1.usda that has a Sphere Gprim with animated timeValues that translate the sphere along the Y-axis:

#usda 1.0

(

endTimeCode = 60

startTimeCode = 1

)

def Xform "Asset"

{

def Sphere "Sphere"

{

double3 xformOp:translate.timeSamples = {

1: (0, 5.0, 0)

30: (0, -5.0, 0)

60: (0, 5.0, 0)

}

uniform token[] xformOpOrder = ["xformOp:translate"]

}

}

You’ve been given rootLayer.usda that references Sphere from layer1.usda as follows:

#usda 1.0

(

endTimeCode = 60

startTimeCode = 1

)

def Xform "World"

{

def Sphere "Sphere" (

prepend references = @./layer1.usda@ < /Asset/Sphere >

)

{

}

}

For testing purposes, you want to check what Sphere would look like if it was at (0, -5.0, 0) at timeCode = 45. Which of the following changes in rootLayer.usda would place Sphere at -5.0 in the Y-axis at timeCode 45? Note that it is okay if the position of Sphere at other timeCodes is changed. Choose two.

A.

Add a (0, -5, 0) translate xformOp timeValue to "World" at timeCode 45:

def Xform "World"

{

double3 xformOp:translate.timeSamples = {

45: (0, -5.0, 0),

}

uniform token[] xformOpOrder = ["xformOp:translate"]

}

B.

Change the layer metadata endTimeCode from 60 to 45:

#usda 1.0

(

endTimeCode = 45

startTimeCode = 1

)

C.

Add a 15 timeCode frame layer offset to the Sphere reference:

def Sphere "Sphere" (

prepend references = @./layer1.usda@ < /Asset/Sphere > (offset = 15)

)

{

}

D.

Add the following xformOp overrides to "Sphere":

double3 xformOp:translate.timeSamples = {

1: (0, 5.0, 0),

30: (0, -2.5, 0),

60: (0, -5.0, 0)

}

uniform token[] xformOpOrder = ["xformOp:translate"]

Full Access
Question # 10

In OpenUSD, which USDA snippet correctly uses a payload to reference an external asset while allowing deferred loading?

A.

def "Character" (prepend payload = @character.usda@) { }

B.

def "Character" { prepend payloads = @character.usd@ }

C.

def Xform "Character" (reference = @character.usda@) { }

D.

def Xform "Character" (payload = @character.usd@) { }

Full Access
Question # 11

What fundamental data type in USD is most suitable for representing texture files?

A.

tokens

B.

strings

C.

asset paths

Full Access
Question # 12

Suppose you had the following layer:

#usda 1.0

(

defaultPrim = "ParentXform"

)

def Xform "ParentXform"

{

def Mesh "ChildMesh"

{

}

}

If you wanted to add a property to "ParentXform" such that it would automatically propagate to "ChildMesh" without having to add the same property to "ChildMesh", which of the following changes to "ParentXform" would make this work?

A.

Add the property as a custom attribute:

custom string myProperty = "TestValue"

B.

Add the property as a relationship to < /ParentXform/ChildMesh > :

rel myProperty = < /ParentXform/ChildMesh >

C.

Add the property as a primvar, with "constant" interpolation:

string primvars:myProperty = "TestValue" (

interpolation = "constant"

)

Full Access
Question # 13

You are a developer creating an OpenUSD exporter for an application that also supports import of USD assets. To enable collaborative workflows, you're adding an “export as overrides” option.

Which approach correctly describes which structure your exporter should generate?

A.

Overs of the prims and properties that have been modified or added, omitting unchanged data.

B.

Export each prim separately into multiple layers, and reference them individually to maintain sparsity.

C.

Include explicit definitions of all prims, properties, and relationships exactly matching the imported asset to ensure consistency.

Full Access
Question # 14

You and your colleague open the same USD layer but one of you observes missing geometry. What could be the reason why?

A.

USD automatically adjusts composition based on available system memory.

B.

Instance prototypes are composing to different identifiers.

C.

Differently configured asset resolvers are resolving to different versions of the asset.

Full Access
Question # 15

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?

A.

Codeless schemas enable interchange by loading .usda definitions directly, avoiding the need to compile or link against custom schema code libraries.

B.

Codeless schemas provide more convenient, strongly-typed C++ and Python APIs for property access compared to code generated via usdGenSchema.

C.

Generated schemas cannot define fallback attribute values within their .usda definition, making interchange less consistent across applications.

D.

Only codeless schemas are added to the schema registry, allowing them to participate in property value resolution correctly.

Full Access
Question # 16

If you have a Usd.Prim object named my_prim and you want to specifically retrieve an attribute named "size", which method would you typically use?

A.

my_prim.GetAttribute("size")

B.

my_prim.GetRelationship("size")

C.

my_prim.GetProperty("size")

D.

my_prim.GetPrimvar("size")

Full Access
Question # 17

In the context of UsdGeomMesh, which statement is true about mesh normals?

A.

The number of authored normals must be equal to the number of points in a polygonal mesh.

B.

vertex normals are used for subdivision meshes and faceVarying normals are used only for polygonal meshes.

C.

faceVarying normals are specified per face corner, while vertex normals specify a single normal per point.

Full Access
Question # 18

When developing a custom USD schema, what statements are true regarding API schemas versus typed schemas? Choose two.

A.

API schemas can be applied to multiple prim types while typed schemas define a specific prim type.

B.

Multiple API schemas can be applied to a single prim, but a prim can only have one typed schema.

C.

API schemas are more strict than typed and cannot define their own attributes or relationships.

D.

API schemas require Python bindings while typed schemas can be implemented to only support C++.

Full Access
Question # 19

Which of the following are immutable once a USD Stage has been opened? Choose two.

A.

Rules for loading payloads from prims in the stage.

B.

Layers that are muted or unmuted in the stage.

C.

The path resolver context that is bound to the stage.

D.

Variant fallbacks for prims without variant selection in the stage.

Full Access
Question # 20

Considering the following scene description:

def "ParkingLot"

{

def "Car_1" (

instanceable = true

references = @Car.usd@

)

{

}

def "Car_2" (

instanceable = true

references = @Car.usd@

)

{

}

}

Disabling the instanceable metadata on the prim at path /ParkingLot/Car_2 by setting it to false has the following effects: Choose two.

A.

Other prims using the same prototype, such as /ParkingLot/Car_2, will also get their instanceable metadata disabled.

B.

Existing opinions in a local layer from the root LayerStack targeting a child of /ParkingLot/Car_1 will take effect.

C.

Existing opinions in a local layer from the root LayerStack targeting a child of /ParkingLot/Car_1 will be ignored.

D.

Recomposition will be triggered from the hierarchy starting at /ParkingLot/Car_1.

Full Access
Question # 21

What key capability distinguishes an IsA schema from an API schema?

A.

An IsA schema can impart a typeName to a prim, whereas an API schema cannot.

B.

API schemas can have relationships, while IsA schemas cannot.

C.

IsA schemas are always concrete, while API schemas are always non-concrete.

Full Access