Ellen Lo Last updated: April 21st 2026
Headset view (interactive)
Third person’s perspective (non-interactive)
Third person’s perspective (non-interactive)
Crash Course is the first-of-its-kind mixed reality obstacle course race that combines physical inflatables with digital gameplay. The experience uses 3D space scanning to map the venue, then places modular course sections to design a custom race track — starting with simple straight lines that familiarize players with driving a physical kart while wearing headset, then building up to steeper curves that add challenge and spice up the experience. This makes every event adaptable to different spaces while keeping course design flexible and scalable.
The core gameplay loop is all about chaos: players are encouraged to crash into objects to rack up points, sending inflatables flying with satisfying, physics-driven reactions. The result is explosive, physical fun that rewards bold play rather than cautious navigation. Combined with the modular track design, Crash Course delivers an experience that's immediately accessible, endlessly replayable, and unlike anything else in the MR space. Crash Course was installed and debuted at the Dream Park inaugural location at the West Canal Yards in Seattle in June 2025.
To achieve the bouncy, inflatable-like physics, I added bones and a simple rig down the spine of 3D pylon models and used Unity's configurable joint system to simulate that satisfying wobble on impact.
The feature ended up becoming a staple across all Dream Park titles — every tall 3D object became bouncy, even when it didn't make sense in real life. Players found it so fun to interact with the inflatable environment that we started adding it to everything: cacti, flagpoles, dummy targets, you name it. Silly, goofball, physics-driven micro-interactions go a long way toward making virtual experiences feel tangible, and nothing beats the instant haptic feedback of smacking something and watching it react.
As we rolled this out to more and more objects, I wrote a script that programmatically configures the joint settings by traversing the rig hierarchy and applying the appropriate spring and damper multipliers based on depth — making it trivial to turn any rigged model into a bouncy interactive prop.


.gif)
.gif)