Lavis
An ink-washed world, with portals that change your size
A first-person 3D puzzle game in the browser, rendered like an ink wash painting: flat tones, shaky outlines, manga screentones and paper grain. Two linked doors are not the same size: going through the big vermilion torii brings you out four times smaller through the small indigo door, and the reverse. The world has lost its colors, and you set out to find sleeping brushes that repaint the village before your eyes. In two months and 223 commits, the prototype grew into a multi-chapter adventure with a multiplayer hall, a generated dream and 831 automated checks.
What shines
- Scale-changing portals with two levels of recursive rendering, one virtual camera per level, and a crossing triggered at eye position so the images before and after line up to the pixel
- Entirely hand-made "ink and paper" rendering: shaky outlines, manga screentones, drawn grain frozen at 10 Hz ("at 60 Hz the eye reads noise, at 10 Hz it reads a stroke")
- The world starts out gray (the wash), and each color brush you bring back repaints a region of the village live
- Fully synthesized sound, transposed by scale: when you are four times bigger, you hear the world two octaves lower
- Pure simulation engine (src/core, without Three.js) that runs in Node: 831 checks and "pilots" that play every chapter from start to finish; the site is only published if everything passes
How to use it
Click in the page to capture the mouse, then ZQSD/WASD to move, Space to jump, the mouse to look around; on a phone, Take / Throw / Turn / Jump touch buttons
Made with
- TypeScript
- Three.js 0.169
- ShaderMaterial GLSL sur mesure (encre, contours, papier, pigments)
- WebGLRenderTarget (rendu récursif des portails)
- Vite 5
- Firebase Realtime Database (présence et multijoueur)
- Web Audio API (ambiance 100 % synthétisée)
- Pointer Lock API + commandes tactiles
- esbuild + Node (harnais de vérification npm run check)
- GitHub Actions → GitHub Pages (check + build à chaque push)