Update exhibit
This commit is contained in:
@@ -78,6 +78,32 @@ a procedural blue "Sad" wisp.
|
||||
|
||||
---
|
||||
|
||||
## Scene workshop (admin GUI): `admin.html`
|
||||
|
||||
A 3D authoring tool over `data/scene.json` — no more hand-editing JSON. Orbit the build, click to
|
||||
select, drag on the table to position. Four tabs:
|
||||
|
||||
- **World** — table dimensions (mm). X = length, Z = depth, Y = max ghost height.
|
||||
- **Anchors** — the AR crests: marker type/id, size, position, yaw. (Note: existing scene used
|
||||
`apriltag`; the detector is ArUco — the editor lets you set `aruco` and the matching id.)
|
||||
- **Ghosts** — spawns with `hover` (position + radius + bob + yaw) or `patrol` (editable path of
|
||||
points, loop period, face-travel) motion, plus lure colour. Drag the ghost to move it; drag
|
||||
individual patrol points to reshape the path.
|
||||
- **Buildings** — simple stackable box blockers for occlusion. Drag to place, set W×H×D, and
|
||||
"Duplicate (stack +Y)" to pile boxes into a structure. (Occlusion rendering comes next; this
|
||||
authors the geometry.)
|
||||
|
||||
Tools: select (V), add ghost (G), add building (B), add anchor (A). Delete/Esc work on selection.
|
||||
|
||||
**Save** POSTs to the server, which **backs up the old `scene.json`** to `data/backups/` first,
|
||||
validates, writes, and **hot-reloads** — so connected viewers/phones get the new anchors and
|
||||
ghosts immediately. **Export** downloads the JSON; **Reload** discards changes and re-fetches.
|
||||
|
||||
Server endpoints: `GET /api/scene` (full scene), `POST /api/scene` (validated save + backup).
|
||||
|
||||
> The scene schema gained a `blockers` array: `{ id, label, position:{x,y,z}, size:{x,y,z} }`,
|
||||
> where `position` is the footprint corner (origin-relative) and `size` is the box extent in mm.
|
||||
|
||||
## Forgiving scanning (`js/detect-tuned.js`)
|
||||
|
||||
Raw js-aruco can feel finicky — slow to acquire, quick to drop on blur, jittery once locked.
|
||||
@@ -142,12 +168,17 @@ key numbers — they'll tell us how much multi-marker fusion is worth before we
|
||||
```bash
|
||||
npm install
|
||||
npm start # PORT defaults to 34034
|
||||
# open http://localhost:34034/ar-test.html (camera needs HTTPS on phones)
|
||||
# open http://localhost:34034/ god-view viewer (viewer.js)
|
||||
# open http://localhost:34034/admin.html scene workshop (authoring GUI)
|
||||
# open http://localhost:34034/ar-head.html 3D ghost AR (camera needs HTTPS on phones)
|
||||
# open http://localhost:34034/ god-view viewer (viewer.js)
|
||||
```
|
||||
|
||||
Env: `PORT` (default 34034), `TICK_HZ` (default 20).
|
||||
|
||||
### Deploy box (blackpearl)
|
||||
`./run.sh {start|stop|restart|status|logs|update}` — background runner for testing.
|
||||
`./run.sh update` syncs to origin/dev and restarts. `./deploy.sh` is the pull-only one-shot.
|
||||
|
||||
---
|
||||
|
||||
## Status / roadmap
|
||||
@@ -159,8 +190,10 @@ Env: `PORT` (default 34034), `TICK_HZ` (default 20).
|
||||
- [x] AR PoC: camera + detection + ghost locked to marker (flat sprite)
|
||||
- [x] 3D LEGO-head ghost holding world orientation (`ar-head.html`)
|
||||
- [x] Pose jitter meter (`jitter.html`) with session logging + JSON export
|
||||
- [x] Forgiving detection: tuned params, multi-scale, coast + smooth (`detect-tuned.js`)
|
||||
- [x] Scene workshop admin GUI (`admin.html`) — author anchors, ghosts, motion, buildings; save+backup+hot-reload
|
||||
- [ ] Multi-marker pose fusion (one combined camera pose from all visible crests)
|
||||
- [ ] Occluder geometry: ghosts vanish behind premapped buildings (depth-only boxes)
|
||||
- [ ] Occluder geometry: ghosts vanish behind the building blockers (depth-only boxes)
|
||||
- [ ] Phone AR client: render anchored ghosts through the camera using marker pose
|
||||
- [ ] Calibration page: scan each crest, record its measured world position
|
||||
- [ ] Per-ghost colour/sprite wiring from the enriched roster
|
||||
|
||||
Reference in New Issue
Block a user