Life in a Modern Prison Cell

A VR experience built for Meta Quest 3 — developed for a real client, under real constraints.

Unreal Engine 5 C++ Meta Quest 3 VR Confidential — Client NDA
No screenshots — project is under NDA with SMBG (Stichting Morele Bijstand aan Gevangenen)

The Project

The brief was straightforward and completely not: build a 1:1 scale, high-fidelity recreation of a modern Belgian prison cell in VR, designed to give people outside the system a real sense of what that space feels like. Run it standalone on a Meta Quest 3. Hit 90fps. Don't compromise the fidelity.

Five of us built it — two artists, two developers, and a sound designer. The other dev owned the hand mechanics and animation integration. I owned everything those hands could actually interact with.

What I built

The goal was simple in concept: everything in the cell that looks like you can touch it, you can. Getting that to feel right on a standalone headset — no PC, no margins — was the actual challenge.

The Interactables

Every object the player can grab and use has its own logic. A CD player that physically accepts a disc, switches parent transforms on insertion, and plays spatialized audio tied to the disc that's in it. A TV with distinct power states. Lights you can toggle. Cigarettes you can pick up, bring to your mouth, and smoke — with a particle and audio state that responds to the interaction.

The handoff with the other dev was clean by design — they gave me working hands, I gave back objects those hands could do something meaningful with. No overlap, no dependency hell.

The Objective System

A centralized task manager tracks which interactions the player has completed — chores, routines, the mundane rhythm of a day inside. A 5-minute countdown runs the loop. When it ends, the experience resets. The whole thing is designed to be repeatable without feeling mechanical.

The Migration

The project was mid-development in UE4 when we inherited it. Before anything new could be built, the foundation had to be moved to UE5 — legacy Blueprints ported, C++ APIs updated, the old physics system replaced with Chaos Physics, and input remapped to the Enhanced Input System for proper Quest 3 controller support.

Doing an engine migration while the rest of the team is trying to keep building is a particular kind of stressful. You're fixing the floor while people are standing on it. It taught me how to scope technical debt clearly, communicate what's broken versus what's just different, and keep moving without breaking everyone else's work.

What I took away

VR interactables sound simple until you're debugging why a cigarette clips through someone's virtual hand on a mobile chipset at 90fps. The fidelity bar on this project was high — it's supposed to feel real — which meant every grab, every state transition, every audio cue had to hold up under scrutiny.

Working under a real client NDA with actual stakeholders was new. There's a different kind of accountability when the brief isn't a grade — it's a person who needs this to work for a reason that matters.

Developed at Howest DAE • Client project for SMBG • Team of 5 • UE5 / Meta Quest 3
Toolset
Unreal Engine 5.3 C++ Blueprints Chaos Physics Meta Quest 3 Enhanced Input System