OBJ/glTF to USDZ - usdzconvert discontinued?

We have just noticed that Apple has officially retired their python usdzconvert tools (at least they are gone from Apple developer).

what is the best way going forward to convert OBJ/mtl plus textures to a usdz format that is compatible with arkit preferably via command line tools so we can automate this accordingly.

I know Blender has full USD support but unfortunately it is lacking some shader options for Occlusion so we lose that in a Blender pipeline on usdz export.

Going from USDZ to gltF Adobe has done great work with their open repo and we have been using that successfully but since we post process our meshes we also need a way to export intermediate models back to usdz.

Looking forward to hearing anyones advice on this.

With the adobe plugins, you could use the usdzip command line tool on the output USD file. That’s essentially what the gltf conversion scripts and Reality Converter do under the hood to generate the output usdz

1 Like

thanks @dhruvgovil

do you have any example of how that would work.

Currently we export intermediate OBJs and textures to a temp directory and then execute the usdzconvert script on the OBJ with the flags -diffuseColor, -normal, -roughness and -occlusion to assign the correct textures from the material.

Assuming you’re using the Adobe plugins you can then use the command line tools or USD API to get your files.

For example, if I have a gltf file, I can do

usdcat foo.gltf -o foo.usdc
usdzip foo.usdz -a foo.usdc

That will give you an intermediate usdc file that you can do whatever you want with, and then you can use the usdzip command to convert it to a usdz.

1 Like

thank you @dhruvgovil will try that.

ok have tried this but all textures are missing from the intermediate usdc file. how can I embed and keep my textures as part of this conversion.

I then tried guc and the conversion worked but the model doesn’t display any textures on iOS using ARKit. It does however display correctly with macOS Preview.

The file was converted from a glb file that was output after a USDZ conversion done with the Adobe USD tools.

Here is the file:

I had a look and found the line that causes trouble:

rel material:binding:preview = </Asset/Materials/UsdPreviewSurface/Materials/Texture>

If you change that to
rel material:binding = </Asset/Materials/UsdPreviewSurface/Materials/Texture>
it works as expected.

I’m not sure where to report the problem. To guc or to Apple?

1 Like

thanks @ThomasKumlehn good catch. Yeah also not sure but can definitely report this to guc since it was done through their conversion script. maybe @dhruvgovil can chime in if this is also something we should file via feedback assistant or this is expected behavior

I furthermore found the face normals get modified to flat shading during that conversion:

It would be good to submit feedback to both Adobe and Apple.

It seems like RealityKit doesn’t fallback to the preview binding in this case, but I also think the Adobe plugin should be authoring the standard binding instead of preview, because it is somewhat presumptuous about the use case.

actually in this case it was guc that was used for the conversion since Adobe USD tools itself doesn’t do the conversion just yet. they said they will provide some tools and examples going forward on how to do this with their repo and tools but it’s currently not a supported flow.

I should add the the model does display correctly in the Preview app on the latest macOS 15.0 Beta (24A5279h).

also executing a usdchecker command in the terminal yields a success message.

Will report all my findings on guc and feedback assistant

If you’re using macOS 15, you can use , usdzip or Preview to convert the gltf files directly to USD. You don’t need external tooling.

thanks @dhruvgovil

I am aware that on macOS I can do that. But this is not for a one off conversion but rather to update our automated pipeline where we use object capture and then do some mesh manipulations on a server that then exports the modified obj/gltf to convert back to usdz for final display.

for those interested: