RFD 1053 details: layers, the boundary, the runtime, the model image contract
Why layers, and not a better mesh format
USD composes. A stage adds a sublayer with its own opinion, and the layer below stays intact and readable.
| Stage | Writes |
|---|---|
| image to 3D | the base mesh layer |
| retopology | a layer that overrides the mesh |
| UV unwrap | a layer that adds the primvar |
| segmentation | a layer of part scopes |
| rig | a layer of skeleton and skin bindings |
| texture | a layer of material bindings |
A caller may then mute the retopology layer and see the original. That is not possible in a flat file.
The boundary
| Direction | Format |
|---|---|
| Internal | .usdc, and .usda to read |
| Avatar out | VRM, or KHR avatar |
| Asset out | glTF binary |
| Archive | .usdz |
Convert at the boundary only. A stage that converts in the middle throws away the composition this RFD exists to keep.
The runtime
fabric-stage-runtime ships OpenUSD 26.5.0 as an Elixir Hex package. It exposes include_dir/0, lib_dir/0, and target/0, thus the Elixir core from RFD 1019 links the same USD build the model images write.
One USD version across the pipeline matters. A layer written by a newer build may not open in an older one.
What each model image must do
predict() returns the USD layer, and it returns the transmission file as well. The caller keeps the layer, and it ships the other.
RFD 1036 records this in the model image convention.