Skip to content
← Back to Blog tutorials

GLB to USDZ: convert 3D assets for iOS AR Quick Look

By BitSoul3D5 min read114 views

Your pipeline speaks GLB; iPhones speak USDZ. AR Quick Look — the viewer that opens when someone taps a 3D model in Safari, Mail, or Messages — renders USDZ and nothing else. The fastest reliable route is Apple's usdzconvert with three preparation steps: decompress Draco first, swap KTX2 textures for PNG, and verify real-world scale. This guide covers all four conversion routes, the exact flags that keep PBR materials intact, and the material failures you'll hit on your first attempt.

GLB to USDZ: convert 3D assets for iOS AR Quick Look

Why USDZ is required for AR Quick Look

Apple's AR stack standardized on Pixar's Universal Scene Description years ago, and there is no glTF fallback: a plain link pointing at a .glb file opens a download dialog on iOS, while the same link pointing at a .usdz opens a full AR session with plane detection, people occlusion, and real-scale placement — no app install, no framework, no permission prompt. For product previews, furniture placement, and portfolio pieces, that one file format is the difference between a spinning thumbnail and the model sitting on the viewer's actual desk.

USDZ itself is just an uncompressed zip holding a .usdc scene plus textures. The catch is the material model: AR Quick Look renders UsdPreviewSurface, which supports base color, metallic, roughness, normal, occlusion, opacity, and emissive — and none of glTF's extensions. Everything you convert gets squeezed through that funnel, which is where most conversions fail.

Choose your conversion route

Choose your conversion route - BitSoul3D

RoutePlatformHandles Draco/KTX2?Best for
usdzconvert (Apple USD tools)macOS, PythonNo — pre-process firstBatch pipelines, exact control
Reality ConvertermacOS GUINoOne-off drag-and-drop checks
Blender USD exportAny OSYes (imports GLB fully)Editing during conversion
three.js USDZExporterBrowser, runtimeYes (via loaders)Web shops converting on the fly

usdzconvert is the reference implementation and the one worth scripting. Reality Converter is the same converter with a preview window. Blender's USD exporter has matured to the point where GLB→Blender→USDZ round-trips cleanly, and because Blender decodes Draco and KTX2 on import, it doubles as a decompression stage. The three.js exporter matters when users upload their own models — an online configurator can hand an iPhone user a USDZ generated in the browser tab.

Convert with usdzconvert step by step

Draco-compressed geometry makes usdzconvert fail with an opaque parse error, and KTX2 textures pass through unreadable — AR Quick Look shows a white model. Strip both with glTF Transform, then convert:

# 1) decompress Draco + transcode KTX2 back to PNG
gltf-transform copy chair-draco.glb chair-clean.glb
# 2) convert, declaring PBR maps explicitly
usdzconvert chair-clean.glb chair.usdz \
  -diffuseColor  tex/albedo.png \
  -metallic      tex/metal.png -roughness tex/rough.png \
  -normal        tex/normal.png -occlusion tex/ao.png

If the GLB embeds its textures (most catalog downloads do), usdzconvert chair-clean.glb alone usually maps them correctly — the explicit flags are for when the auto-mapping guesses wrong, which shows up as a gray or overly shiny result. Run with -v to print exactly which texture landed in which slot.

Scale is the other silent killer. USD works in meters and AR Quick Look places objects at literal world scale: a chair exported at centimeter scale appears 100× too large in someone's living room. A quick sanity check before converting — BitSoul's 3D Studio shows a model's bounding box in meters in the inspector, straight from the browser. Models like the Poäng chair in the catalog ship at real-world scale specifically so this step is a confirmation, not a fix; a free account's two monthly downloads cover evaluating the pipeline, and commercial use is included with paid memberships.

Fix materials that break in USD

Fix materials that break in USD — illustrated

Expect these four failures, in descending order of frequency:

Vertex colors disappear. UsdPreviewSurface reads them only when explicitly wired, and usdzconvert doesn't wire them. Bake vertex color into the base-color texture before converting — in Blender: Bake type Diffuse, contributions Color only, to a new image.

Transparency renders as opaque or invisible. glTF's alphaMode: BLEND converts, but AR Quick Look's depth sorting on overlapping transparent shells is unreliable. Keep one transparent shell per object; glass-inside-glass will flicker.

Normal maps look inverted. glTF and USD both expect OpenGL-style normals (green channel up), but assets that came through a DirectX pipeline sneak in flipped. If surface detail looks embossed instead of engraved on-device, invert the normal map's green channel — no re-export needed.

Emissive looks dim. Quick Look tone-maps against real-world lighting; an emissive strip that glows in your renderer reads as a matte sticker in AR. Multiply the emissive texture toward white and accept that HDR bloom is not available.

The Blender 5 glTF export settings guide covers producing a clean GLB before any of this; a clean source removes half the failure surface.

Test on-device before you ship

Serve the file with MIME type model/vnd.usdz+zip — without it, Safari downloads instead of launching AR. The trigger markup is a plain anchor carrying the attribute rel="ar", its href pointing at the .usdz file and wrapping a preview thumbnail image — Safari overlays the AR badge on that thumbnail automatically. Then check three things on a physical iPhone (the simulator renders USDZ but skips the AR session): placement scale against a known object, material response as you move the phone (metallic surfaces should pick up your room's light), and file weight — keep USDZ under ~25 MB and textures at 2048px or below, because Quick Look decodes everything into memory on devices with far less headroom than your workstation. If the model needs slimming first, the browser-based poly reduction workflow and the GLB optimization guide both apply unchanged — optimize the GLB, then convert, never the other way around.


This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.


Build with real assets: grab game-ready furniture 3D models on the BitSoul marketplace and drop them straight into your project.

Tags: furniture

Skip the modeling — download it instead

A free BitSoul3D account gets you 2 GLB downloads every month for personal use plus 25 one-time AI Engine credits, no card required. PBR-textured GLB downloads with a full 3D preview before you buy, for Unreal, Unity, Godot or Blender — OBJ and 3D-printable STL come with any purchase or paid plan.

Browse 1,051 models — from $4.99 → or start free (2 downloads a month)