Mesh
Every map produces a raw (untextured) and a textured GLB mesh of the scanned space.
Overview
The mesh is the geometric representation of a mapped space. It is produced for every input type, including Gaussian Splat uploads, where the mesh is reconstructed from the splat. It is what you use for occlusion, collision, and navigation at runtime, and for placing content against real-world geometry before you deploy.
Two variants
Ship the raw mesh when the mesh runs on device: it is far smaller, and occlusion and physics only need geometry. Use the textured mesh when a human is looking at it. You can reduce the raw mesh further in any 3D tool (Blender, for example) by lowering the poly count.
People captured during scanning are masked out when the mesh is textured, so passers-by do not end up baked into the texture.
Coordinate frame
Both meshes sit in the map's local frame:
origin at
(0, 0, 0),+Yup,metric scale, where 1 unit is 1 metre.
A VPS query returns poses in that same frame, so anything you align to the mesh in the editor appears in the same physical spot at runtime. See Coordinate Systems for the left-handed and right-handed conventions.
Do not move the origin of a downloaded mesh. It must stay at (0, 0, 0), otherwise everything you place against it will be offset once VPS poses arrive.
Getting the mesh
Developer Portal
Open the map from the Maps list and click View Mesh in the Map Details toolbar. The viewer lets you inspect the mesh and download the raw and textured GLB files.
Unity Editor
The Map Mesh Downloader pulls the mesh straight into your scene under the MapSpace GameObject, so you can lay out content against real geometry. Downloaded meshes are tagged EditorOnly and excluded from the build. At runtime, MapMeshHandler can fetch and display the mesh instead.
REST API
Meshes are stored per map and fetched through the /file endpoint, which exchanges a storage key such as <accountId>/<mapId>/Mesh/TexturedMesh.glb for a short-lived, pre-signed download URL.
Point cloud
Alongside the mesh, every processed map publishes a point cloud at PointCloud/map.pcd.
Format
Binary PCD, XYZ fields only (no colour, no normals)
Spacing
Voxel downsampled at 5 cm
Coordinate frame
Right-handed, +Z up
Storage key
<accountId>/<mapId>/PointCloud/map.pcd
Use it for measurement, clash detection, and importing the space into CAD, BIM, or point cloud tooling that does not read GLB. For occlusion, collision, and content placement, use the mesh instead.
Its frame differs from the mesh
The point cloud does not share the mesh's frame. map.pcd is right-handed with +Z up, while the mesh and the Pose/*.json files are left-handed with +Y up. Overlay the two without converting and the cloud appears rotated 90° about X.
To place the cloud in the mesh's frame, swap the Y and Z components of every point: (x, y, z) becomes (x, z, y). The swap flips handedness, which is what makes the two agree. A rotation on its own leaves a mirrored cloud.
This is true for every map, whatever the input, so a single conversion works across your whole account.
Getting the point cloud
Open the map from the Maps list and use the point cloud download on the Map Details meshes card.
Over REST, Map details reports the cloud on the map object:
Exchange that key for a short-lived download URL through the /file endpoint, the same way as for a mesh. A map with no pointCloud field has no cloud published.
Replacing a mesh
If you clean up or re-texture a mesh externally, you can push it back to the map with POST /vps/map/{mapCode}/mesh-upload-url, choosing meshType: textured or meshType: raw. See Map Operations.
Replacing a mesh does not affect localization accuracy. Queries run on the map's feature data, not on the mesh, so the visual mesh can be updated at any time without re-processing the map.
Last updated
Was this helpful?

