Convert glTF to USDZ Losslessly for Apple AR

Converting glTF assets to USDZ without quality degradation requires mapping glTF PBR materials directly to Apple’s UsdPreviewSurface specification while preserving geometry, textures, and animations. This article covers the essential tools and technical workflows—including texture channel unpacking, color space preservation, and command-line conversion—needed to produce production-ready USDZ files optimized for iOS, iPadOS, and visionOS.

Understanding the glTF to USDZ Discrepancies

A purely "lossless" conversion requires matching how each format handles physically based rendering (PBR).

  • Material Models: glTF uses the KHR_materials_pbrMetallicRoughness model, which packs Roughness into the green channel and Metallic into the blue channel of a single texture. USDZ utilizes Pixar’s UsdPreviewSurface, which historically prefers separate inputs for roughness and metallic attributes.
  • Color Space: Albedo (Base Color) and Emissive maps must remain in sRGB/Gamma space, while Normal, Metallic, Roughness, and Ambient Occlusion (AO) maps must strictly remain in Linear color space. Misinterpreting these color spaces during conversion results in visual degradation.
  • Extensions: Custom glTF extensions (e.g., KHR_materials_transmission, KHR_materials_clearcoat) are only partially supported in Apple's Quick Look environment. To maintain visual parity, unbaked effects may need to be baked into textures before export.

Method 1: Using Apple’s Official usdzconvert Tool

Apple provides a standalone Python-based command-line tool suite called USD Python Tools, which includes usdzconvert. This is the most reliable tool for preserving visual fidelity and metadata for Apple platforms.

  1. Download USD Python Tools: Obtain the package from Apple’s Developer portal and install the command-line utilities.

  2. Execute the Conversion: Run usdzconvert with flags that enforce correct color spaces and avoid automatic downsampling:

    usdzconvert input.gltf output.usdz -v -metersPerUnit 1.0
  3. Handle Channel Separation Automatically: usdzconvert parses the glTF material schema and extracts the packed metallic-roughness textures into the format required by UsdPreviewSurface without re-compressing them into lossy JPEG formats.


Method 2: Using Google’s usd_from_gltf

Google’s open-source usd_from_gltf command-line tool is explicitly engineered to bridge the differences between glTF 2.0 and USDZ for AR Quick Look.

  1. Compile or Download usd_from_gltf: Obtain the binary for your operating system.

  2. Run the Converter:

    usd_from_gltf --open-dock input.glb output.usdz
  3. Advantages:

    • Automatically splits packed ORM (Occlusion, Roughness, Metallic) maps into separate channels.
    • Retains native PNG/JPEG texture formats without introducing generational compression loss.
    • Correctly translates skeletal animations, blend shapes, and node hierarchies.

Method 3: Using Apple Reality Converter (GUI)

For visual inspection during conversion, Apple’s Reality Converter app provides a graphical interface.

  1. Open Reality Converter on macOS.
  2. Drag and drop your .gltf or .glb file into the viewport.
  3. Select the Materials tab on the right pane to verify texture assignments:
    • Base Color: Set to sRGB.
    • Roughness / Metallic: Ensure channels are mapped directly and color space is set to Linear.
    • Normal: Ensure the normal format is set to tangent space.
  4. Export the asset as .usdz via File > Export.

Best Practices to Prevent Quality Loss

  • Texture Preservation: Ensure the source glTF textures are stored as uncompressed PNGs or high-quality JPEGs. Avoid converting files that already employ lossy Draco or KTX2 compression unless your converter explicitly supports decoding them without downsampling.
  • Unit Scaling: Apple Quick Look defaults to a real-world scale measured in meters. Explicitly verify unit scales before or during conversion to avoid geometry distortion or clipping plane issues.
  • Normal Maps: glTF uses OpenGL normal maps (+Y up), whereas certain USD pipelines expect DirectX (+Y down). Ensure your converter does not invert the green channel unless your target renderer requires it. Apple's Quick Look natively aligns with OpenGL-style normals.
  • Validation: Preview the final .usdz file directly in macOS Finder using Quick Look or deploy it to an iOS device via AirDrop to verify material reflections, scaling, and animation fidelity under realistic HDR lighting.