# 构建 mesh

普通视频和 360° 视频建成的地图，在 **Ready（已就绪）** 时已经可以定位、可以在 Space Studio 查看点云，但还没有 mesh。AR 遮挡和导航需要 mesh，请在地图卡片上选择它的构建方式。

LiDAR 扫描建成的地图在建图阶段就生成了表面几何，不经过这一步。移动端三维扫描（Polycam / Kiri Engine）的卡片上也没有 Mesh 区块：它们的表面模型来自上传扫描数据时可选提交的那个 GLB，不在这里补建。

## 为什么就绪的地图还没有 mesh

定位使用的是稀疏点云，不需要 mesh。mesh 是覆盖在这些点上的连续表面，构建它要额外花费大量计算时间，而且不是每张地图都需要：只做定位和内容摆放时，没有 mesh 也能正常工作。

把这一步拆出来，是为了让地图先可用，再由你决定是否以及如何补上表面几何。等待期间地图照常可以定位、可以打开 Space Studio、可以编辑 Content。

## 两种方式的区别

已就绪的地图卡片上有 **Mesh** 区块，提示「地图已经可以定位、可以查看点云。AR 遮挡与导航需要 mesh —— 请选择构建方式」，下面是三个按钮：**在服务器上构建**、**上传 mesh**、**下载工作包**。后两个属于同一种方式——先下载工作包在桌面构建，再把结果上传。

| | 在服务器上构建 | 下载工作包 |
| --- | --- | --- |
| 你要做什么 | 点一次按钮 | 下载、在自己电脑上跑、再上传 |
| 需要什么 | 无 | 桌面版 Metashape Professional |
| 大致耗时 | 数小时 | 取决于帧数和帧的尺寸：263 帧手机视频实测约 6 分钟，360° 全景帧大得多、要长不少 |
| 构建期间 | 地图照常可用、可定位 | 地图照常可用、可定位 |
| 适合 | 不着急，或手边没有 Metashape | 想快点拿到结果，或希望自己掌控构建过程 |

两种方式产出的 mesh 用途完全相同，后续的发布、分块和导航派生也走同一条链路。

## 在服务器上构建

1. 在 Mesh 区块选择 **在服务器上构建**。
2. 在弹出的确认框里确认开始。这一步只补建 mesh，不会重新建图，也不影响现有的定位。
3. 卡片换成 **上传 → SfM 建图 → Mesh 生成** 的三段进度条，前两段显示为已完成，Mesh 段开始走动。需要时可以选择 **取消构建**。

构建期间地图保持在线，定位不受影响。mesh 构建要独占建图资源，而且不排队：服务器上有其它建图或 mesh 任务在跑时，这次请求会被直接拒绝并给出提示，稍后再点一次即可。

## 下载工作包，在桌面 Metashape 构建

工作包里有这张地图的视频帧、我们解算好的相机位姿、一个 Metashape 脚本和一份离线说明。脚本**全程冻结位姿**，不会让 Metashape 重新对齐相机——这样建出的 mesh 与地图共用同一套坐标，传回来不需要再做任何对齐。

### 开始之前

- **Metashape Professional**，需要有效授权或官方 30 天全功能试用。Standard 版和 Demo 模式不可用：Demo 能算，但不能保存工程或导出模型，几小时的计算会白做。
- 磁盘空间：解压后的帧、深度图和工程通常需要数倍于工作包本身的空间。
- 显卡：随包脚本会自动启用检测到的显卡，速度快数倍；如果 Metashape 的 **Preferences ▸ GPU** 里没有列出你的显卡，先装好驱动再跑。

### 操作步骤

1. 在 Mesh 区块选择 **下载工作包**。打包完成后浏览器开始下载。
2. 把整个压缩包解压到一个目录。不要直接在压缩包里运行脚本，也不要只解压其中一部分。
3. 打开 Metashape，选择 **File ▸ New** 新建空工程。
4. 选择 **Tools ▸ Run Script…**，选中解压目录里的 `build_refined_mesh.py`。
5. 脚本运行结束后，`out/` 目录下会得到一个 `.glb` 模型和一份 `build_report.json` 运行报告。
6. 回到地图卡片的 **Mesh** 区块选择 **上传 mesh**，选中那个 `.glb`（把它单独压成 zip 再上传也可以）。上传完成后会自动开始发布。

`build_report.json` 记录了本次运行的自检数字。想一并提供，就把 `out/` 目录压成一个 zip 再上传（只压 `out/`，不要把整个工作包压进去——`frames/` 有好几 GB，会被按大小拒收）：服务端据此核对这份 mesh 属于哪张地图的哪一次重建。不提供也可以，只传 `.glb` 同样能发布；遇到问题时把这份报告发给我们能更快定位原因。

## 上传之后会发生什么

上传的 mesh 会先保存在服务器上等待发布，卡片上显示它的大小并提示它计入这张地图的存储用量。系统随后校验它的格式、与地图的对齐关系，以及是否对应当前这次重建。如果服务器此刻正忙于别的建图任务，自动发布会被拒绝——文件仍留在卡片上，稍后选择 **发布它** 即可，不必重传。

- **通过**：发布完成，mesh 立即可用。
- **没通过**：卡片会说明无法发布。请重新下载工作包、在 Metashape 中重新导出，再上传一份新的文件。被拒的那份仍然占用存储，可以在卡片上选择 **删除它**。
- **地图在此期间重建过**：冻结位姿不再对应，这份 mesh 无法发布。重新下载工作包再走一遍。
- **发布没能开始或中途失败**：这份 mesh 会留在卡片上等待发布。选择 **发布它** 直接重试，不必重新上传。

## 某一种方式失败之后

服务器构建失败后不会自动重试，卡片会提示改用桌面 Metashape。这是有意的：服务器构建要占用数小时计算资源，重复尝试同一条已经证明走不通的路只是消耗。

桌面 Metashape 这条方式上传的 mesh 没通过检查时，判定只针对**你上传的那一个文件**，而不是这种方式本身。在 Metashape 中修正后重新导出、重新上传即可继续。

## mesh 就绪之后

- 在 Space Studio 的**地图**面板中打开**网格**查看表面，**线框**可叠加三角形边线检查连续性。
- AR 客户端获得遮挡能力：虚拟物体会被真实墙面和家具正确遮挡。
- 系统会尝试从 mesh 导出 AR 导航用的可行走网格。地面被反光、行人或过密细节覆盖时，这一步可能得不到结果——此时 mesh 与 AR 遮挡照常可用，卡片上会标出 **导航不可用**。这取决于场景本身，没有参数可调。

## 下一步

- 打开[探索地图](/tutorials/maps/explore)查看 mesh 与点云。
- 回到[管理地图](/tutorials/maps/manage)了解卡片的其它状态与操作。
