Lavis
Un monde à l'encre, des portails qui changent ta taille
Un jeu de réflexion 3D à la première personne, dans le navigateur, rendu comme un lavis à l'encre : aplats, contours tremblés, trames de manga et grain de papier. Deux portes reliées n'ont pas la même taille : passer par le grand torii vermillon fait ressortir quatre fois plus petit par la petite porte indigo, et inversement. Le monde a perdu ses couleurs, et on part chercher des pinceaux endormis qui repeignent le village sous nos yeux. En deux mois et 223 commits, le prototype est devenu une aventure en plusieurs chapitres, avec un hall multijoueur, un rêve généré et 831 vérifications automatiques.
Ce qui brille
- Portails à changement d'échelle avec rendu récursif sur deux niveaux, une caméra virtuelle par niveau, et une traversée déclenchée sur l'œil pour que l'image d'avant et celle d'après se raccordent au pixel près
- Rendu « encre et papier » entièrement fait main : contours tremblés, trames de manga, grain dessiné figé à 10 Hz (« à 60 Hz l'œil lit bruit, à 10 Hz il lit tracé »)
- Le monde commence en gris (le lavis) et chaque pinceau de couleur rapporté repeint une région du village en direct
- Son entièrement synthétisé et transposé par l'échelle : quatre fois plus grand, on entend le monde deux octaves plus bas
- Moteur de simulation pur (src/core sans Three.js) qui tourne dans Node : 831 vérifications et des « pilotes » qui jouent chaque chapitre de bout en bout ; le site n'est publié que si tout passe
Mode d'emploi
Cliquer dans la page pour capturer la souris, puis ZQSD/WASD, Espace pour sauter, souris pour regarder ; sur téléphone, boutons tactiles Prendre / Lancer / Tourner / Sauter
Fabriqué avec
- 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)