Scrapped

Foley VR Experience

Gameplay, Audio & Technical Programmer 2026

A VR game built for Beeldcoalitie & VRRoom that teaches visitors about Foley sound design, developed with a team of four for museum and festival exhibitions.

Unity C# FMOD Audacity Meta Quest (VR)

Foley is a niche, declining craft. not from lack of interest, but from lack of access. Professional studios are expensive, formal education is scarce, and the discipline gets little public exposure compared to other parts of filmmaking. Our answer was an accessible VR "Foley room," where visitors create and sync their own sound effects to video, with no controller or prior training required.

Design question: How might we introduce people to the creative possibilities of Foley sound design through an engaging, playful VR experience?

My role shifted over the course of the project, I started as product owner, then moved into full-time FMOD and audio programming, technical problem-solving, client communication, and playtesting.


Key Features


Technical Work

Unity's native audio system couldn't support the recording mechanic the game needed, so I learned FMOD from scratch, creating and integrating events, working with event instances, and controlling sound dynamically through parameters instead of swapping between pre-recorded clips.

Foley VR Experience

Physics-Driven Dynamic Audio

I drove FMOD parameters directly from Unity's collision and velocity data. For example, a ScrapingIntensity parameter controlling volume, pitch, and playback rate, so louder impacts and faster scraping produced audibly different sound in real time.


Player-Recorded Sound Pipeline

The most technically involved system: recording live audio in VR and turning it into a usable in-game object. I first tried Unity's OnAudioFilterRead(), but it could only capture from one audio source at a time. I switched to FMOD's CaptureDSP, capturing raw samples from a specific audio bus, converting them into a 16-bit WAV file, and spawning a new interactable object that could immediately use the freshly recorded audio.

Each recorded cube also handles its own playback lifecycle: grabbing it re-triggers its sound and unlocks it from the timeline, while dropping it back into the zone locks it in place via rigidbody constraints so it can't drift once positioned. On destroy, the sound and channel are explicitly released and the temporary WAV file is deleted, which mattered on Quest given its limited storage and memory.

Foley VR Experience

Timeline Syncing System

I also built an interactive timeline where players place recorded sound objects, triggered as a video's playhead crosses their position.

Fixed a reliability bug on lower frame rates by checking both current and previous playback position, rather than only current, so fast-moving Quest playback couldn't skip a trigger.

csharp
bool crossed =
    previousProgress < timelinePosition &&
    currentProgress >= timelinePosition;

if (crossed)
{
    TriggerAudio();
    hasTriggered = true;
}

Notable Debugging


Testing & Iteration

Across five rounds of testing, from an early prototype through a final QA pass, feedback converged consistently:

Foley VR Experience

A final structured QA pass surfaced two real bugs, the orange visual glitch and accidental object grabbing, both fixed before the final demo.


Key Design Decisions

Early builds used stock sounds, but they felt generic. A conversation with professional Foley artist Wart Wamsteker, his advice was simple: if you want the right sound, record it yourself. This led us to run our own field recording sessions and build the game around real, self-recorded audio.

Foley VR Experience

Reflection

This project pushed me deep into audio programming and technical problem-solving in VR, and confirmed that's the direction I want to take. It also strengthened my client communication and playtesting skills, running structured tests, gathering feedback from real audiences, and iterating based on what people actually did rather than what we assumed they would.