Use the meshes of one USD in another USD

Isaac Sim Version

4.5.0
4.2.0
4.1.0
4.0.0
4.5.0
2023.1.1
2023.1.0-hotfix.1
Other (please specify):

Operating System

Ubuntu 22.04
Ubuntu 20.04
Windows 11
Windows 10
Other (please specify):

Topic Description

Detailed Description

What is the proper way of using a mesh of one USD asset in another USD?

Steps to Reproduce

  1. Load one asset (forklift_b.usd)
  2. Load one asset (any conveyor belt)
  3. Try using one mesh of the conveyor belt (say a Roller) to replace a mesh in the forklift.
  4. Fail

Error Messages

Cannot move/rename ancestral prims.

Screenshots or Videos

Additional Information

Context

The full context is that I have a complex rigged robot that I want to replace some of the meshes with the meshes of another asset.

What I’ve Tried

  • Tried saving both USDs flattened, same behavior.

  • Tried duplicating the relevant meshes but the duplicate button do not appear.

Thanks!

Any help appreciated! Thanks!

@edsonbffilho i think one of the ways is to do the following:

  1. open the file which contain the part you want as is (not load as reference/payload).
  2. select the part(s) you want to use. if you want to preserve the material, you will want to select the corresponding shader(s) in the Looks folder. in addition, you will want to select the xform or hierarchy if you wish to maintain those as well.
  3. Ctrl + C to copy the prim(s). alternatively, you can right click in the stage panel after selecting prims and choose to copy prim.
  4. open the second file where you want the part(s) to go. (again, not to load as reference/payload)
  5. Ctrl + V to paste the prim(s) you copied from the first file into the scene. alternatively, you can paste prim into the stage.
  6. make any other necessary changes to the second file, such as hierarchy and consolidating the shaders in the stage panel, before either saving over it or saving it as a separate USD if you want to play it safe.
  7. once you’ve done that, you should be able to reference that file into other USD files with the modifications.

the overall idea is to grab the parts and edit the source USD file rather than trying to work with references or payloads. the error message regarding ancestral prims is likely because you are trying to work with references/payloads which i don’t believe is how you want to go about it (hence duplicate is not even an option). and since you can only open one file at a time with kit, copy and pasting is one of the ways that you can work around that “limitation”.

below are screenshots of the differences when you are working with the source USD vs references:

Source file (forklift_b.usd):

forklift_b.usd being used as Reference/Payload:

1 Like

With respect, a roller is just a cylinder. A metal struct is just a cuboid. I would not even both to duplicate geometry from another source. Just add a cylinder etc to the forklift.

The other way to properly modify geometry is to just export the whole asset to a DCC application and “fix” it there, and then bring it back. Or just bring in additional external geometry from a DCC and then add it to the forklift usd file.

Thanks for the answer! It clarified some things for me.

However, I can’t find a way to open two different USD in the same Isaac Sim without them being references?

The roller was just an example. In reality, I have two different USDs with complex meshes and want to use the meshes of one USD in the other one.

Also, everytime I do ctrl+c in the meshes of one USD, I get a crash with the error:

[28.141s] Isaac Sim App is loaded.
2025-07-07 12:06:47 [43,276ms] [Warning] [omni.usd] Unexpected reference count of 2 for UsdStage 'anon:0x2c509480:World0.usd' while being closed in UsdContext (this may indicate it is still resident in memory).
2025-07-07 12:06:48 [43,600ms] [Warning] [omni.hydratexture.plugin] '/Render/OmniverseKit/HydraTextures/omni_kit_widget_viewport_ViewportTexture_0' is not a Usd.RenderProduct and cannot be used, reseting to '/Render/OmniverseKit/HydraTextures/omni_kit_widget_viewport_ViewportTexture_0'
X Error of failed request:  BadLength (poly request too large or internal Xlib length error)
  Major opcode of failed request:  25 (X_SendEvent)
  Serial number of failed request:  634
  Current serial number in output stream:  636

that’s the “limitation” i was referring to. hence the workaround of having to open the source of one USD, grab the part(s) you need; open up the second USD (while staying in the same Isaac Sim session) in order for you to edit/paste those parts back in.

regarding the BadLength message, it might be because the mesh(s) you are trying to copy is too dense/has too many poly? can you verify if you get that message if you copy one relatively simple prim and see if the crash persists?

the mesh(s) you are trying to copy is too dense/has too many poly?

Yes, that is the case.

With those two limitations, unfortunately, my problem is not yet solved but now is more clear.

Thanks so much for helping @Simplychenable.

to the point that the mod has made, perhaps the best approach might be to make the necessary edits in programs that can handle mesh transfer/editing more easily.

1 Like

Yes, please use modeling software. For example, take a fork lift asset. Open that usd file in 3dsmax 2025. Edit it as needed. Save it as the same usd file. Now open it again in Isaac Sim. The model is updated. We are NOT a modeling software. We do not try to be. We visualize the models provided. If the model needs work, this work should be done outside of Omniverse in a professional CAD or Design Application. 3dsmax, Maya, Blender, Revit, Solidworks etc.

One problem we come across with this approach is the loss of any Isaac-specific additions to the USD, such as physics and joints, on the round trip from Isaac → DCC (such as Blender) → Isaac

To avoid this:

  1. If you are deleting geometry, just delete it, in the usd file
  2. if you are adding geometry, create that NEW geometry in a modeling software, separately and then add it to the main asset usd file. You can even import the asset usd file as a reference to model the new geometry, but do not actually modify the master file.

So for example if you have forklift.usd, you can import forklift usd into 3dsmax 2025. You can then build new geometry for the file. However, then just save ONLY the new geometry in the right origin point and save as “fix.usd”. Then open forklift.usd in Kit. Drag in fix.usd into the file as a reference. Make sure it aligns. Now the asset has been fixed with new geometry. Anything you need to just move or delete, do so.