Scale and rotation in between DCCs

Hey everyone !
I’m currently taking a look at writing a clean up python script to do some environment export from 3ds to houdini. So we can have a proper USD file incoming right away.
And there’s one subject I ask myself a lot of questions about which are transforms. Going from 3ds to houdini means rotating everything -90 degrees on x axis, and scaling at 0.01.
My instinct would say, ok, I’d like to have everything clean right away, meaning actually scaling the meshes points positions themselves, recomputing xforms, bounds etc. So once in houdini if I want to overwrite an object xform it’s clean, no -90 degrees problems and such.
But yeah, meshes could be very heavy and the scripts could easily start to take forever.

Is this right to pursue such a target or is it okay to leave those scales and rotations inside the local to world transform and roll with it ? (since you can at least specify up axis on the 3ds export for example)
Or maybe I’m missing a more automatic way to flatten things out that’s not reworking the positions and normals arrays for example

Thanks !

Great questions. I can give some insights to the topic as it was a topic of importance to our team last year as we improved interop between Maya and 3ds Max by improving Maya’s axis and scale support.

First, the topic of scale. You mentioned that you are rotating and scaling in Houdini. You should not have to do any scaling from Max’s USD exports provided you choose to set the Max system units to the same units you wish to use in USD. For example, if you use Meters in Max, the exported scene will have a unitsPerMeter = 1 in the USD stage. We maintain the scale values in relation to unitsPerMeter setting in the exported data so that as long as the system units are correct, you should get the expected scaling in both transforms and mesh data–and never need to scale.

For rotation, it’s a more complex topic that we have not addressed to the level you are mentioning. We have considered adding a utility that will rotate mesh data as well, but you can go down a rabbit hole of things to consider such as UsdSkel and more, so we have put this particular item on the backburner for now to address more important issues. So far specifying the Up Axis in the exporter has been enough for our customers; those who want a absolute unambiguity between Max and other DCCs also have the freedom to switch the system up-axis in Maya and Houdini to Z-up (though this is obviously not ideal for everyone either).

I hope this helps add some insights into the topic. Feel free to reach out to us any time. Also feel free to participate in our private beta to share your insights directly with our team.

Oh that’s amazing thanks a lot !
On the scale side we are working in centimeters, and I’m not seeing any unitspermeter value possible on the exporter. But that’s ok I’ll see what I can do or edit this value directly.
And yeah I can totally agree on the rotation thing, it seems good from my perspective but I probably still underestimate all the edge cases (one being Forest Pack for example at the moment)
Thanks for the insights !!

There is no option for the units in the 3ds Max USD Exporter. It simply uses the current scene units and sets the appropriate unitsPerMeter setting inside the USD.

For example, here will be the resulting unitsPerMeter in the exported USD root layer metadata based on some system units in Max:

Centimeters:
metersPerUnit = 0.01

Meters:
metersPerUnit =1

This value is supposed to be used when interpreting the data in the supplied USD.

It is up to the DCCs to respect that setting when loading a stage or importing an asset. Max has been using that value from the beginning of Max USD, but we didn’t respect that in Maya for referencing a stage or importing until this last year. I would have to validate on Houdini, but in past tests it seemed that Houdini was also not respecting the incoming metersPerUnit; but I may be incorrect or out-of-date on Houdini.

You are not incorrect at all. We had to do a significant amount of unit conversion, due to the cm-m issue between Maya and Houdini. I still dream of a day when the units metadata will mean something for those 2 dccs.

For the record we did update Maya to support units and axis in Maya USD 0.31. Settings for this are in the advanced rollout of the Importer, Exporter and Stage Loading options menus. This was part of our efforts to improve interop between the DCCs.