Demo

FPV Drone Simulator

Capabilitygames
FPV Drone Simulator

An FPV drone racing simulator through a procedurally generated cement factory, live in the browser. TypeScript and Three.js, zero loaded assets, 732 KB gzipped, and flight physics solved at 1,000 steps per second.

This is CEMENTIFICIO, an FPV drone racing simulator that flies through a disused cement factory, built in TypeScript (strict) on Three.js r170 with Vite 6, rendered through WebGL2 with the pmndrs postprocessing pipeline and collision checked via three-mesh-bvh. Four runtime dependencies, no game engine, no CMS, shipped as a static bundle behind nginx on Cloud Run.

Nothing is loaded. Every texture, from concrete to rust to weathered wood, is painted at runtime by our own noise library (Perlin, fBm, Ridged, Worley), seeded deterministically with mulberry32. Every building, from the preheater tower to the conveyor gallery, is built from geometry code. Every sound, four engines, airflow, surface reflections, is synthesized, and even the OSD font is a procedurally generated bitmap rendered on the same 30x16 character grid real FPV hardware uses. The whole bundle is 2.2 MB of JavaScript, 732 KB gzipped, for a full 3D world.

The flight simulation runs on a fixed 1,000 Hz step, independent of rendering framerate. Each rotor is solved with blade-element and momentum theory coupled through a fixed-point solver for induced flow, every single step. On top of that: blade flapping with hub moment, Glauert relief at speed, a band-limited vortex ring state model, ground effect through a mirror-source model, Dryden gust turbulence, a BLDC motor model with regenerative braking, and a LiPo battery model with load sag and recovery.

Rendering runs on PCSS cascaded shadows with contact hardening, GTAO, PMREM image-based lighting and AgX tonemapping instead of the usual ACES. FPV optics are their own dedicated effect: lateral chromatic aberration, barrel distortion, sensor noise and motion blur, tuned against measured reference footage rather than eyeballed. An adaptive quality ladder reacts to framerate in flight, spread across 33 custom GLSL shaders.

The flight controller is a behavioural model of a modern open source flight controller in the Betaflight 4.5 generation, independently implemented in TypeScript. Same PID loop structure, same filter chain, same rate curves, no firmware source code involved. It runs against a behavioural model of an ICM-42688-P class gyro with RPM-driven vibration, so it receives the same noisy signal a real flight controller would. A blackbox scope samples at 1 kHz, and configuration files in the diff all format import directly.

Betaflight is a project of the Betaflight open source community. ICM-42688-P is a product of TDK InvenSense. RAVE SPACE is not affiliated with, endorsed by or sponsored by either. The simulator contains no firmware source code and no vendor source code, only independently written behavioural models. All trademarks belong to their respective owners.