All hail the metersPerUnit and upAxis metadata .
However, as the Pixar documentation states:
As with Encoding Stage UpAxis, we restrict the encoding of linear units to be stage-wide; if assembling assets of different metrics, it is the assemblerās responsibility to apply suitable correctives to the referenced data to bring it into the referencing stageās metric.
Which leaves the question - if we were to programmatically resolve this, e.g. upon loading the content - how does one compute and apply that nicely to the USD stage in such a way that loading into Blender, Maya, Houdini and Unreal becomes as consistent as possible.
Preferably, when building the pipeline, of course weād write out the data in a consistent size but for as far as I can tell even thatās non-trivial since each of the hosts really wants to stick to their own units. And doing e.g. automatic scale conversion on export seemed āexperimentalā at best (e.g. mayaUSDExport -metersPerUnit
only support Meshes and Transforms conversions?)
So that gets us back at square one. Assuming Iām the stupid one I had hoped this had been solved since the days of Objs, FBX, Alembics and now USD - but it also feels a bit like:
So without arguing how to make the standard. Whatās a sensible approach to designing a pipeline where we can avoid the units issues across different applications.
- Some applications are notoriously hardcoded to certain units (e.g. Houdini unit = 1 meter?). So I guess this is not a matter of configuring the scene units in the DCCs.
- If exporting the content from the different DCCs is non-trivial to āconvertā at runtime (e.g.
MayaUSDExport
only experimentally supporting that; Blender not listing UI options for that) then I suppose āon exportā all we can really do is write metadata? - Does that leave only āon loadā / āat runtimeā converting of the loaded data? If so, whatās the sensible approach to do that (preferably using USD and its API) to get that to do what we want across different applications?
References
Iāve deliberately said little about Up Axis since I figured just the MPU question may sufficiently trigger solutions, maybe? Also Nvidia Metrics Assembler seems to do this at runtime - but thatād make it Omniverse only?