3D Model Delivery Requirements

The checklist below will help you avoid making multiple revisions when delivering models for AR Quicklooks on the Variant platform. Please review it carefully when starting to model, and before uploading

GLTF Export requirements

A GLTF (not GLB) file that comprises the following separate files:

  • 1 GLTF file
  • 1 BIN file

And for each standard material, or material variant:

  • 1 base color texture 
  • 1 normal map texture
  • 1 texture with ambient occlusion, roughness, and metalness mapped to the RGB channels ( Red: AO, Blue: Roughness, Green: Metalness)
  • 1 emissive map (if needed) 

In exporters this is sometimes referred to as ‘GLTF Separates’. The important thing is that it is not a GLB, or an embedded GLTF (where textures are all packed in a single .gltf file).

Avoid spaces and special characters except - and _ in filenames

Valid GLTFs don’t use spaces or special characters (e.g. []\|}{[email protected]#$%^&*()=`) in their filenames, so the converter will fail if they are used. Rename textures and your project files to avoid them. E.g. ‘wood [red!].png’ should become ‘wood_red.png’.

The size of the .bin file and textures needed for one Variant shouldn’t be more than 15 MB.

An ideal size for a single Variant that balances quality and download speed is around 8MB. If you have 3 different color variants, only one will be downloaded by the user at a time, so the files you upload can be larger than 15MB, as long as the user will download less for a single model.


The scale of the mesh is accurate when viewed in AR.

Use a workflow based on metres as a unit if possible. Check the model scale on the Variant site, or via Sketchfab AR.

The origin is at the base of the mesh.

This is vital to avoid the model hovering above the ground, or misaligned rotation. The origin point will be placed on the floor where the user taps, so make sure its the lowest point of the model, and at the center point.

Normals are not inverted, and no objects have negative scale values (e.g. -1.0, -1.0, -1.0).

The mesh uses the smallest number of polygons needed to give the model an accurate outline.

Small items like screws, plates, etching etc. should use textures instead of polygons.

Any untagged meshes have been combined into one object, with an untagged material.

Materials & Textures

JPGs are used for any texture that isn’t a flat colour, and doesn’t require an alpha channel.

These files will be downloaded over the web, and users expect their model to load roughly as fast as a web-page. 70-85% quality in photo editing packages is normally the ‘sweet spot’.

Full PBR materials are used.

If you are supplying only diffuse and normal maps, you are likely not using a PBR workflow, which should include details in the metal and roughness channels.

The color texture is treated as an ‘albedo’ texture, creating accurate colours in AR.

The iOS and Android renderers assume the colour texture is ‘albedo’ which is the pure color of the surface, with no shadow or shading added (these are added when AO, normals and lighting are applied). If you are not using an albedo-based approach, colours will seem dull, desaturated and too dark in AR, as shadows are being applied twice. 

Diffuse is the highest-resolution texture, with others at half resolution or lower

To keep file-sizes down, and to ensure the compressed file data isn’t being spread over too many pixels (resulting in JPG artifacts), non diffuse files should be lower resolution. E.g. it is better to have fewer, more accurate pixels in a normal texture, than big JPG artifacts that change the appearance of the surface.

All materials using alpha are set to 'Blend' mode, not 'Cutoff' or 'Mask'

USDZs cannot use alpha modes other than Opaque or Blend, and all Variant models must be convertible to USDZ.

UV Mapping

UV maps use larger areas for visible or prominent details (like the top of a table, or a logo), and small areas for less visible or detailed areas (like the bottom of a cabinet).

All of the model's UV shells are mapped to a single texture map, except for tagged meshes that need to vary.

Each mesh only has a single UV channel applied.

There are no overlapping UV shells.

The texture map is positioned in the 1:1 space.