NCP-OUSD study materials
NCP-OUSD study resources

The layout override that loses to lighting

NCP-OUSD · Put your knowledge to work in context.

All case studies

The layout override that loses to lighting

A shot is assembled by shot.usda, whose root layer declares subLayers = [@./lighting.usda@, @./layout.usda@] and, on /World/Set, a reference to set_asset.usd. In the set asset, Chair gets size = 3.0 from a specializes target, base_set.usd. layout.usda authors over "/World/Set/Chair" { double size = 1.5 }; lighting.usda authors the same property as 2.0 because the light rig needs a larger collision proxy. The viewport shows 2.0. The layout TD insists layout is the authoritative department and expects 1.5, but one sequence intentionally needs the larger chair. The team also plans to move lighting into a reference on /World/Lighting for organization and asks whether that changes the result. They want a structure that keeps layout authoritative by default while preserving the per-shot exception.

1. Using LIVRPS and layer-stack ordering, explain why the composed value is 2.0 rather than 1.5. Identify which opinion would have to move, and where, to change the default.

Read the worked answer

The resolved value is 2.0 because the opinions are not all at the same composition strength.

  • The root shot.usda layer does not author size, so it contributes no local opinion.
  • lighting.usda and layout.usda are sublayers of the root layer stack. Opinions from sublayers are still local opinions in LIVRPS terms; sublayers are not a weaker arc. Within a layer stack, the root layer is strongest, then sublayers in the order listed. So lighting.usda is stronger than layout.usda, and its 2.0 beats 1.5.
  • The reference on /World/Set brings in set_asset.usd through a reference arc, which is weaker than local opinions in the referencing layer stack. The 3.0 from base_set.usd arrives through a specializes arc, the weakest arc in LIVRPS.

The ordering reduces to: local root (none) > local lighting sublayer (2.0) > local layout sublayer (1.5) > reference (asset values) > specializes (3.0).

To change the default to 1.5 without deleting lighting's ability to override, the 2.0 opinion must move out of the first sublayer. It can move into a dedicated per-shot override layer that is stronger than layout, or into the root layer, or into a variant selected only for the large-chair shot. Simply moving lighting.usda lower in the sublayer list would make layout win globally, but it would also weaken all other lighting opinions, which may be undesirable.

2. Propose a layer structure that makes layout authoritative by default, keeps lighting's light-specific opinions, and still allows the one sequence to use size 2.0. Explain the trade-offs.

Read the worked answer

A workable structure is:

shot.usda                 # root, also holds final shot overrides
  subLayers = [
    @./shot_overrides.usda@,  # strongest, normally empty
    @./layout.usda@,          # authoritative set dressing
    @./lighting.usda@         # light rig and light-specific opinions
  ]

Then author the large-chair exception in shot_overrides.usda as over "/World/Set/Chair" { double size = 2.0 }, or in the root layer. Layout now beats lighting for size, while lighting still controls its own light prims. The exception is explicit and local to the shot.

A variant-based alternative is to put a chairSize variant set on the shot or set prim with a default variant selecting 1.5 and a largeChair variant authoring 2.0 in a strong layer. This is cleaner when the exception is a named shot state, but it adds a variant selection that downstream tools must preserve.

The trade-off is that lighting.usda is no longer allowed to make global geometry-size changes. If lighting genuinely needs a larger collision proxy, that proxy should be a separate prim, or the opinion should be authored in a dedicated strong override layer, not in the generic lighting sublayer. Layer order encodes authority; naming a layer "authoritative" has no effect by itself.

3. If the lighting layer is moved into a reference on `/World/Lighting`, does its `size` opinion still beat `layout.usda`? Explain the composition result and what that implies for organizing overrides.

Read the worked answer

No. Moving the lighting opinions into a reference makes them reference-arc opinions on the referenced prims, not local opinions in the root layer stack. layout.usda remains a sublayer of the root layer stack, and its over on /World/Set/Chair is a local opinion. LIVRPS places local opinions above references, so layout.usda's 1.5 would win over a size = 2.0 authored inside the referenced lighting asset, even if the reference is authored in the root layer.

The reference arc does not become stronger because it is authored in a strong layer. The arc type determines the strength relative to other arcs; the layer containing the arc determines the strength of the arc opinion itself, not of the opinions brought in by the referenced layer. The referenced layer's opinions remain weaker than local opinions in the referencing layer stack.

This means organizational references are a poor place to put overrides that must beat local department layers. Keep "must-win" overrides in the root layer, a dedicated strong sublayer, or an override layer, and use references for composition of asset content. If lighting must live in a reference, expose a variant or an override mechanism in the shot's strong layer rather than relying on the reference to win.