在 USD 工作流中,正确设置 defaultPrim 属性是简化引用层根节点定位与场景图遍历的关键。根据官方教程(USD 22.08),当引用外部层(如 HelloWorld.usda)时,若未在被引用层中通过 stage.SetDefaultPrim() 显式指定 defaultPrim 元数据,引用客户端必须自行指定想要引用的根节点路径。
最佳实践是在被引用的层中预先 author 好 defaultPrim 属性。例如,在 HelloWorld.usda 中,先获取名为'hello'的根节点(hello = stage.GetPrimAtPath('/hello')),然后调用 stage.SetDefaultPrim(hello) 将其设为默认根节点。此外,通常还会在该节点上添加 UsdGeomXformCommonAPI 变换属性,以便后续覆盖。
执行上述操作后,导出文件会包含 defaultPrim = "hello" 元数据。当创建新阶段并添加引用(refSphere.GetReferences().AddReference('./HelloWorld.usda'))时,USD 会自动推断并带入该默认根节点下的场景图内容至当前层的对应位置(如 /refSphere),从而避免手动指定路径的繁琐操作。
若未设置 defaultPrim,引用客户端需显式指定路径。例如,通过 UsdGeom.Sphere.Get(stage, '/refSphere/world') 访问具体子节点时,USD 会自动创建 over 层来承载属性修改(如更改颜色)。最终导出或 flatten 后,场景图将呈现组合后的完整数据,而不再保留引用操作符。