Xhaler

A VR game exploring breathing as a core mechanic.

Xhaler is a VR adventure game that explores breathing as a core mechanic to enhance immersion and interactivity in virtual reality. Using alternative input devices, including a wind sensor and a respiration belt, the game creates novel gameplay experiences driven by the player's own breath. The project was developed by a team of five graduate students at Carnegie Mellon University's Entertainment Technology Center (ETC).

Team
  • 2 Programmers
  • 1 Sound/ Narrative Designer
  • 2 Artists
  • 2 Producers
My Role
  • Producer
  • Technical Designer
  • Programmer
Timeline

Jan 2025 - May 2025 (14 weeks)

Stack
  • Unity · Meta Quest 3 · Python · Arduino · DTW

Trailer

Design Problem

Can breathing be a game input?

Have you ever imagined controlling a breath of fire with your own breathing?

Take a deep breath now — picture a brilliant light shining before your eyes, then exhale, and flames pour from your mouth, burning everything in sight.

This simple question sparked the project: when breath becomes the input of a game, what kind of gameplay can emerge from it — and what kind of experience might that create?

Design Decision 1

The medium

Question: Which platform would best allow us to explore breathing as a game input?

To answer this question, we explored 2D PC games, and we found ourselves drawn toward a more immersive experience.

We ultimately chose VR (Meta Quest 3) as our medium — a platform where the connection between breath and gameplay could feel truly embodied.

Tech Exploration

Capture the breathe

Devices
Vernier Go Direct Respiration Belt

Reliable Solution → Focus on development

respiration belt
Custom Wind Sensor Kit

Customized Solution → Detect Blowing

windsensor kit
Data Flow

Sensor data is collected through two parallel pipelines: the respiration belt streams data via its SDK, while the wind sensor transmits through an Arduino over Wi-Fi.

Both streams are received and processed by a Python script on PC, then forwarded to the Unity application (C#) running on Meta Quest 3 via UDP socket.

Since breath data is continuous, occasional packet loss is acceptable — making UDP a practical choice over TCP for this use case.

Tech Exploration

Design the breathing system

Strategy: pattern matching

Dynamic Time Warping (DTW)

Identifies breathing trends despite timing variations.

The core challenge is recognizing the trend of a breathing pattern within a given window, rather than matching exact timestamps.

Since the timing of data capture rarely aligns perfectly with the actual breathing cycle, DTW (Dynamic Time Warping) was chosen for its ability to handle these temporal misalignments while still identifying the underlying pattern.

Inhale
Exhale
Hold
Gentle
Intermittent
Expansive