Chargement...
Chargement...
Comment porter une simulation web (Poisson) dans un moteur de jeu AAA, avec 3 couches de simulation qui tournent en parallèle (colonies CPU, monde GPU, biofeedback) sans casser les budgets de frame ?
Poisson a prouvé qu'on pouvait pousser 100k entités dans un navigateur. Symbiont est la question d'après : qu'est-ce que ça donne quand on prend les mêmes principes (zero-GC, partitionnement spatial, multi-couches), et qu'on les implémente dans un moteur AAA (Unity 6 LTS) avec ECS, Burst-compilation et le Job System ? Trois couches autonomes tournent en parallèle : la Colony Layer (CPU, décisions long-terme), la World Layer (GPU compute, simulation physique de l'écosystème), et le Biofeedback Layer (boucle métabolique entre les deux). Chaque couche a son propre budget de tick (60Hz, 20Hz, 5Hz) et ses propres invariants. Le projet est organisé en Assembly Definitions strictes (DDD-like : Domain ne dépend de rien, Application orchestre, Infrastructure isole Unity). 19 waves de fonctionnalités, chacune gated par une suite de tests verts avant merge. Pas encore de démo playable — c'est de la R&D interne — mais c'est le terrain où je valide mes idées de simulation à l'échelle AAA, avant qu'elles redescendent en web ou en SaaS.
Poisson m'a appris la simulation côté web. Je voulais voir comment les mêmes principes tiennent dans un moteur AAA, sous contraintes de tick budget et de garbage collection inacceptable. Symbiont est cet exercice — et le terrain où j'extrais les patterns qui redescendent sur les autres projets.
Pattern layered DDD adapté Unity : Symbiont.Domain (pur C#, zero Unity dependency, compile en console), Application (use cases + ports), Infrastructure (Unity APIs, ECS, GPU compute). 3 couches de simulation parallèles avec leur propre tick rate. Communication inter-couches via events Burst-friendly. Wave-gating CI : chaque PR doit passer la suite EditMode + PlayMode de la wave courante.
lignes de C# (5 594 fichiers source)
tests Unity verts (EditMode + PlayMode)
couches de simulation parallèles avec budgets de tick séparés
allocation managée par tick (zero-GC en simulation)
Faire descendre du DDD dans Unity est contre-culture mais ça paye : on peut tester Symbiont.Domain dans une console .NET classique, sans ouvrir l'éditeur Unity. Les invariants critiques (énergie ≥ 0, espèce gardée, mémoire bornée) vivent sur les agrégats et sont impossibles à bypass — même par un game designer qui touche au prefab. Le wave-gating CI était inhabituel sur un projet jeu mais a éliminé 90 % des régressions silencieuses.