# 夜游太鹤湖

> 丽水首个 XR 文旅项目：围绕太鹤湖的夜间 AR 步道体验，用 Immersal SLAM 做空间锚定，同时跑在手机和 Rokid AR 眼镜上。

- URL: https://oliverz.dev/zh/work/qingtian-xr-wenlv
- Author: Oliver Zhang (https://oliverz.dev)
- Language: zh-Hans
- Category: AR / 文旅
- Year: 2023
- Role: 唯一开发者
- Client: 浙江省青田县政府
- Agency: Chance 3D
- Stack: AR, Immersal, 8th Wall, Three.js, Rokid, Cultural Tourism

## 项目背景

青田县政府想让游客天黑以后沿着太鹤湖步道走一圈，一路上遇见青田自己的历史：发光的稻鱼、古老的舴艋舟，还有向青田最有名的海外游子黄仁勋致意的一段。文化叙事和故事节点由 Chance 3D 负责。技术这边只有我一个人，空间地图、AR 运行时、给两种完全不同设备的交付层都归我，上线那一周还得站在步道上，哪里坏了修哪里。

丽水官方媒体称它是全市第一个 XR 文旅项目。元宵节当天，平台服务了大约 3,000 名游客，记录到约 14,200 次交互。

![上线当晚太鹤湖步道上的人群](https://oliverz.dev/works/qingtian-xr-wenlv/onsite1.gif?v=5c408030 "元宵节的人流密度，也是追踪必须扛住的条件")

## 为什么到了晚上追踪就失灵

户外视觉 SLAM 需要稳定、有纹理、光照充足的几何特征，而夜里的步道一样都没有。

![Immersal 地图要锚定的湖边场景](https://oliverz.dev/works/qingtian-xr-wenlv/taihehuanjing-target.jpg?v=1d0298c6 "画面里大部分可追踪的细节，都是点光源和它们在流动水面上的倒影")

这张图里几乎所有明显的特征，不是光源，就是光源在水面上晃个不停的倒影。白天建图、指望晚上能重定位，是行不通的：白天地图依赖的特征晚上看不见，晚上看得见的那些又从来没被记录过。

所以我改在晚上建图，条件和游客实际使用时一样。我分几个晚上去现场采集，反复重建 Immersal 地图，直到步道上每个故事节点都能稳定重定位，再回头把每个锚点单独验证一遍。工程时间大部分花在这里，但这些在功能列表里一条也看不出来。

![其中一个故事节点的重定位目标](https://oliverz.dev/works/qingtian-xr-wenlv/taihehuanjing-check-in-point.jpg?v=8676a2b7 "每个故事节点都单独采集、单独验证，而不是靠一张覆盖整条步道的地图")

## 一套没有先例的技术组合

我把 Immersal、8th Wall 和 Three.js 组合在一起。做这个项目的时候，我找不到任何公开案例同时用这三样，所以集成只能靠试错，同时和两家厂商的运行时较劲。

分工是这样的：Immersal 负责视觉 SLAM 和持久化的空间地图，在几十米长的开放步道上锚定内容；8th Wall 提供浏览器运行时，游客扫个二维码就能开始，好奇的游客和体验之间不隔着任何安装；Three.js 负责渲染那些文化场景，这部分我想直接掌控，不想再套一层场景抽象。

免安装比任何渲染上的决定都重要。节日晚上，没人会用公共 Wi-Fi 下一个 200 MB 的 App，就为了看一条虚拟的鱼。

## 两种设备，一条管线

同一套内容还跑在 Rokid 消费级 AR 眼镜上，作为手机体验之外的高端版本。我在步道上实测过，对着的就是当初建图用的那座桥和那段湖岸。

![在现场测试 Rokid 版本](https://oliverz.dev/works/qingtian-xr-wenlv/wearing-rokid-AR-glasses.jpg?v=2264e2d7 "对着当初采集空间地图的同一段湖岸，验证眼镜版本")

手机 WebAR 和专用 AR 眼镜的输入方式、视场角和性能上限都不一样。我让两边都从同一条内容管线取内容，所以创意团队临时改了某个故事节点，两个版本也能保持同步。一个工程师在上线窗口里同时维护两套分叉的版本，这笔账不划算。

## 上线那一周学到的

元宵节高峰期间我一直在现场。人群密度对 AR 活动的影响，是在空荡荡的步道上测多少遍都预料不到的：人会挡住追踪器需要的特征，大家举手机的角度是你从没测过的，热门节点前排起的队伍也会改变你原本设计好的观看位置。

能在现场实时修问题，比多准备一周更有价值。如果再做一次，我会把重定位失败的处理放在最前面做，而不是最后。追踪丢了的游客需要的是平滑恢复，不是一个卡住的画面；而那段兜底逻辑，我是在压力下赶出来的，不是事先设计好的。

![地方媒体对项目的报道](https://oliverz.dev/works/qingtian-xr-wenlv/lishuiribao.jpg?v=2f53002f "《丽水日报》关于全县首个 XR 文旅项目的报道")

项目后来拿了几个元宇宙和文旅类别的地区奖项。我自己的收获更具体一些：户外 AR 成不成，就看你是不是在游客真正会站的那种条件下建的图。
