CrossAtlas is a cross-reality collaboration platform designed to help users share, communicate, and understand spatial references across VR and desktop environments using synchronized VR-PC views, bidirectional projection techniques, and shared spatial landmarks.
π Paper details coming soon
- π§ Bidirectional Projection: Four projection techniques (Horizontal, Vertical, PCA, Equirectangular) that transform the VR user's 3D layout into a 2D desktop view in real time, with inverse unprojection so desktop clicks map back into 3D space.
- π Cross-View Synchronization: Real-time state sync between VR and PC clients using Yjs CRDTs over WebSocket, keeping selections, task progression, and visual feedback consistent across both views with no perceptible delay.
- π Configurable Spatial Layouts: Parameterized layout curvature from flat front-facing arrangements to fully surrounding Full-Sphere configurations, with angular-distance-based point sampling relative to the VR user's headset.
- π₯½ Browser-Based, Hardware-Agnostic: VR client built with Babylon.js and Anu.js running in WebXR; PC client in React.
CrossAtlas implements four bidirectional projection techniques across two families:
Planar
- Horizontal β Top-down (floor plane) view. Preserves lateral layout; collapses vertical structure.
- Vertical β Front-facing (wall plane) view. Preserves left-right and up-down; compresses depth.
- PCA β Adaptive plane maximizing point-cloud variance. Orientation is computed at task start; vertical gradient is used to establish a consistent "up."
Spherical
- Equirectangular β Maps each point to its angular position on a unit sphere around the VR user, then linearly maps longitude and latitude to a 2D rectangle. Provides a continuous 360Β° panoramic view of the full surrounding space.
For more details, please check out our paper.
cross-atlas/
βββ packages/
β βββ client-2d/ # PC (2D) client β React + D3, Vite
β βββ client-3d/ # VR (3D) client β Babylon.js + Anu.js + WebXR, Vite
β βββ shared/ # Shared task definitions, projection math, sync types, logging
βββ scripts/
β βββ dev.mjs # Orchestrates full dev stack
β βββ yws-ssl-server.mjs # Yjs WebSocket server
β βββ generate-certs.mjs # Self-signed SSL cert generation
β βββ generate-point-configs.ts # Precomputed point selection generator
βββ data/
β βββ point-selections.json # Precomputed angular-distance point selections
βββ certs/ # SSL certificates (not committed)
git clone https://github.com/AlexanderHYang/cross-atlas.git
cd cross-atlasnpm installThe dev server requires HTTPS for WebXR. On first run, certificates are generated automatically if OpenSSL is available:
npm run generate-certsCertificates are written to
certs/and are not committed to version control.
Start the Yjs WebSocket server and both Vite clients in one terminal:
npm run devThis starts the Yjs server plus the 3D (VR) and 2D (PC) Vite dev servers. All logs stream in the same window. Ctrl+C stops everything.
- Open the 3D client (e.g.
https://<your-ip>:5173) in your VR headset's browser. Accept the self-signed certificate, then click the headset icon to enter immersive mode. - Open the 2D client (e.g.
https://<your-ip>:5174) on a desktop browser.
| Flag | Description |
|---|---|
--projection=<equirectangular|pca|vertical|horizontal> |
Set projection mode (default: client-selected) |
--layout=<spherical|hemispherical|planar> |
Set point layout curvature |
--tasks=<digits> |
Enable specific tasks, e.g. --tasks=13 for Tasks 1 and 3 |
--require-calibration-orientation=<true|false> |
Require VR user to face landmark during calibration |
--random-selection=<true|false> |
Use randomized angular-distance sampling instead of precomputed selections |
β€οΈ CrossAtlas is a collaborative project between Georgia Tech and JPMorgan Chase, created by Alex Yang, Chenyang Zhang, Elliott H. Faa, Weijian Liu, Lily Chisholm, Benjamin Lee, David Saffo, Feiyu Lu, Blair MacIntyre, and Yalong Yang.
π CrossAtlas builds on WebXR, Babylon.js, and Anu.js (GitHub), an open-source immersive analytics toolkit by JPMorgan Chase. Real-time synchronization is powered by Yjs.
π Citation details coming soon
CrossAtlas is available under the MIT License. It uses WebXR (W3C Software and Document License), Babylon.js (Apache 2.0), Anu.js (Apache 2.0), and Yjs (MIT).

