USD Maya export round-trip uv sets

Hello,
This is my first post—apologies if this has already been asked or if it’s in the wrong category.

TL;DR

When exporting multiple UV sets from Maya to USD, Maya UV set names are normalized to st, st1, st2, etc., and are not preserved on a Maya → USD → Maya round-trip by default. The UV set exported as st corresponds to Maya’s current UV set, while additional UV sets are assigned incrementally. We want to confirm whether this ordering is deterministic and whether a standard mechanism exists to preserve or reliably reconstruct original UV set names, without introducing unnecessary customizations to the Maya USD exporter/importer.

Details:

A production question recently came up around exporting multiple UV sets through USD.

In our Katana pipeline, we don’t have issues with either st naming or Maya UV set names (this is mostly Alembic-based). With USD, however, it appears that UV sets are normalized to st, st1, st2, etc. This raises a few questions, both around UV handling specifically and around expectations for round-tripping data in general.


Maya → USD → Maya behavior

Using the default Maya USD export options, a round-trip from:

Maya → USD → new Maya session

does not preserve Maya UV set names. This led us to ask a broader question:

How many other attributes are renamed or lost during export, beyond what is already expected?

We understand that not all Maya data is preserved through USD, but we want to better understand which transformations are deterministic and which are not.


Observed UV export behavior

Based on our testing:

  • By default, Maya exports UV sets as st, st1, st2, …

  • The UV set exported as st corresponds to the current UV set in Maya

  • This behavior is consistent with Alembic, so we are familiar with the implications

For example, given the following Maya UV sets:

map1
map2
hires   (current UV set)

The exported result is:

st   → hires
st1  → map1
st2  → map2

This leads to the following question:

Is the ordering of non-current UV sets (st1, st2, …) deterministic?

Assuming the current UV set is not changed, we want to ensure that the mapping does not vary (e.g. st1 → map2, st2 → map1), since the original UV set names are no longer present.


Proposed approaches

We are currently considering two possible solutions:

Solution 1: Preserve UV set names

  • Export with preserveUvSetNames

  • Post-process the USD to:

    • Alias st, st1, st2 to their original Maya UV set names

    • Store the original authored names as metadata

  • On import, restore the original UV set names where needed in our pipeline

Our goal here is to maintain authored UV set names for round-trip fidelity, even if renderers continue to rely on st-style primvars.


Solution 2: Reconstruct UV names from st ordering

  • Export without preserveUvSetNames

  • Post-process the USD to:

    • Identify st, st1, st2

    • Record their intended Maya UV set mappings as metadata

  • On import, restore the UV set names within our pipeline as needed


Open questions

We have several competing requirements:

  • Some renderers require UVs to be named st, st1, st2

  • We want predictable, deterministic behavior when UV set names are stripped

  • We want to avoid unnecessary customization of the Maya USD exporter/importer if a standard solution already exists

Before moving forward with pipeline changes, we want to confirm whether:

  • We are overlooking existing USD or Maya USD mechanisms for this

  • Our assumptions about determinism and expected behavior are correct

Any guidance or clarification would be appreciated.

1 Like

When we hit the same issue, we first tried to preserve the Maya internal names but it became such a pain dealing with other software that we eventually went back to just the st1 etc naming.

if you’re comfortable modifying the Maya plugin, I’d actually recommend the route where you don’t preserve the names, but store the Maya name on the attribute as metadata like you suggested. Then rename on import to Maya or to any place where you can’t remap tools that depend on the names.

Perfect. Thanks for the confirmation as that seemed the most logical to me. Keep it as close to what USD expects and add the metadata as needed feels the correct approach to me. If needed, update workflows to rename back to the original name.

That said, are there any other surprises for me to look out for related to metadata, values, etc?

On our end we didn’t hit any other surprises but that’s not to say there won’t be any.

Thank you for letting us know, super helpful!