Real-world scale

AR only works if the dish is the size the dish actually is. Every model carries physicalSizeM — the length of its longest side, in metres.

Dinner plate width: 0.27 metres0.27 mphysicalSizeM — dinner plate
Exporters disagree wildly about scale; a dish can arrive from a scanner 112 m long. The pipeline rescales every mesh to match this measurement, because ARKit hunts for a plane big enough for a 112 m kebab and never finishes tracking.

Two numbers, not one

physicalSizeM is a measurement — how big the dish is. viewSettings.arScale is a multiplier the restaurant applies on top, for when the measurement is right but the placed result still reads wrong. Native clients apply both; the SDKs do it for you.

Placement is not resizable

Both native SDKs pass allowScaling: false, and the web SDK sets ar-scale="fixed". The mesh is already life-size, and life-size is the entire question a diner is asking. Letting them pinch it turns the answer back into a guess.

overriding it, if you must
await ArmenusNative.presentAr({
  url: item.model.usdzUrl,
  title: item.name,
  allowScaling: true, // the diner can now resize; the size no longer means anything
});

Reference sizes

What restaurants pick from in the dashboard. Nobody knows their dish is “0.27 m” — they know it is on a dinner plate.

Reference objectphysicalSizeM
Espresso cup0.08
Small bowl / mezze dish0.14
Side plate0.20
Dinner plate0.27
Large pizza / platter0.35
Sharing platter0.50