Miaw VR
A room-scale VR systems showcase for Quest 3 standalone. You stand at a bench in an automated QA facility - never locomoting - while a deadpan narrator briefs a task, you perform it with a physical instrument, and the facility scores the result against a spec. Pass, a stamp fires and the next door unlocks. The whole thing is built on Unity's OpenXR + XRI stack in C#, and the systems are the deliverable, not the game.
Video only No in-browser build - Quest 3 standalone. The clip below is the placeholder capture.
-
01
Architecture Station-Verifier Spine
Built verification as a structural concern rather than an afterthought: an instrument only produces a record of what happened (
IInstrument<TSample>), and aStation<TSample>owns a ScriptableObjectVerifier<TSample>that consumes the record and returns a result. The invariant - "unscoreable doesn't ship" - is enforced at the station level: a station with no verifier refuses to arm and its door stays locked.Station.cs -
02
Canvas Painting & Trace Scoring
The flagship station: a physical pen whose tip is a depth query against the canvas plane - not a physics contact - painting into a RenderTexture with depth read as pressure. Scoring never touches the CPU per frame; the ink is compared against a target mask in a single
AsyncGPUReadbackfired the moment the stamp comes down.PaintCanvas.cs,TraceScorer.cs -
03
Range Pistol & Grouping Verifier
A second station proving the spine generalises: a pistol with a physical rack and a magazine that seats through an
XRSocketInteractor(kinematic while socketed so velocity tracking never buzzes against the static rack). Shots register as a statistical sample and a grouping verifier scores the spread - a different scoring shape behind the same station contract.Firearm.cs,GroupVerifier.cs -
04
Grab Velocity-Tracked Hands
No colliding physics hands - on a mobile GPU they jitter and fight the solver. Instead the hand carries no physics and the grabbed object does: Velocity Tracking movement, per-object hand-placed attach transforms, throw smoothing, and sockets for anything that would otherwise buzz against static geometry. Weight and physicality live in the object, not in a clever hand solver.
-
05
Narrator Off-Script Personality Bus
The narrator is the entire personality budget, driven through a ScriptableObject
NarratorChannelevent bus - no god-singleton. It supports barge-in and, more importantly, reacts to misuse: throw the pen, aim at the speaker, press the button labelled DO NOT PRESS, and it has something to say. The off-script reactions matter more than the scripted lines.NarratorChannel.cs,ForbiddenButton.cs -
06
Performance 90 fps on Standalone
The budget is 90 fps on a full scene, on-device. Quest defaults to 72, so the display refresh rate is requested up to 90 at runtime through the Meta display utilities, and the heavy work - the canvas scoring - is deferred to an async GPU readback on the stamp rather than a per-frame pixel read.
DisplayRefreshRateController.cs