AR / Cultural Tourism2023

Night Tour of Taihe Lake

Lishui's first XR cultural-tourism deployment — a nighttime AR walking experience around Taihe Lake, anchored with Immersal SLAM and delivered cross-platform on phones and Rokid AR glasses.

Role
Solo Developer
Client
Qingtian government, Zhejiang, China
Agency
Chance 3D
Year
2023
Night Tour of Taihe Lake

Stack

  • AR
  • Immersal
  • 8th Wall
  • Three.js
  • Rokid
  • Cultural Tourism

The brief

Qingtian's government wanted visitors to walk the Taihe Lake trail after dark and meet the county's own history along the way: glowing rice fish, ancient grasshopper boats, a nod to Qingtian's most famous diaspora son, Jensen Huang. Chance 3D owned the cultural narrative and the story beats. I was solo technical lead, which meant the spatial map, the AR runtime, the delivery layer for two very different devices, and standing on the trail during launch week fixing whatever broke.

Lishui's official media called it the municipality's first XR cultural-tourism deployment. Over one Lantern Festival day the platform served around 3,000 visitors and logged roughly 14,200 interactions.

Launch night crowd on the Taihe Lake trail
Lantern Festival crowd density, which is also the condition the tracking had to survive

Why night broke the tracking

Outdoor visual SLAM wants stable, textured, well-lit geometry. The trail after dark offers none of it.

The lakeside scene the Immersal map had to anchor to
Most of the trackable detail in this frame is point lights and their reflections on moving water

Almost every strong feature in that frame is a light source or its reflection on water that will not hold still. Building the map in daylight and expecting it to relocalise at night does not work: the features a daytime map keys on are invisible, and the ones visible at night were never recorded.

So I mapped at night, in the conditions visitors would use. I captured on site across several evening sessions and rebuilt the Immersal maps until relocalisation held at every story beat along the trail, then went back and validated each anchor point separately. That was the bulk of the engineering time, and none of it shows up in a feature list.

One of the per-beat relocalisation targets
Each story beat got its own capture and validation pass rather than relying on one trail-wide map

A stack with no precedent

I combined Immersal, 8th Wall, and Three.js. When I built this I could find no public example of those three running together, so integration was trial and error against two vendors' runtimes at once.

The division of labour: Immersal handles visual SLAM and the persistent spatial maps that anchor content across dozens of metres of open trail. 8th Wall gives me a browser runtime, so a visitor scans a QR code and starts, with no app install between a curious tourist and the experience. Three.js renders the cultural moments, where I wanted direct control rather than a scene abstraction.

Install-free entry mattered more than any rendering decision. On a festival night nobody downloads a 200 MB app on public wifi to look at a virtual fish.

Two devices, one pipeline

The same content also ran on Rokid consumer AR glasses as a premium layer alongside the phone experience. I tested it on the trail, against the real bridge and waterfront that the map was built from.

Testing the Rokid build on site
Validating the glasses build against the same waterfront the spatial map was captured from

Phone WebAR and dedicated AR glasses have different input, different fields of view, and different performance ceilings. I fed both from a single content pipeline, which is why the two versions stayed in sync when the creative team changed a story beat late. Maintaining two forked builds through a launch window with one engineer would have been a bad trade.

What launch week taught me

I was on site through the Lantern Festival peak. Crowd density does things to an AR activation that no amount of empty-trail testing predicts: bodies occlude the features the tracker needs, people hold phones at angles you never tested, and the queue at a popular beat changes the viewing position you designed for.

Being there to fix it live was worth more than another week of preparation. If I ran this again I would build the relocalisation-failure path first instead of last, because a visitor whose tracking drops needs a graceful recovery rather than a frozen scene, and I wrote that fallback under pressure rather than by design.

Regional press coverage of the deployment
Lishui Daily's report on the county's first XR cultural-tourism deployment

The project later took several regional awards in the metaverse and cultural-tourism categories. What I take from it is narrower: outdoor AR lives or dies on whether you mapped in the conditions your visitors will actually stand in.

Gallery

Night Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screenNight Tour of Taihe Lake screen
Night Tour of Taihe Lake — Oliver Zhang