Our final deliverable for the first project was a fully immersive table-top visualization experience built in Unity and deployed to Meta Quest 3. The workflow included:
- Data ingestion & parsing: We built a C# parser to read multi‑ticker, multi‑day stock CSV files, validating them and storing time‑series values for each ticker.
- 3D bar generation: The application spawns bars anchored to a real table plane in passthrough. Each bar's height and color correspond to closing price and percentage change relative to baseline.
- User interaction: Users point with a controller ray to hover over bars, which highlights the target. Selecting a bar spawns a world‑space info panel showing ticker, date, close value and % change.
- Time scrubbing: A timeline slider/dial lets the user scrub through dates. Bars animate smoothly with lerp interpolation as the day index updates, enabling comparison across time.
- Usability testing & iteration: We ran an in‑class user study with tasks like "read the chart," "find the crash bottom" and "compare two tickers". Based on feedback, we improved legend clarity, selection feedback, timeline discoverability and accessibility in passthrough.
- Final packaging: The beta and final builds were delivered as APKs with supporting documentation. We contributed a write‑up to the wiki describing dataset structuring, Unity implementation details and lessons learned for future AR/VR data visualization projects.
While developing the table-top data visualization prototype, we encountered several challenges that prevented us from completing the planned UX patterns section. We highlight these issues here to help others anticipating similar work:
- *ArcGIS & Geospatial Data*: Converting raw ArcGIS shapefiles into Unity coordinates proved tricky. The MBTA and GTFS datasets use different coordinate systems (e.g., WGS84 lat/long vs. state plane). Misaligned axes caused the network to appear offset or scaled incorrectly. Always verify coordinate frames and apply consistent scaling when importing shapefiles. Large datasets also strained the parser; splitting layers and simplifying geometry helps.
- *Passthrough & Quest MR*: Unity’s passthrough API (on Quest 3) is still maturing. We saw jittering, occlusion artifacts, and inconsistent lighting when overlaying virtual bars on the real table. Some issues stemmed from dynamic camera re‑projection and low‑light conditions. Simple plane detection and manual anchor placement improved stability, but heavy textures or high polygon counts can degrade performance.
- *Debugging Approach*: Use extensive logging and on‑screen debug UIs to trace values. Build modular scripts for data parsing, coordinate transformation, and interaction so that each component can be tested independently. Start with small synthetic datasets before ingesting full transit networks.
Due to these hurdles, our final implementation focused on the core data ingestion and visualization pipeline rather than polished UX patterns. Nonetheless, these lessons should assist future teams exploring AR data visualization with real‑world geospatial data.
Contributed by Korey