Which of the following sentences are correct when converting between .usda, .usdc, .usd and .usdz files? Choose two.
A .usda file can be converted to a .usdz file using usdcat.
A .usda file can be converted to a .usdc file using usdcat.
A .usda file can be converted to a .usd file by simply renaming it.
A .usda file can be converted to a .usdc file by simply renaming it.
Options B and C are correct. The official OpenUSD layer-format conversion tutorial states that usdcat can convert between layer formats using the -o option and an output filename with the desired extension. For example, converting text .usda to binary .usdc is performed with a command such as usdcat -o NewSphere.usdc Sphere.usda.
Option C is also correct because .usd is an extension that can hold either text or binary USD data. The same OpenUSD tutorial explains that a .usda or .usdc file can be converted to .usd without changing the underlying format by simply renaming the file; USD detects the actual format when opening it.
Option A is not correct in this context because .usdz is a package/archive format, and the OpenUSD toolset identifies usdzip, not usdcat, as the utility for creating .usdz packages containing USD assets. Option D is incorrect because renaming a text .usda file to .usdc does not convert it into USD’s binary crate representation. This aligns with Data Exchange → USD File Formats, usdcat, usdzip, USDA, USDC, USD, and USDZ Packaging .
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.
Other prims using the same prototype, such as /ParkingLot/Car_2, will also get their instanceable metadata disabled.
Existing opinions in a local layer from the root LayerStack targeting a child of /ParkingLot/Car_1 will take effect.
Existing opinions in a local layer from the root LayerStack targeting a child of /ParkingLot/Car_1 will be ignored.
Recomposition will be triggered from the hierarchy starting at /ParkingLot/Car_1.
Setting instanceable = false on an instance root is a deinstancing operation. NVIDIA’s Learn OpenUSD instancing material explains that instanceable prims share composed data through implicit prototypes, and that scenegraph instances restrict sparse descendant overrides because instance proxies are not directly editable. In NVIDIA’s instance-refinement guidance, the three practical rules are: prototypes are not editable, instance proxies are not editable and local opinions are discarded, while the instanceable prim itself remains editable. ( docs.nvidia.com )
Therefore, when the targeted instance root is deinstanced, local opinions authored under that prim’s descendant paths can become effective because the subtree is no longer represented only through the shared prototype. USD must also recompose that hierarchy because changing instanceable changes whether the prim contributes to prototype sharing or composes its own local subtree. Option A is incorrect because disabling instanceable on one prim does not mutate metadata on other prims that previously shared the prototype. Option C describes the still-instanced behavior, not the deinstanced result. In the screenshot, the stem names /ParkingLot/Car_2 while options B and D name /ParkingLot/Car_1; the correct effects apply to the prim whose instanceable metadata is disabled. This aligns with Content Aggregation → Scenegraph Instancing, Instance Refinement, Deinstancing, and Recomposition .
What sort of plugin implements logic to locate resources such as @mycompany://path/to/my/resource@?
Custom schema plugin
Hydra plugin
Asset resolver plugin
Custom metadata plugin
The correct plugin type is an asset resolver plugin . In OpenUSD, asset paths such as @mycompany://path/to/my/resource@ are not interpreted as ordinary strings; they are asset identifiers that must be resolved into concrete resources that USD can consume. NVIDIA’s Learn OpenUSD glossary defines asset resolution as the process of translating an asset path into the actual location of a usable resource and states that USD provides the ArResolver plugin point for custom resolution logic, including external databases, custom storage systems, version-control systems, or studio-specific URI schemes.
Option C is correct because a custom asset resolver is precisely where pipeline-specific resource lookup logic belongs. Option A is incorrect because a custom schema plugin defines prim types, API schemas, and properties, not asset-location behavior. Option B is incorrect because Hydra plugins are concerned with imaging, rendering, and scene-index/render-delegate behavior. Option D is incorrect because custom metadata may store extra data, but it does not implement resolution of asset identifiers. This aligns with Pipeline Development → Asset Resolution, ArResolver, Resource Location, Versioned Assets, and Pipeline Integration .
Which statement correctly describes how UsdGeomSubsets can be used to organize geometry for specific material assignments or rendering attributes in OpenUSD?
They partition a single UsdGeomMesh into distinct groups that can have materials independently bound to them.
They can provide finer-grained control of UsdGeomImageable properties, e.g. visibility or purpose, on subsets of faces.
They force a mesh to be tessellated at the boundary of each subset for improved visual quality.
They must be defined at the root OpenUSD stage level for them to apply to any mesh.
UsdGeomSubset is used to identify subsets of a geometric primitive, most commonly groups of mesh faces, so that those groups can receive independent material bindings or other subset-level organization. The OpenUSD API states that materials are bound to GeomSubsets using the same UsdShade material-binding mechanisms used for regular geometry. It also states that a GeomSubset must be a direct child of the geometric prim it applies to, making discovery efficient and clearly scoped to that geometry.
Option A is correct because a single mesh can be partitioned into face groups, and each subset can be assigned a different material. Option B is incorrect because UsdGeomSubset is not a UsdGeomImageable; therefore, imageable properties such as visibility or purpose cannot be authored on it. Option C is incorrect because subsets classify elements; they do not force tessellation or modify mesh topology. Option D is incorrect because subsets are authored below the relevant geometric primitive, not at the root stage level. This aligns with Data Modeling → Geometry Organization, Mesh Face Subsets, UsdGeomSubset, and UsdShade Material Binding .
You are setting up an outdoor scene with realistic lighting and want to simulate the effect of the sun. Which UsdLux light type is most appropriate for this purpose, providing a directional light source with parallel rays?
RectLight
DomeLight
DistantLight
SphereLight
The correct UsdLux light type is DistantLight . NVIDIA’s Learn OpenUSD lighting guide identifies UsdLux.DistantLight as a schema where light is emitted from a distant source along the negative Z axis, commonly known as a directional light. This makes it the most appropriate light type for representing sunlight in an outdoor scene.
Option C is correct because sunlight is effectively modeled as coming from an extremely distant source, so its rays are treated as broadly parallel across the scene. The OpenUSD DistantLight schema documentation explicitly describes it as typically used for distant, broad light sources like sunlight, where rays affect the entire scene and are roughly parallel. It also notes that the inputs:angle attribute controls angular diameter; the fallback value approximates the Sun’s apparent angular size from Earth.
Option A , RectLight, is better suited for rectangular area emitters such as panels or windows. Option B , DomeLight, is commonly used for environment or HDRI lighting. Option D , SphereLight, represents local emission from a spherical source, such as a bulb. This aligns with Visualization → UsdLux, Lighting Schemas, DistantLight, Directional Lighting, and Outdoor Illumination .
Which of the following methods allows you to edit the color of an instanceProxy mesh in OpenUSD while keeping the prim instanced?
Directly modifying the instance's geometry properties.
Using primvars to change the color of the mesh or assigned material.
Creating a relationship targeting the mesh's color attribute.
Replacing the entire instance with a new mesh that has the desired color.
The correct method is to use primvars to drive shading variation while preserving instancing. NVIDIA’s Learn OpenUSD scenegraph instance refinement guidance states that prototypes are runtime data and are not editable, instance proxies are not editable, and local opinions on instance proxies are discarded. It then identifies hierarchical refinement as the appropriate strategy for non-destructive instance variation, including inherited primvars. Primvars can drive material properties such as color, inherit down the prim hierarchy, and be authored on the instanceable prim or an ancestor so materials inside the instance subgraph can read the inherited value.
Option B is correct because it changes the effective appearance without directly editing the instance proxy mesh and without disabling instancing. Option A is incorrect because directly modifying an instance proxy’s geometry properties is not allowed. Option C is incorrect because a relationship targeting a color attribute is not the standard mechanism for material color variation. Option D is incorrect because replacing the mesh defeats the purpose of preserving the instanced asset structure. This aligns with Content Aggregation → Asset Modularity and Instancing → Refining Scenegraph Instances, Hierarchical Refinement, Primvars, and Instance Editability .
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?
Visibility is explicit in OpenUSD, so the Cube must be explicitly authored as invisible.
Nested gprims are illegal in OpenUSD, and their imaging behavior is undefined.
Visibility is hierarchical in OpenUSD, so the root Xform must be made invisible in order for all of its descendants to be invisible.
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 .
Why is extract, transform, load (ETL) a useful design pattern for USD data exchange? Choose two.
It guarantees that all data converted to OpenUSD is lossless and identical to the original format.
It separates concerns, making it easier to maintain and adapt data exchange pipelines for different needs.
It ensures that all OpenUSD workflows use a standardized data structure, regardless of the original format.
It helps preserve the integrity of the original data format while allowing tailoring for different use cases.
ETL is useful for USD data exchange because it separates the problem into disciplined phases instead of forcing extraction, interpretation, optimization, and client-specific restructuring into one converter step. NVIDIA’s Learn OpenUSD data exchange guidance describes a two-phase approach, extract and transform, inspired by ETL. The extract phase should translate source data to OpenUSD as directly as possible, mapping source concepts to USD concepts to preserve the integrity and structure of the original data. The transform phase then applies optional changes such as user export options, content-structure changes, and optimizations for workflow or client performance.
Option B is correct because this separation of concerns makes converters easier to maintain, test, and adapt. Option D is correct because the pattern preserves source fidelity first, then permits controlled tailoring for specific downstream needs. Option A is incorrect because NVIDIA explicitly notes that data exchange is typically lossy and not every data model maps directly. Option C is incorrect because the guide states there is no single content structure suitable for every organization or workflow. This aligns with Data Exchange → Two-Phase Data Exchange, Data Extraction, Data Transformation, Export Options, and Pipeline Adaptability .
What is a key difference between referencing and sublayering?
References cannot be reordered like sublayers.
References have a stronger strength ordering than sublayers.
A prim can have many sublayers, but only one reference.
Referencing brings in a hierarchy rooted at a single prim, while sublayering brings in all of a layer's content.
The key distinction is the scope of what each composition arc contributes. Sublayering composes the contents of one layer into another layer stack, bringing in the layer’s scene description as a whole. It is commonly used to combine broad workstream layers such as modeling, layout, animation, lighting, or shot overrides. Referencing , by contrast, is authored on a prim and brings scene description from an external layer, typically rooted at a selected prim or the referenced layer’s default prim. This makes references ideal for asset composition, where a model, prop, environment element, or component is introduced at a specific namespace location.
Option D is correct because it precisely captures this namespace behavior: references target and compose a prim hierarchy, while sublayers contribute all layer contents into the layer stack. Option A is incorrect because reference list operations can also be ordered and edited. Option B is misleading because composition strength is governed by USD’s LIVERPS ordering and layer-stack strength, not a simple statement that references are always stronger. Option C is incorrect because a prim can have multiple references through list editing. This aligns with Composition → Sublayers, References, Layer Stacks, Namespace Composition, and LIVERPS Strength Ordering .
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?
Add the property as a custom attribute:
custom string myProperty = "TestValue"
Add the property as a relationship to < /ParentXform/ChildMesh > :
rel myProperty = < /ParentXform/ChildMesh >
Add the property as a primvar, with "constant" interpolation:
string primvars:myProperty = "TestValue" (
interpolation = "constant"
)
The correct mechanism is a constant-interpolation primvar . NVIDIA’s Learn OpenUSD glossary defines primvars as primitive variables authored using the primvars: namespace and interpolation metadata such as constant, uniform, vertex, and faceVarying. Primvars are designed to carry geometric or shading-related data in a way that consumers can discover through UsdGeomPrimvarsAPI and UsdGeomPrimvar. ( docs.nvidia.com )
Option C is correct because constant primvars can inherit down the namespace hierarchy. The OpenUSD UsdGeomPrimvar documentation states that constant interpolation primvar values can be inherited by child prims unless those children author their own opinion for the same primvar. ( openusd.org ) This allows primvars:myProperty authored on /ParentXform to be discovered on /ParentXform/ChildMesh without duplicating the property on the mesh.
Option A is incorrect because ordinary custom attributes do not automatically propagate to descendant prims. Option B is incorrect because a relationship targets another object; it does not create inherited property data on that target. This aligns with Data Modeling → Primvars, Constant Interpolation, Namespace Inheritance, and Geometric Property Authoring .
In what way do variant sets in OpenUSD enhance flexibility in scene descriptions?
By allowing runtime selection among alternative representations of a prim.
By permanently embedding multiple scene configurations within a single prim.
By enabling automatic resolution of conflicting opinions across layers.
By statically merging all possible variants into one combined representation.
Variant sets enhance flexibility by allowing a prim to expose named alternatives, where a selected variant contributes its authored opinions into the composed scene. NVIDIA’s Learn OpenUSD guide states that variant sets define alternative representations for a prim and allow switching between them without duplicating data. Typical uses include model shapes, looks, materials, and levels of detail. It further explains that a prim can have one or more named variant sets, each containing variant choices, and that the selected variant composes the opinions authored for that variant at the prim where the variant set is defined.
Option A is correct because applications, stronger layers, or session layers can select among alternatives non-destructively. Option B is misleading because variants are not permanently embedded as a single active configuration; only the selected variant participates in composition. Option C is incorrect because conflict resolution is governed by USD composition and value-resolution rules, not by variant sets alone. Option D is incorrect because USD does not merge every possible variant into one representation. This aligns with Composition → Variant Sets, Variant Selections, Composition Arcs, and LIVERPS Strength Ordering .
Which of the following are true for SdfChangeBlocks? Choose two.
Notifications are muted for changes done within the block, even after the block exits
Existing metadata and properties can be changed using USD APIs within the same block
It is unsafe to query Prims that are mutating within the same block
It is unsafe to delete or create new PrimSpec hierarchies using Sdf APIs
Strictly evaluated against the OpenUSD API contract, C is the only fully correct statement as written. SdfChangeBlock groups multiple low-level Sdf edits so that change processing can be delayed and handled efficiently as one batch. The official API documentation states that opening a change block causes Sdf to delay notifications until the outermost block exits; notifications are queued, not permanently muted. Therefore, A is incorrect. The same documentation gives a strong warning that it is not safe to use Usd or other downstream APIs while a change block is open, because those representations may be stale or may hold expired handles to Sdf objects. Therefore, querying mutating prims during the block is unsafe, making C correct.
Option B is incorrect because it explicitly says to use USD APIs inside the block, which the official guidance warns against. Option D is also incorrect because the intended safe authoring pattern is to gather required edits first, then apply them directly through the Sdf API inside the change block. This aligns with Pipeline Development → Efficient Authoring, Sdf Layers, SdfChangeBlock, Change Notification, and Bulk Scene Description Mutation .
What is the correct prim type in UsdShade for sharing reusable portions of shading networks, allowing for parameterization?
SubNetwork
Custom Schema
NodeGraph
The correct UsdShade prim type is NodeGraph. NVIDIA’s Learn OpenUSD material introduces UsdShade as the schema family used for creating and binding materials, where materials store renderer-facing shading definitions. The OpenUSD UsdShade specification defines UsdShadeNodeGraph as the mechanism for packaging shading networks into reusable units. A node graph can contain shader nodes and nested node graphs, expose public inputs as an interface, provide outputs, and be referenced into larger networks as a reusable building block.
Option C is correct because NodeGraph is explicitly designed for reusable and parameterized shading-network structure. It allows a pipeline to encapsulate repeated shading logic while exposing only selected parameters to consuming materials or larger graphs. Option A is incorrect because SubNetwork is not the correct UsdShade prim type in OpenUSD. Option B is incorrect because a custom schema could theoretically define new data models, but it is not the standard UsdShade construct for reusable shader-network packaging. This aligns with Visualization → UsdShade, Materials, Shading Networks, NodeGraph Interfaces, Parameterization, and Reusable Material Components .
Referring to dining_room.usda, which of the following best describes the role of the references composition arc on the /Root/Chair prim?
#usda 1.0
def Xform "Root"
{
def Xform "Chair" (
references = @chair.usda@
)
{
float3 xformOp:scale = (1.5, 1.5, 1.5)
}
}
It creates a bidirectional link between the local /Root/chair prim and chair.usda so that any changes in one are automatically reflected in the other.
It is used to import variant sets from chair.usda into the local /Root/chair prim.
It completely replaces the local /Root/chair prim with the contents of chair.usda, ignoring any local attribute definitions such as scale.
It composes the definition from chair.usda with the local /Root/Chair. The local xformOp:scale overrides corresponding referenced opinions.
A reference composition arc brings scene description from another asset into the prim where the reference is authored, then combines that referenced data with local opinions on the destination prim. NVIDIA’s Learn OpenUSD references guide states that when a prim is composed through a reference arc, USD first composes the layer stack of the referenced prim, adds the resulting prim spec to the destination prim, and then applies overrides or additional composition arcs from the destination prim.
Option D is correct because /Root/Chair receives the composed contents of chair.usda, while the locally authored xformOp:scale = (1.5, 1.5, 1.5) remains part of the destination prim’s stronger local opinions. If the referenced chair asset also authored a corresponding scale opinion on the same property, the local opinion would win by standard USD strength ordering, where stronger opinions override weaker ones non-destructively.
Option A is incorrect because references are not bidirectional synchronization links; editing the referencing layer does not automatically modify chair.usda. Option B is too narrow because references compose all targeted scene description, not only variant sets. Option C is incorrect because a reference does not discard local opinions. This aligns with Composition → References, Local Opinions, Layer Strength, and Non-Destructive Overrides .
You and your colleague open the same USD layer but one of you observes missing geometry. What could be the reason why?
USD automatically adjusts composition based on available system memory.
Instance prototypes are composing to different identifiers.
Differently configured asset resolvers are resolving to different versions of the asset.
The most plausible cause is that the two environments are resolving asset identifiers differently. NVIDIA’s Learn OpenUSD glossary defines asset resolution as the process of translating an asset path into the actual location of a consumable resource, and identifies ArResolver as the plugin point that can be customized to resolve assets through site logic, databases, or version-control systems.
Option C is correct because the same authored USD layer can contain references, payloads, textures, or other asset-valued paths that are resolved at runtime. If one user’s resolver context maps @character.usd@ to version 12 while another maps it to version 15, or if one environment cannot resolve a dependency at all, the composed stage can differ. This can manifest as missing geometry, stale geometry, missing materials, or unresolved payloads. References and payloads are composition arcs that bring external scene description into the stage, so resolution differences directly affect what data is available for composition.
Option A is incorrect because USD does not change composition semantics based on available memory. Option B is not the primary explanation here; instance prototypes are derived from composed instance data, but the root problem described is inconsistent asset resolution. This aligns with Debugging and Troubleshooting → Asset Resolution, References, Payloads, Resolver Contexts, Missing Dependencies .
What geometric attribute should be kept in sync when updating point position values on an object?
purpose
xformOps
extent
faceVertexIndices
The geometric attribute that should be kept in sync is extent. In OpenUSD, point position values describe the authored point locations for point-based geometry, while extent represents the local-space geometric range or bounding box of a boundable primitive. The OpenUSD UsdGeomBoundable specification describes extent as a three-dimensional range measuring the authored gprim in its own local space, and states that if extent is authored, it should be authored at every time sample where geometry-affecting properties are authored to ensure correct evaluation.
Option C is correct because changing point positions can change the object’s local bounds. If the authored extent is not updated, downstream systems may compute incorrect framing, culling, selection bounds, or bounding-box display. Option A is incorrect because purpose classifies geometry for render, proxy, guide, or default visibility categories. Option B is incorrect because xformOps describe transform operations on the prim, not the local geometric bounds derived from point positions. Option D is incorrect because faceVertexIndices describes mesh topology, not the bounding range. This aligns with Data Modeling → Geometry Attributes, Point-Based Geometry, Boundable Prims, Extent, and Time-Sampled Geometry .
When designing a scalable asset structure, which two aspects should be primarily considered? Choose two.
Innovation and future-proofing
File formats and compression methods
Clients and collaborators
Modularity and performance
A scalable asset structure should be designed around the needs of clients and collaborators and around structural principles such as modularity and performance . NVIDIA’s Learn OpenUSD asset-structure guidance states that a well-designed scalable asset structure should always be tailored to the needs of clients and collaborators. It also emphasizes that collaboration is core to OpenUSD and that scalable structures should support parallel workstreams across multiple dimensions.
Option C is correct because asset structure is not created in isolation; it must serve the downstream consumers, artists, tools, departments, and delivery requirements that will interact with the asset. Option D is correct because NVIDIA identifies the four principles of scalable asset structure as Legibility, Modularity, Performance, and Navigability . Modularity enables reuse and flexible composition, while performance ensures efficient reads, writes, loading, and interaction at production scale.
Option A is too vague and not one of the named primary design aspects. Option B can matter tactically, but file formats and compression are implementation choices, not the primary asset-structure design drivers. This aligns with Content Aggregation → Asset Structure Principles → Clients, Collaborators, Modularity, Performance, and Scalability .
What fundamental data type in USD is most suitable for representing texture files?
tokens
strings
asset paths
The most suitable USD data type for representing texture files is an asset path . NVIDIA’s Learn OpenUSD glossary defines an asset as a named reusable resource and explicitly includes textures among asset examples. It also explains that USD provides a specialized string type called asset so that attributes and metadata referring to external resources can be identified robustly. In USDA syntax, asset-valued strings are delimited with @, such as @textures/albedo.png@.
Option C is correct because texture files are external resources that should participate in USD’s asset-resolution system. Using an asset path allows the resolver to map the authored identifier to an actual file location, versioned asset, package member, or site-specific storage location. Option A is incorrect because tokens are compact identifiers best suited to enumerated values such as purpose, interpolation, or role-like names. Option B is less appropriate because ordinary strings do not communicate that the value is an external asset dependency requiring resolution. This distinction is essential for interchange, packaging, relocation, and pipeline portability. This aligns with Data Exchange → Asset Paths, Asset Resolution, Texture Dependencies, Sdf Value Types, and External Resource References .
TESTED 25 Aug 2026
