USD scene, editing, saving

Hello,

I would like to ask if anyone knows why i cannot save the materials on the meshes that are inside my USD scene ( the scene has been imported from Blender 3.0.1).
I apply differnt materials etc , then after closing and opening the project again all the meshes have no materials whatsoever.

(UE 4.27.2)

Thanks in advance!

Hey there -

So you didn’t mention if you’re working on the USD assets within a Stage or whether you imported them. If you imported USD to Unreal assets then the question is mostly moot and you just need to re-export as USD and its a new asset, effectively.

If you did import the USD into a stage, one thing to keep in mind is that the USD asset (which is referenced only via filename by the USD Stage Actor in your level) is not saved when you do Save All, and it doesn’t mark your level as “dirty” for save or autosave when it changes. Its clunky and a bit confusing.

If you open the USD Stage Window (under Window/Virtual Production/USD Stage in 5.0), you should see at the bottom your USD file has a “*” next to it if you made any edits (like replacing a material assignment). This means it needs to be saved back, but it can only be saved from within this window (via File/Save). I just tested this locally and I was able to save material changes.

However, this will likely not function perfectly if you changed to reference a material not already part of your USD stage (for example a material in your Unreal scene or content browser).

Its tricky and we’re still figuring out what works and what doesn’t. Also Unreal will allow you to make changes that look like they worked in your Outliner or rendered Editor scene, but won’t be correctly saved into the USD or UMAP. Adding new content to the USD (like referencing a new mesh or material) is also possible but tricky and not elegant currently.

Also - keep in mind that by re-saving the USD this way, it will change all places where this USD is referenced. In the USD world the more “correct” way to make local changes would be an overlay.

Good luck and please post any discoveries, its an interesting new tool.

Hi @RobH_WB, thanks for the explanation. I’ve currently got the same problem. I’m referencing an entire USD scene into my UE level and now want to be able to add materials, lights (and potentially even new geometry) and save all of this as a new USD file - essentially a file referencing the original file and all the changes made to this file.

Going by what you’ve written this is partially doable - though in a clumsy way - and partially impossible. Would you mind elaborating on how to add materials to USD scenes in UE and save those material assignments to the scene?

In the long run, I’d love to be able to layout my scene in in USD inside UE, add all the lighting and material that I need and then either render it inside UE or be able to move back to Houdini or NVIDIA Omniverse.

Thanks for any advice on how to do this.

To quickly follow up on this, if it isn’t possible to do these changes (i.e. assigning Materials) inside UE directly, is it possible to add them inside NVIDIA Omniverse (which is quite a capable USD authoring tool)? I.e. is it possible to add one of NVIDIA’s Omni materials to a prim inside a USD scene and then re-load this USD scene inside UE’s USD Stage editor and have this material show up correctly in UE?
I think I’m having trouble understanding how the USD workflow inside UE works. It seems you can’t really change much in terms of USD assets inside UE, but you really need to be able to assign UE materials to these USD assets, if you want entering the world of Unreal Engine to make any sense.

I’ve tried adding UE materials to the USD actor’s sub-elements spawned in the Outliner, but they refuse to show up. I’m stumped :smile:

Hello,

Did you have managed to find a work around? I’m the same exact situation where we have USD scene that we’d like to use as a base and then add / edit materials and geometry.

1 Like

I’m just entering the USD world in Unreal, but it looks to me like UE is the end of the road for USD for the time being. From what I can tell of the missing documentation, just import the data and don’t expect to move data to another app?

1 Like

Hey guys, to both of you. I couldn’t find any way forward inside Unreal, so I actually started looking more into NVIDIA Omniverse. Their ‘Create’ app is kind of like Unreal, just aimed more at offline rendering. They have a realtime renderer which looks nice and a couple of ‘not so realtime’ ones which can create nice-looking translucencies and the like. Definitely check it out (if you’ve got an NVIDIA card that is :wink:).

Exporting from Houdini, I can load things in Create and then make those USD changes, as you would expect. Probably a better way to spend your time, if it doesn’t HAVE to be Unreal.

It looks like there is no Unreal solution. I figured Maya → Unreal → Maya would be pretty solid considering some of the other features like Live Link. Can’t find anything.

Sorry to hear, but yes, USD in Unreal is really basic right now.

For what it’s worth, I was running into the same issue. UE materials assigned to prims in the stage editor does apply the materials but the change is not persistent, meaning that if you save your usd session file, and reload the Unreal project later, the UE materials are no longer applied.
The custom UE material assignment code DOES make it in the usd session file but whatever happens when it gets loaded is not what happens when you do the assignment interactively in the UI. What does work is a manual asset export to usd from within UE but it defeats the purpose of having assets from my DCC have the correct UE material automatically assigned.
I wrote a python script that takes usd assets exported from Maya, strips out any assigned materials and creates a UE material entry so the assignment happens as needed when loaded in the usd stage. I can then run a script on all the many assets exported from maya so they automatically show up in UE with their correct UE materials assigned.
assignUEMaterialToUsdMesh.py (1.9 KB)