Search code examples
xcodearkit3d-modellingusdz

Can I convert a USDZ to solid mesh such as stl


I used an ios app to create a usdz file using arkit but now I want to convert the scan to a solid 3d model such as an stl or obj. is there an ios or mac application that allows for this conversion. I cannot find any app that can open them other than xcode and preview but neither allow me to export to a 3d model.


Solution

  • ModelIO can, at least in iOS.

    import ModelIO
    
    let usdz = URL(fileURLWithPath: "model.usdz")
    let asset = MDLAsset(url: usdz)
    let stl = URL(fileURLWithPath: "model.stl")
    try asset.export(to: stl)
    

    .usdz is just a zipped .usdc file with textures (from the offical documentation). If you want to export the file on a mac, change the file extension to .zip, unzip the file and use ModelIO to export a .stl file.

    Open Xcode, create a new Playground, choose macOS as the platform. I have downloaded a test file from Apple's Quick Look Gallery, and unzipped an example to stratocoaster_usdz/ in my Downlaods directory. Then use the following code:

    import ModelIO
    
    // Get the path to the Downloads directory in your home folder
    let directory = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask).first!
    let usdc = URL(fileURLWithPath: "stratocaster_usdz/Stratocaster.usdc", relativeTo: directory)
    
    // Load the usdc file that was packed in the usdz file
    let asset = MDLAsset(url: usdc)
    
    do {
        let target = URL(fileURLWithPath: "stratocaster.stl", relativeTo: directory)
        // Export to .stl
        try asset.export(to: target)
    } catch {
        error
    }