Omniverse Transcoding
Why is the project being developed?
Users of OpenUSD in non-English speaking regions and users in a variety of domains (mechanical, manufacturing, electrical, automotive, etc.) desire the ability to name USD primitives with identifiers that are unallowable by the specification.
Currently, the OpenUSD specification only allows for prim names and other identifiers to be:
Non-empty strings
Start with an alpha character
[A-Za-z]
or underscoreOnly be composed of characters in the set of
[A-Za-z0-9_]
This prevents users from using the following (non-comprehensive list):
Unicode characters for non-english languages
Only numeric identifiers / or identifiers starting with a numeric character
Separating/Delineating characters such as forward slash (
/
), semicolon (:
), dash (-
), at (@
), etc.
While OpenUSD will support XID identifiers in v24.03
, users may be dealing with toolchains and pipelines that
aren’t fully UTF-8
as v24.03+ rolls out across the ecosystem over the next year. Additionally, it does not
fully address using characters/symbols that are reserved in OpenUSD. This library looks to address this problem.
What problem does it solve?
We aim to let users have identifiers with any character in the UTF-8
namespace regardless if it is valid or not in
OpenUSD specification.
What are the main functions of the project?
The main function of the project is to implement an interface (i.e., API Schema or free function) that can take any identifier (potentially with invalid characters) and transform it into a OpenUSD valid identifier. The process must be reversible, unique, and easily identifiable.
We address the problems presented above with transcoding. Transcoding is the translation from one domain (illegal characters) to another domain (legal characters), this translation allows a lightweight shim between applications and USD data to preserve identifiers. This complements other approaches such as adding UTF-8 prim name support for OpenUSD, while also allowing legacy toolchains and pipelines to benefit.