OpenUSD Development Questions and Answers
Which of the following are valid principles of asset structure? Choose three.
Options:
Legibility
Redundancy
Navigability
Modularity
Compressability
Answer:
A, C, DExplanation:
The valid asset-structure principles are Legibility , Navigability , and Modularity . NVIDIA’s Learn OpenUSD asset-structure guide identifies four principles of scalable asset structure: Legibility , Modularity , Performance , and Navigability . It defines legibility as making an asset structure easy to understand and interpret, modularity as enabling flexibility and reuse, and navigability as making it easy for users to find and access the features and properties they need. ( docs.nvidia.com )
Option A is correct because clear names, organization, and intent make assets easier to troubleshoot, exchange, and maintain. Option C is correct because downstream users and tools must be able to locate meaningful prims, properties, variants, payloads, and interfaces efficiently. Option D is correct because reusable modular components support parallel workstreams and scalable aggregation. Option B is incorrect because redundancy is generally discouraged; NVIDIA’s modularity guidance emphasizes reuse and avoiding duplicated data. Option E is incorrect because “compressability” is not one of the stated principles. This aligns with Content Aggregation → Asset Structure Principles → Legibility, Modularity, Performance, Navigability .
What is a key difference between referencing and sublayering?
Options:
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.
Answer:
DExplanation:
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 .
When constructing an OpenUSD scene, in which scenario is it most appropriate to use a payload instead of a reference?
Options:
When an asset requires frequent updates, but the asset should default to the latest version.
When deferring the loading of heavy assets until they are needed, thereby improving initial load performance.
When the asset is small and inexpensive to load to ensure efficient transfer over web protocols.
When it's important to ensure that all referenced data is immediately available on stage load.
Answer:
BExplanation:
A payload is most appropriate when the scene contains heavy assets that should not be fully composed and loaded until needed. NVIDIA’s Learn OpenUSD payload lesson describes payloads as similar to references, but with the added ability to load and unload them on demand. It gives the example of opening a large city scene with all payloads unloaded so the stage loads quickly, then selectively loading only the city block or asset of interest. When loaded, the payloaded layers and their composed dependencies are brought into the scene.
Option B is correct because payloads are designed for deferred loading, scalable working sets, reduced initial load time, and lower memory cost. Option A describes versioning or asset-resolution policy, not the primary distinction between payloads and references. Option C does not justify a payload; small inexpensive assets are often fine as references. Option D describes the opposite of payload behavior, because references are composed immediately, while payload traversal can be deferred. This aligns with Composition → References and Payloads, Load/Unload Behavior, Composition Arcs, Scalability, and LIVERPS Strength Ordering .
Which statement accurately describes a key difference between native instancing and point instancing?
Options:
Point instancing generates prototypes dynamically, while native instancing uses statically defined prims.
Native instancing can only use a single prototype per scene, while point instancing can use multiple prototypes.
Native instancing requires prototypes to be defined in separate files, while point instancing requires them in the same layer.
Native instances are individually addressable prims in the scene hierarchy after composition, while point instances are not.
Answer:
DExplanation:
The key distinction is addressability and representation. Native, or scenegraph, instancing preserves each instance as a prim in the composed scene hierarchy. Each instance root can have its own path, transform, metadata, and root-level refinements while sharing an implicit prototype generated from matching instanceable composition. OpenUSD’s scenegraph instancing documentation explains that prims bringing in common scene description through composition arcs can share those composed subgraphs rather than duplicating them per prim.
Point instancing, by contrast, is a vectorized representation. NVIDIA’s instancing guide states that point instancing represents repeated instances through array attributes such as positions, orientations, scales, prototype indices, and prototype relationships. It is more compact because it does not require a prim for each instance , but this comes with reduced flexibility and addressability.
Option D is correct because native instances remain individually addressable scenegraph prims, while point instances are addressed through array elements and IDs rather than unique prim paths. A reverses prototype behavior: native instancing uses implicit prototypes, while point instancing uses explicit prototype relationships. B and C impose restrictions that do not exist. This aligns with Content Aggregation → Scenegraph Instancing, PointInstancer, Prototypes, Addressability, and Scalable Repetition .
What key capability distinguishes an IsA schema from an API schema?
Options:
An IsA schema can impart a typeName to a prim, whereas an API schema cannot.
API schemas can have relationships, while IsA schemas cannot.
IsA schemas are always concrete, while API schemas are always non-concrete.
Answer:
AExplanation:
The key distinction is that an IsA schema , also called a typed schema, defines the fundamental type of a prim through its typeName metadata. NVIDIA’s Learn OpenUSD glossary states that IsA schemas define a prim’s fundamental type through typeName, and that each prim has only one IsA schema determining its core nature, such as Mesh, Camera, or Light. NVIDIA’s schemas lesson also states that, unlike IsA schemas, API schemas do not assign a typeName; instead, they are list-edited in the apiSchemas metadata and queried using HasAPI. ( NVIDIA Docs )
Option A is correct because it directly identifies the defining capability of an IsA schema: imparting a prim type. API schemas instead augment already-typed prims with additional properties or behavior. Option B is incorrect because both IsA and API schemas may define attributes and relationships. Option C is incorrect because IsA schemas are not always concrete; for example, OpenUSD includes abstract typed schemas such as imageable base classes, while concrete typed schemas are instantiable prim types. This aligns with Customizing USD → Schemas, IsA Schemas, API Schemas, Schema Registry, typeName, and apiSchemas Metadata .
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.
Options:
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.
Answer:
B, DExplanation:
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 .
Which statement correctly describes how UsdGeomSubsets can be used to organize geometry for specific material assignments or rendering attributes in OpenUSD?
Options:
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.
Answer:
AExplanation:
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 debugging a stage where a prim is expected to have opinions from a referenced asset, but those opinions are not appearing in the composed scene. Which of the following are logical things to check to troubleshoot this issue?
Options:
Whether a payload has opinions that may be overriding the opinions from the referenced asset.
Whether the referenced asset has the valid model kind set to maintain a proper model kind hierarchy.
Whether the prim has any variant selections active that might be hiding or overriding the referenced content.
Whether the reference path is correct and the referenced asset exists at that location.
Answer:
C, DExplanation:
The first logical checks are the reference target and any variant selections affecting the prim. Option D is correct because if the referenced asset path is wrong, the asset cannot be resolved, or the referenced layer lacks the expected target prim or defaultPrim, the referenced opinions will not appear. NVIDIA’s default-prim guidance explains that a reference without a prim path relies on the referenced layer’s defaultPrim; without it, the reference can compose as empty. ( docs.nvidia.com )
Option C is also correct because variant selections can alter what scene description is composed. NVIDIA’s variant-set material explains that variants may change attributes, visibility, activation, or even reference paths; when variants change references or activation, USD recomputes the composed structure. ( docs.nvidia.com )
Option A is generally not the right diagnosis because payload arcs are weaker than reference arcs in standard LIVERPS ordering, so they are not the first candidate for overriding a reference at the same site. Option B is unrelated to whether a reference composes; model kind affects organization and traversal, not basic reference resolution. This aligns with Debugging and Troubleshooting → References, Asset Resolution, defaultPrim, Variant Selections, and Composition Diagnostics .
What is a way to utilize both USDA and USDC as part of a scene?
Options:
Use USDC for prims related to shading and USDA for all other prim types.
Use USDA for non-geometric prims and USDC for geometric and animation data.
Use USDA entirely as USDC is most helpful for when debugging issues with scenes.
Answer:
BExplanation:
A practical mixed-format strategy is to use human-readable USDA for lighter, structural, or non-geometric layers, while using binary USDC for heavier geometry and animation data. NVIDIA’s Learn OpenUSD layer guidance identifies .usd, .usda, and .usdc as USD layer formats, where each layer is a modular source of scene description that can participate in composition. ( docs.nvidia.com ) This means a scene can compose different layers with different encodings through sublayers, references, payloads, and other arcs.
Option B is correct because it reflects the common pipeline division: USDA is convenient for inspection, debugging, review, and hand-authored structural opinions, while USDC is better suited for dense numeric data such as meshes, point caches, and time-sampled animation because it is compact and efficient for machine consumption. The official OpenUSD toolset also supports conversion between formats using tools such as usdcat, allowing pipelines to choose the representation that best fits each layer’s purpose. ( openusd.org )
Option A is too rigid; shading data does not require USDC. Option C reverses the usual debugging distinction because USDA is the readable format commonly preferred when inspecting scene text. This aligns with Data Exchange → USD File Formats, Layer Composition, USDA, USDC, and Pipeline File Strategy .
You and your colleague open the same USD layer but one of you observes missing geometry. What could be the reason why?
Options:
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.
Answer:
CExplanation:
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 .
In OpenUSD, which USDA snippet correctly uses a payload to reference an external asset while allowing deferred loading?
Options:
def "Character" (prepend payload = @character.usda@) { }
def "Character" { prepend payloads = @character.usd@ }
def Xform "Character" (reference = @character.usda@) { }
def Xform "Character" (payload = @character.usd@) { }
Answer:
AExplanation:
Option A is the correct USDA pattern because a payload is authored as prim metadata using the singular payload keyword with a list-editing operation such as prepend. NVIDIA’s Learn OpenUSD payload exercise shows the canonical USDA form: prepend payload = @./red_cube.usd@, authored on the prim declaration. It further explains that payloads are similar to references in USDA, with the important distinction that the keyword is payload rather than references.
The key technical purpose of a payload is deferred loading. NVIDIA explains that payloads can compose scene description when loaded, or unload the targeted scene description beneath the payloaded prim. It also contrasts this with references, which are always composed and present on the stage, while payloads can be opened unloaded and selectively loaded later.
Option B is incorrect because payloads is not the USDA keyword and it is not authored as a property inside the prim body. Option C uses a reference, not a payload, so it does not provide payload load/unload behavior. Option D is not the canonical list-op form expected here. This aligns with Composition → References and Payloads → Working With Payloads .
Which of the following statements about OpenUSD plugin development are true? Choose two.
Options:
File format plugins are responsible for translating foreign file formats into OpenUSD-compatible data.
Custom plugins can extend OpenUSD by adding new data types and behaviors.
OpenUSD plugins can be developed as Python-only plugins for faster, iterative development.
All plugins require recompiling USD so that they can be used and recognized by USD.
Answer:
A, BExplanation:
OpenUSD’s plugin architecture is a major customization mechanism. Option A is correct because NVIDIA’s Learn OpenUSD Data Exchange material states that file format plugins allow OpenUSD to compose with additional file formats and non-file-based sources, translating the source format on the fly as a USD layer. It also notes that file format plugins may be bidirectional, supporting both reading and writing. ( docs.nvidia.com )
Option B is also correct because custom plugins can extend OpenUSD beyond built-in behavior. NVIDIA’s OpenUSD plugin samples include schemas, both codeful and codeless, file format plugins, dynamic payloads, and Hydra scene indices, demonstrating plugin-based extension of data models and runtime behavior. ( github.com )
Option C is not the best general statement for OpenUSD development certification in this context. Some tooling-level plugin systems can use Python, but core extensibility such as schema libraries and file format plugins commonly depends on plugin metadata and compiled libraries or generated schema artifacts. Option D is false because plugins are discovered through plugin registration metadata, such as plugInfo.json, and do not require recompiling USD itself. This aligns with Customizing USD → Plugins, Schemas, File Format Plugins, plugInfo.json, and Extensibility .
Why is a well-designed model kind hierarchy important for an efficient pipeline?
Options:
Tools can rely on the model kind hierarchy for efficient stage traversal.
The composition engine can optimize based on the model kind hierarchy.
The model kind hierarchy helps avoid duplication of pipeline data.
Answer:
AExplanation:
A well-designed model kind hierarchy is important because it gives tools a reliable, high-level “table of contents” for a complex stage. NVIDIA’s Learn OpenUSD guide explains that model hierarchy is designed to prune traversal at a relatively shallow point in the scenegraph. Without model hierarchy, traversal may need to pass through all prims in a scene, which can be costly. The key pruning point is the component model boundary: ancestors of components participate in the model hierarchy, while descendants are outside the model hierarchy.
Option A is correct because pipeline tools can use kind metadata to find meaningful asset boundaries, traverse assemblies and groups efficiently, and avoid descending into every geometric or implementation-level prim. Option B is inaccurate because kind metadata is not primarily a composition-engine optimization mechanism; USD composition resolves scene description based on composition arcs and strength ordering. Option C is also not the primary purpose. Avoiding duplication is addressed more directly by references, payloads, instancing, inherits, specializes, and asset-structure reuse. This aligns with Content Aggregation → Asset Structure → Model Hierarchy → Model Kinds, Components, Assemblies, Groups, and Efficient Traversal .
Which is the most appropriate combination of OpenUSD features to consider when trying to solve problems related to artists interaction with LODs, Material variations and Asset Versions?
Options:
VariantSets, Purposes and AssetResolvers
PrimAdapters, SceneIndex plugins and References
Inherits, Specializes and MaterialX
Answer:
AExplanation:
The most appropriate combination is VariantSets, Purposes, and AssetResolvers because each feature addresses one of the stated production problems at the correct abstraction level. Variant sets provide artist-facing switches for alternative representations of the same asset, including material variations, geometric variations, and LOD-style alternatives. NVIDIA’s Learn OpenUSD guide states that variant sets define alternative representations that can be switched at runtime, and that variants may override properties, define descendant prims, or author composition arcs.
Purposes help separate representation classes such as proxy, render, and guide. NVIDIA’s glossary describes purpose as a UsdGeomImageable attribute used to classify geometry into selective visibility categories, allowing clients to include or exclude categories during rendering, bounding, or interactive traversal.
Asset resolvers address asset versioning and storage indirection. NVIDIA’s asset-structure guidance specifically recommends keeping instances within a specific version and leveraging storage and asset-resolver capabilities to keep assets atomic.
Option B is more renderer/Hydra-infrastructure focused and does not directly solve artist-facing variation and versioning. Option C contains useful composition and shading tools, but it is not the best combined solution for LODs, material options, and asset versions. This aligns with Pipeline Development → Artist Workflows, Variant Sets, Purpose, Asset Resolution, and Asset Versioning .
What geometric attribute should be kept in sync when updating point position values on an object?
Options:
purpose
xformOps
extent
faceVertexIndices
Answer:
CExplanation:
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 .
Which option best describes the primary function of an inherit composition arc in OpenUSD?
Options:
Inherit arcs are a replacement for reference arcs when you have an opinion that needs to be stronger than opinions from a variant set.
Modifications to the inherited prim in stronger layer stacks allow for those overrides to be uniformly broadcast to all inheriting prims.
It provides a mechanism for implementing object-oriented programming (OOP) design patterns in your scene description design.
Answer:
BExplanation:
An inherit arc lets prims receive scene description from a source prim, commonly a class prim, and enables modifications to that inherited source to broadcast to all inheriting prims in the relevant composition context. NVIDIA’s Learn OpenUSD inherits lesson states that after an inherit arc is established, the source prim and its descendants can be modified in a stronger layer, including across references, and those modifications are broadcast and applied to all prims that inherit it. ( docs.nvidia.com )
Option B is correct because it captures the defining production use: central refinement of many related prims without editing every instance individually and without modifying the original referenced asset globally. NVIDIA’s strength-ordering lesson also describes inherits as the arc that allows opinions on one source prim to affect all prims that author an inherit arc to that source. ( docs.nvidia.com )
Option A is incorrect because inherits are not simply a replacement for references; they solve broadcast refinement and reusable opinion-sharing problems. Option C is conceptually adjacent but imprecise: inherits may resemble inheritance patterns, but USD inherit arcs are composition mechanisms, not an object-oriented programming system. This aligns with Composition → Inherits, Class Prims, Broadcast Refinement, Encapsulation, and LIVERPS Strength Ordering .
Which of the following statements best describes the purpose of OpenUSD file format plugins?
Options:
They extend OpenUSD's functionality by allowing it to read and write from various file formats.
They are only used for visualizing OpenUSD data and geometry in 3D applications.
They convert OpenUSD files to other formats without any loss of data or information.
They are designed to compress OpenUSD asset files for faster loading times.
Answer:
AExplanation:
OpenUSD file format plugins belong under the Data Exchange topic because they expand how USD participates in interchange workflows. Their purpose is to allow OpenUSD to read, interpret, and in some cases write data using formats beyond the native USD file types such as .usd, .usda, .usdc, and .usdz. Through these plugins, external file formats can be exposed to USD as layers and can participate in composition arcs such as references, payloads, and sublayers. This allows pipelines to integrate heterogeneous asset sources while still using USD’s scene description model, composition engine, and layer-based workflows.
Option A is correct because it directly identifies the function of file format plugins: extending OpenUSD functionality for reading and writing various file formats. Option B is incorrect because visualization is only one possible downstream use of exchanged data, not the purpose of the plugin system. Option C is incorrect because translation between formats does not inherently guarantee lossless preservation of every schema, opinion, or semantic construct. Option D is incorrect because compression is not the primary role of file format plugins. This aligns with the NVIDIA OpenUSD Development Study Guide topic Data Exchange , especially file formats, connectors, and plugin-based interoperability.
When a user is trying to change the drawMode of an element to bounds, and it doesn't work, what should you look into?
Options:
Kinds and GeomModelAPI schema are properly applied.
UsdPhysicsCollisionAPI schema is applied and extents are correct.
UsdVolVolume schema is applied and extents are correct.
UsdShadeMaterialBindingAPI schema is applied and a material is bound.
Answer:
AExplanation:
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 .
In the context of UsdGeomMesh, which statement is true about mesh normals?
Options:
The number of authored normals must be equal to the number of points in a polygonal mesh.
vertex normals are used for subdivision meshes and faceVarying normals are used only for polygonal meshes.
faceVarying normals are specified per face corner, while vertex normals specify a single normal per point.
Answer:
CExplanation:
Option C correctly describes the relationship between interpolation and element counts for mesh normals and normal-like primvars. In UsdGeomMesh, vertex interpolation provides one value per mesh point, while faceVarying interpolation provides one value for each face-vertex, meaning each corner of each face can carry its own value. This distinction is essential for representing smooth normals, hard edges, UV seams, and other discontinuities across faces. OpenUSD’s UsdGeomMesh documentation defines vertex interpolation as one element per point and faceVarying interpolation as one element for each face-vertex that defines the mesh topology.
Option A is incorrect because authored normals do not always have to match the number of points; the required count depends on the normals interpolation. Face-varying normals, for example, require one value per face corner rather than one per point. Option B is incorrect because normals should generally not be authored on subdivision meshes; subdivision algorithms define their own normals. OpenUSD notes that authored normals should only be used for polygonal meshes where subdivisionScheme = "none".
This aligns with Data Modeling → UsdGeomMesh, Normals, Primvar Interpolation, Vertex Data, Face-Varying Data, and Polygonal Mesh Representation .
What is the fundamental data type in USD that enables API schemas to be non-destructively removed in stronger layers?
Options:
list ops
arrays
booleans
Answer:
AExplanation:
The correct answer is list ops . API schemas are not encoded as a simple boolean flag on a prim. Instead, applied API schemas are stored in the apiSchemas metadata as token-valued listOp data. OpenUSD’s UsdPrim::ApplyAPI() documentation states that applying an API schema stores the schema name by adding it to the token-valued listOp metadata apiSchemas. Its RemoveAPI() documentation states that removing an API schema authors an explicit deletion of that schema name from the same listOp metadata.
This is what enables non-destructive removal in stronger layers. A weaker layer may apply an API schema, while a stronger layer can delete that schema token from the composed list without modifying the weaker source layer. NVIDIA’s OpenUSD glossary describes list editing as sparse ordered-list composition using operations such as prepend, append, delete, and explicit replacement, allowing stronger layers to modify lists contributed by weaker layers.
Option B is incorrect because arrays store values but do not provide list-edit composition semantics. Option C is incorrect because booleans cannot represent ordered additive and subtractive composition. This aligns with Customizing USD → API Schemas, apiSchemas Metadata, List Editing, and Non-Destructive Layering .
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?
Options:
Overs of the prims and properties that have been modified or added, omitting unchanged data.
Export each prim separately into multiple layers, and reference them individually to maintain sparsity.
Include explicit definitions of all prims, properties, and relationships exactly matching the imported asset to ensure consistency.
Answer:
AExplanation:
The correct exporter behavior is to generate sparse overrides that represent only the authored contribution of the current workstream. In OpenUSD data exchange workflows, an exporter should not blindly rewrite the full imported asset when the intent is to preserve collaborative, non- destructive editing. Instead, the exporter should author only the changes required to express the current application’s contribution: modified prims, newly added prims, changed attributes, relationships, metadata, or other authored opinions.
Option A is correct because an over is specifically used to contribute opinions to an existing prim without redefining the entire prim structure. This allows the exported layer to sit above the source asset in a layer stack and override only the relevant data. Option B incorrectly equates sparsity with splitting each prim into separate referenced layers; USD sparsity is achieved by authoring minimal opinions, not by unnecessary layer fragmentation. Option C is incorrect because exporting full definitions for every prim and property would duplicate unchanged data, reduce clarity, and undermine USD’s composition-based collaboration model. This maps to the NVIDIA OpenUSD Development Study Guide topics Data Exchange, especially exporter design, data transformation, sparse authoring, and collaborative layer-based workflows.