Chargement...
Chargement...
PoissonLe web peut-il atteindre les performances d'un moteur de jeu natif ?
Tout le monde dit que le web est 'lent'. Poisson est une réponse à ça : 100 000 agents autonomes simulés en parallèle, à 60 FPS constants, dans un onglet de navigateur. Pour y arriver, j'ai écrit un moteur qui déporte 100 % du calcul sur la carte graphique (WebGPU). Le pipeline tourne en 8 passes GPU envoyées en un seul batch, avec zéro allocation mémoire pendant la simulation (le ramasse-miettes ne se déclenche jamais). Si le matériel ne suit pas, on dégrade automatiquement : WebGPU → WebGL → Canvas2D. Publié en package npm — n'importe qui peut l'utiliser pour ses propres simulations (boids, écosystèmes, multi-agents, RTS).
On m'a dit que 'le web ne peut pas faire de la vraie simulation'. Je voulais prouver le contraire. Résultat : 60× plus rapide que la version CPU, sur le même hardware.
Pipeline GPU en 8 passes séquentielles dans un seul batch. Recherche de voisins par partitionnement spatial CSR avec algorithme parallèle à 3 niveaux (Blelloch prefix-sum). 4 couches découplées (Engine → Shared → Game → Client) avec zéro dépendance circulaire enforced via ESLint. 355 modules JavaScript, 859 tests unitaires verts. Publié en package npm `@poisson/engine`.
entités à 60 FPS dans un navigateur
plus rapide que l'implémentation CPU
tests unitaires automatisés (0 failure)
allocation mémoire pendant la boucle (zero-GC)
publié comme package réutilisable
Implémenter un algorithme académique de partitionnement spatial en compute shader m'a appris que les algorithmes optimaux sur CPU sont les pires sur GPU. Cette expertise WebGPU est un avantage unique — très peu de développeurs web maîtrisent les compute shaders.
Six mois après le premier commit, Poisson est passé du POC qui crashe à un moteur de simulation auditable : 859 tests verts, zéro vulnérabilité XSS, lint qui enforce l'architecture, et deux plongées techniques publiées. Tour d'horizon — avec tous les liens pour creuser.
Comment j'ai simulé 100 000 entités autonomes à 60 FPS dans un navigateur grâce aux compute shaders WebGPU, au spatial hashing GPU, et à une architecture Structure-of-Arrays zero-GC.
Comment j'ai porté un algorithme de partitionnement spatial en compute shader WebGPU — et pourquoi tout ce qui est optimal sur CPU est catastrophique sur GPU.
Afficher 100 000 entités à 60 FPS dans un navigateur n'est pas qu'une question de WebGPU. C'est aussi de savoir que 99 d'entre elles n'ont pas besoin d'être rendues comme la centième. Le système LOD qui fait que Poisson tourne sur un MacBook M1 sans souffler.