Leading Zero

Frustrain Trainman — a WebXR adventure for Viverse

Film XR

A black-and-white graphic cover: a clown face with a star on its forehead and an open mouth in the centre, the word “FRUSTRAIN” arched above it, framed portraits, playing cards and long-fingered hands around it, and the line “FIRST PERSON ANTI-UTOPIAN ADVENTURE WITH ELEMENTS OF HORROR AND PUZZLES IN SURREALISTIC EAST EUROPEAN SETTING” at the bottom

A story-driven VR game — a dystopia with horror and puzzles aboard a surreal Eastern European train — had to run right in the Quest headset’s browser on HTC Viverse, with no store and no install.

  • An event-driven story engine: the script in JSON (108 events), quests as data, a world reset before every quest.
  • 5 quests, 17 journal tasks, 38 items, 8 save points.
  • Inventory, journal, item inspection, a glowing hint when the player is idle.
  • A web-based quest editor for the writers.
  • A patched WebXR plugin: stereo on vertically split framebuffers, and the black screen on entering VR.
  • Optimisation for the Quest browser: raycast throttling, instancing, static batching, stencil-based clipping, compressed textures.
  • The built-in occlusion culling (~14% of CPU time) replaced with our own system of door-driven “airlock” zones.

Published on Viverse.

Unity 6 WebGL, WebXR, XR Interaction Toolkit, Viverse SDK

A monochrome low-poly interior of an open-plan sleeper carriage: the aisle runs into the distance between berths, with a white angular figure lying on one of themA monochrome low-poly winter forest: broken black trunks and branches over white faceted snow