When exporting via USD_ROP, why does the Naming Structure (1 - below) get renamed to mesh? This doesn't happen when creating the asset via ComponentBuilder, the Scene Graph is correct. Component Builder is a pain to quickly export assets with textures as USD, as any materials already assigned in OBJ have to be reassigned in LOP (as far as I know), which is why I am asking the above.
Houdini USD exports losing naming structure in Blender
2830 9 1-
- cgfrankie
- Member
- 15 posts
- Joined: Feb. 2023
- Offline
Hi,
When exporting via USD_ROP, why does the Naming Structure (1 - below) get renamed to mesh? This doesn't happen when creating the asset via ComponentBuilder, the Scene Graph is correct. Component Builder is a pain to quickly export assets with textures as USD, as any materials already assigned in OBJ have to be reassigned in LOP (as far as I know), which is why I am asking the above.

When exporting via USD_ROP, why does the Naming Structure (1 - below) get renamed to mesh? This doesn't happen when creating the asset via ComponentBuilder, the Scene Graph is correct. Component Builder is a pain to quickly export assets with textures as USD, as any materials already assigned in OBJ have to be reassigned in LOP (as far as I know), which is why I am asking the above.
Edited by cgfrankie - Jan. 14, 2025 13:26:16
-
- alexmajewski
- Member
- 99 posts
- Joined: Aug. 2017
- Online
-
- cgfrankie
- Member
- 15 posts
- Joined: Feb. 2023
- Offline
The assets have got a name attribute. Is this just a bug? Is there any way of bringing in OBJ assigned Materials to Component Builder without having to literally copy them all across and reassign them? Is there anyway of bring a Subnet into Component Builder, rather than having to ObjectMerge inside Component Builder?
-
- Heileif
- Member
- 258 posts
- Joined: Jan. 2015
- Offline
Try using the path attribute instead of name. Then you should get the exact scene graph that matches your path attribute.
Edit
I did a quick test now, with just the name attribute on the meshes. It got imported correctly in Solaris.
The mesh_0 name only appear when the imported geo does not contain a name attribute for me.
Edit
I did a quick test now, with just the name attribute on the meshes. It got imported correctly in Solaris.
The mesh_0 name only appear when the imported geo does not contain a name attribute for me.
Edited by Heileif - Jan. 16, 2025 00:06:31
-
- tamte
- Member
- 9237 posts
- Joined: July 2007
- Offline
it doesn't sound right that it would get renamed on export
I'd expect it to export exactly what you see on stage before export, so correctly named Xform object and only the Mesh named mesh_0
how does the stage look like when you open your exported .usd back to Houdini?
that way you can see if it's really renamed on export or if it's just Blender naming the object based on the contained Mesh name
I'd expect it to export exactly what you see on stage before export, so correctly named Xform object and only the Mesh named mesh_0
how does the stage look like when you open your exported .usd back to Houdini?
that way you can see if it's really renamed on export or if it's just Blender naming the object based on the contained Mesh name
Edited by tamte - Jan. 16, 2025 01:20:01
Tomas Slancik
CG Supervisor
Framestore, NY
CG Supervisor
Framestore, NY
-
- cgfrankie
- Member
- 15 posts
- Joined: Feb. 2023
- Offline
@Heilef That's just confirming what was in the original post unfortnuately. Issue isn't import into Solaris, issue is why USDRop ScenGraph differs from ComponentBuilder SceneGraph when exported to Blender.
@tamte Reimporting back into Houdini has correct Stage with either USDROP or ComponentBuilder. I think Blender can't read some piece of metadata that USDRop is missing or writing differently.
Any know answer to:
"Is there any way of bringing in OBJ assigned Materials to Component Builder without having to literally copy them all across and reassign them? Is there anyway of bring a Subnet into Component Builder, rather than having to ObjectMerge inside Component Builder?"
@tamte Reimporting back into Houdini has correct Stage with either USDROP or ComponentBuilder. I think Blender can't read some piece of metadata that USDRop is missing or writing differently.
Any know answer to:
"Is there any way of bringing in OBJ assigned Materials to Component Builder without having to literally copy them all across and reassign them? Is there anyway of bring a Subnet into Component Builder, rather than having to ObjectMerge inside Component Builder?"
-
- alexmajewski
- Member
- 99 posts
- Joined: Aug. 2017
- Online
I just recreated your setup: created geometry in /obj, added
In your screenshot we can see your assets have mesh prim children called "mesh_01" which is exactly what happens when there's no Name attribute. Or when the name attribute is not a primitive attribute. Try fiddling with that a bit.
s@name
and imported to Solaris with Scene Import (all)
. It worked. I got proper Mesh Prim/Blender names.In your screenshot we can see your assets have mesh prim children called "mesh_01" which is exactly what happens when there's no Name attribute. Or when the name attribute is not a primitive attribute. Try fiddling with that a bit.
-
- cgfrankie
- Member
- 15 posts
- Joined: Feb. 2023
- Offline
@alexmajewski, thanks for the effort, but that isn't the actual thing being asked, you are misunderstanding the question. OBJ > SOP is fine, there is a name attribute, I don't know why everyone focusing over this it isn't at all what I am asking.
I am asking why EXPORTS using USDRop and ComponentBuilder differ in Scene Graph structure when imported to Blender i.e. the Blender Scene Graph differs, but if the EXPORTS are reimported back into Houdini, the Scene Graph is as it was before Export. There is obviously something different being written in the EXPORT in USDROPs vs ComponentBuilder that Blender isn't able to read properly - I'm trying to find out what this is.
I am asking why EXPORTS using USDRop and ComponentBuilder differ in Scene Graph structure when imported to Blender i.e. the Blender Scene Graph differs, but if the EXPORTS are reimported back into Houdini, the Scene Graph is as it was before Export. There is obviously something different being written in the EXPORT in USDROPs vs ComponentBuilder that Blender isn't able to read properly - I'm trying to find out what this is.
-
- tamte
- Member
- 9237 posts
- Joined: July 2007
- Offline
cgfrankiethis seems to be a Blender import issue, as blender doesn't show you USD stage, it converts USD stage to it's own scene representation which as you see results in renaming some primitives without any apparent reason
I am asking why EXPORTS using USDRop and ComponentBuilder differ in Scene Graph structure when imported to Blender i.e. the Blender Scene Graph differs, but if the EXPORTS are reimported back into Houdini, the Scene Graph is as it was before Export. There is obviously something different being written in the EXPORT in USDROPs vs ComponentBuilder that Blender isn't able to read properly - I'm trying to find out what this is.
there may be internal logic (or bug) for it, but with a bit of troubleshooting you should see that it's how Blender imports any USD file, sometimes it looks better, sometimes worse depending on the element types in the hierarchy and whether they satisfy how Blender scene likes to organize it's own primitive types
so your main options are
1. restructure or rename your scene in a way that it satisfies Blender's conversion process
- what other's are suggesting about making sure that the mesh name is also called what your object is called
- you can potentially insert additional Xform (as Blender seems to rename Component Xform with a single mesh under, but not if it has another even if differently named Xform inbetween or multiple meshes underneath)
- or simply find a hierarchy structure and naming Blender is happy with
EDIT: maybe you can rename/restructure the scene in Blender as you like and export back to .usd, open in Houdini and see what Blender likes (of course only as long as the same file imports back in Blender the same way)
2. talk to Blender community and devs, as from my POV it's more a blender issue and the fact that what you are looking at in Blender is not USD stage, so they may be able to provide more insight or reasoning why this is happening
Houdini
- seems to export valid USD and import back in correctly
- seems to import USD files exported from other DCCs correctly
USD Viewer
- also sees the hierarchy correctly
Blender
- has issues maintaining correct naming with any .usd files, regardless of the origin
Edited by tamte - Jan. 29, 2025 11:49:15
Tomas Slancik
CG Supervisor
Framestore, NY
CG Supervisor
Framestore, NY
-
- alexmajewski
- Member
- 99 posts
- Joined: Aug. 2017
- Online
@cgfrankie Export your scene to .USDA and open it in a text editor. You will see that your structure is there. This is why when you re-import it to Houdini it is intact.
Blender obviously doesn't like something about that component primitive produced by Scene Import lop. I've tried flattening the stage, reconfiguring that component prim to be a regular xform, not importing geometry as reference, etc. It always failed. Honestly it almost seems like it's literally broken, but I could be missing something.
What I did above was exporting your setup to Blender and making that useless "mesh_0" name actually do something for us. Instead of being called "mesh_0" we could make it be called "Sherman_Body" and so when Blender messes up the hierarchy it will still be called like the component. And your name attribute is clearly invalid in some way, despite being present. This solution is basically plan B.
Blender obviously doesn't like something about that component primitive produced by Scene Import lop. I've tried flattening the stage, reconfiguring that component prim to be a regular xform, not importing geometry as reference, etc. It always failed. Honestly it almost seems like it's literally broken, but I could be missing something.
What I did above was exporting your setup to Blender and making that useless "mesh_0" name actually do something for us. Instead of being called "mesh_0" we could make it be called "Sherman_Body" and so when Blender messes up the hierarchy it will still be called like the component. And your name attribute is clearly invalid in some way, despite being present. This solution is basically plan B.
-
- Quick Links