Web 3D 6 min read

Getting a 3D Model Into iPhone AR

You publish a GLB, it works everywhere, and then an iPhone downloads it as a file instead of opening AR. This is expected behaviour, and the fix is a second format.

Vextrude Team

Updated Aug 21, 2026

Getting 3D models into iPhone AR with USDZ — Vextrude

You publish a GLB, it works everywhere, and then an iPhone downloads it as a file instead of opening AR. This is expected behaviour, and the fix is a second format.

Why Your GLB Does Not Open

iOS handles AR through Quick Look, a system-level viewer built into Safari and Messages. It is genuinely good — no app to install, and the model opens straight into the camera view.

It also accepts exactly one format: USDZ. There is no glTF support, and no plan to add it. Link an iPhone to a .glb and Safari treats it as an unrecognised download.

Android takes the opposite position. Scene Viewer accepts GLB and does not read USDZ. So there is no single file that works on both platforms, and any AR feature needs both.

This is not a bug you can configure around. Plan for two files from the start; converting between them is mechanical and belongs in your build step, not in a workaround.

What USDZ Actually Is

USDZ is a zero-compression ZIP archive containing a USD scene plus its textures. Universal Scene Description came out of Pixar's animation pipeline and is considerably more capable than glTF — it handles layering, references and non-destructive composition that a real-time delivery format has no need for.

Two details matter in practice. Because the archive is uncompressed, a USDZ is roughly the sum of its parts — a 6 MB texture set stays 6 MB. Compress your textures before packaging, since the container will not do it for you.

And USDZ supports only a subset of what USD can express. Quick Look is a viewer, not a full renderer, so exotic material graphs and complex animation rigs will not survive the trip even though the format could theoretically describe them.

Serving Both From One Page

The straightforward approach is <model-viewer>, which takes both files and picks per platform:

<model-viewer
  src="model.glb"
  ios-src="model.usdz"
  ar
  ar-modes="webxr scene-viewer quick-look"
  poster="model-poster.jpg"
  alt="A 3D model of the product">
</model-viewer>

The src drives the inline preview and Android AR; ios-src is handed to Quick Look when the visitor is on iOS. The ar-modes order sets the preference, falling back through the list.

Two things people leave out. The poster gives you an image while the model loads and, importantly, if WebGL is unavailable — without it those users see an empty box. And alt is the only description a screen reader gets, since the rendered canvas is opaque to assistive technology.

Serve the right MIME type:

USDZ needs model/vnd.usdz+zip and GLB needs model/gltf-binary. A server that sends application/octet-stream will make Quick Look refuse the file, and this is a common cause of "it works locally but not in production".

Scale, Units and Anchoring

AR places your model in a real room, so scale stops being arbitrary and becomes visibly right or wrong.

Both glTF and USD define units as metres. A model authored at 1 unit = 1 millimetre arrives a thousand times too large, which in AR means the camera is inside it and the user sees a wall of texture. Authored in centimetres, it is a hundred times too large. Check the bounding box before exporting, not after.

Origin placement matters almost as much. Quick Look anchors objects by their origin, so a model whose origin sits at its centre will be placed half-buried in the floor. Put the origin at the base, centred horizontally, and the object lands the way people expect.

Also consider orientation: the model should face the viewer when first placed. A model authored facing away arrives back-to-front and users rarely think to rotate it.

Materials That Survive the Trip

Quick Look renders physically based materials, so the safest approach is to stay within standard PBR: base colour, metallic, roughness, normal, occlusion and emissive. Anything outside that set is a gamble.

Specific things that tend not to convert: procedural textures, custom shader graphs, multiple UV sets, and transparency more elaborate than simple alpha blending. Glass and refraction in particular rarely look the way they did in your authoring tool.

Texture resolution deserves restraint too. AR runs on a phone that is simultaneously processing camera input and tracking the room. Two 2K maps are usually plenty; four 4K maps will heat the device and drop the frame rate, which reads to the user as the tracking being bad.

Test on a real device before shipping. The desktop preview tells you the file is valid; it does not tell you whether the phone can render it smoothly while tracking a floor.


Convert to USDZ or GLB

Nine formats in and out, processed entirely in your browser.

Open 3D Converter