An immersive VR experience exploring ocean data from NASA, built with Three.js and WebXR.
"Beneath the surface, the ocean breathes. A rhythm older than humanity, now racing toward an uncertain future."
- Procedural underwater ambience (low-frequency rumble + filtered noise)
- 3D positional audio tied to hotspot locations
- Event-based sounds: Whale calls, ocean currents, storm surges, coral stress
- Dynamic mixing: Ambient fade during narration
- 5 critical locations: Great Barrier Reef, Maldives, Gulf Stream, Pacific whale routes, Caribbean reefs
- Click to explore: Scientific data, time-series charts, bleaching trends
- Color-coded urgency: Red (critical) → Green (low)
- Pulsing animations: Visual feedback for interaction
- 8 chapters across 3 themes:
- "The Vanishing Coastline"
- "Currents of Change"
- "Voices from the Deep"
- Auto-progression: Timed chapters with audio cues
- Poetic overlays: Emotional engagement with data
- Call to action: Empowering users to make a difference
- Glassmorphism design: Backdrop blur, semi-transparent panels
- Animated charts: Color-coded bar graphs with hover tooltips
- Smooth transitions: Fade-in, slide-in effects
- VR-ready: Full WebXR compatibility for Quest, PCVR, browser VR
npm installnpm run devOpen http://localhost:3000 in your browser.
For VR testing:
- Quest: Use Oculus Browser or Firefox Reality
- PCVR: Chrome/Edge with SteamVR or Oculus Link
- Desktop: Click "Enter VR" (requires WebXR-compatible browser)
npm run buildOutput will be in dist/ directory.
- Sea Surface Temperature: NASA NEO MODIS/VIIRS monthly averages (placeholder procedural textures)
- Coral Bleaching: NOAA Coral Reef Watch DHW (Degree Heating Weeks)
- Sea Level Anomalies: NASA PO.DAAC altimetry (Jason-3, Sentinel-6)
- Chlorophyll Concentration: NASA NEO MODIS Aqua
- Salinity: NASA SMAP/SMOS
pulse-of-the-ocean-webxr/
├── src/
│ ├── main.ts # Entry point, scene setup
│ ├── globe.ts # Globe mesh, SST overlay, atmosphere
│ ├── ui.ts # Time slider, controls
│ └── audio.ts # Spatial audio manager
├── assets/ # Textures, audio, data (to be added)
├── index.html # UI overlay, VR button
├── package.json
├── tsconfig.json
├── vite.config.ts
└── README.md
- Hover over glowing hotspots to highlight them
- Click hotspots to view detailed data panels
- Drag the time slider to see temperature changes over 12 months
- Listen for spatial audio cues (whale calls, currents, storms)
- Click "▶ Start Story" to begin the guided experience
- Watch chapters auto-advance with poetic overlays
- Experience audio events synchronized to the narrative
- Learn about ocean change through data-driven storytelling
- Click "Enter VR" (requires WebXR-compatible browser)
- Look around for 360° immersion
- Point and click hotspots with VR controllers
- Hear spatial audio positioned in 3D space
- Download NASA NEO SST monthly PNGs for 2024
- Replace procedural textures in
globe.ts - Add NOAA Coral Reef Watch DHW data for bleaching
- Integrate PO.DAAC sea level anomalies (Jason-3, Sentinel-6)
- Record voice narration for chapters (ElevenLabs, voice actor)
- Source real whale calls from NOAA Sound Library
- Add underwater ambience from freesound.org or Epidemic Sound
- Mix spatial audio for VR headphones
- Model coral reef structures with bpy scripting
- Animate bleaching effects (color shift over time)
- Create coastline erosion animations
- Export as GLTF and load with
GLTFLoader
- Texture streaming for large datasets
- LOD (Level of Detail) for globe geometry
- Occlusion culling for hotspots
- Target 72 Hz for Quest 2, 90 Hz for Quest 3
- Subtitles for narrative chapters
- Screen reader support for UI panels
- Keyboard navigation for non-VR users
- Multi-language support (i18n)
MIT
Built for NASA Space Apps Challenge 2025 🚀