Cosmos. 7 ans

Bonjour, Habr!

En 2012, j'ai écrit un article sur mon hobby - Cosmos: modélisation de l'évolution des organismes multicellulaires


Près de 7 ans se sont écoulés depuis lors, durant lesquels j'ai travaillé sur le développement de ce projet. Aujourd'hui, je veux vous parler un peu de ce que j'ai appris à faire et de la façon dont je prévois de développer le projet.

Motivation "Big Evolution"


Cosmos 2012 est un excellent exemple du sentiment de «l'effet d'immersion» du visionnement, qui a été le point de départ dans le développement de l'idée de faire une «simulation de vie sur le GPU».

Cependant, il n'y a pas eu de véritable évolution: le processus devrait se développer en continu et ne pas atteindre un état final quelques minutes après le lancement.

Il s'est avéré que le plus difficile était de réaliser l'évolution la plus longue possible d'espèces qui «ne convergent pas à la limite du développement», donnant lieu à une réelle variété de formes. Ensuite, il sera possible d'explorer ces formes, puis il y aura un réel intérêt à exécuter la simulation pendant des jours, des semaines, des mois - en attendant l'apparition de formes d'étude de plus en plus complexes et développées.

La physique


Vous pouvez penser à n'importe quelle physique: avec l'aide du GPU, vous pouvez construire une très large gamme de modèles avec le nombre d'éléments suffisants pour les processus évolutifs en temps réel. Toute combinaison des principes d'interaction de certains "éléments", "atomes", "cellules" - donne naissance à un constructeur de formes en évolution dans lequel une simulation organisée complexe peut littéralement s'auto-assembler à partir de rien.

Au début, je voulais créer une matière multicellulaire qui permettrait au cosmos de se toucher directement, «sans voler à travers», ayant une structure de boules reliées les unes aux autres en mosaïque, à la manière des tissus cellulaires des organismes réels.

Il était nécessaire que les organismes ressemblent davantage aux vrais, et la signification physique est apparue dans la structure différente de leur corps. Vous pouvez «dessiner» un corps avec de la peau, des membres, des muscles, des jambes, des organes internes avec de telles cellules, et de tels corps existeront et se développeront littéralement à l'intérieur de la simulation.

Un exemple du SDK CUDA a été la réalisation de collisions de particules rondes basées sur un réseau spatial, permettant aux particules d'interagir uniquement avec les plus proches.

J'ai compris comment fonctionne l'exemple 3D - et écrit ma simulation pour 2D.
Sur la GTX 580 de l'époque, cela permettait de calculer 256 000 particules en temps réel.


CUDA + JavaScript


Un autre problème était qu'il me convenait de proposer un concept cosmique en JavaScript, alors que les simulations à grande échelle ne devenaient possibles que sur le GPU.

Environ 100 fois plus pratique et plus rapide sur JS.
Et environ 1000 fois plus rapide sur un GPU.

La solution était d'écrire la physique des interactions des particules sur CUDA, et de donner la possibilité de créer des particules et de contrôler leurs paramètres à partir de JavaScript, en intégrant le moteur Google V8 qui apparaissait alors dans la simulation en tant que langage de script.

J'ai ajouté la possibilité de connecter les particules avec les mêmes «élastiques» que celles connectées dans les premiers espaces. En conséquence, on pourrait écrire le code dans le script de contrôle JS:

var ball1 = new Ball(); var ball2 = new Ball(); ball1.xy = [0,0]; ball1.rgb = [1,1,1]; ball2.xy = [1,0]; ball2.rgb = [1,1,1]; var link = new Link(ball1, ball2); 

et deux boules blanches sont apparues sur l'écran, reliées l'une à l'autre par une «bande élastique».

Déjà à ce niveau de développement du moteur, des opportunités intéressantes sont apparues pour des expériences avec la physique virtuelle:


Immeuble


En ajoutant plusieurs propriétés aux boules, telles que la force de liaison, la masse, la taille, l'élasticité - j'ai obtenu un constructeur contrôlé par JavaScript dans lequel je pouvais dessiner les structures de milliers de créatures constituées de cellules de propriétés physiques différentes - et tout cela a été calculé par le GPU en temps réel.

Comme équilibre entre le prix et la qualité, une forme douce et profilée d'une pieuvre a été choisie.

Chaque élément du corps (centre, membres) est réalisé à l'aide du nombre minimum de billes nécessaire, tandis que le volume et la masse sont naturellement répartis - où les membres s'épaississent vers le centre - la matière devient plus durable et massive:


La motilité


L'étape suivante consistait à créer la motilité des corps cosmiques. Les muscles étaient faciles à fabriquer - il suffisait de resserrer les liens entre les boules le long des pattes, ce qui provoquait l'effet de la contraction musculaire.

Les neurones agissants se connectent à ces muscles et s'il y a un signal, le muscle se contracte. Deux muscles par membre - une pieuvre bidimensionnelle entièrement contrôlable.

À l'aide d'un petit réseau de neurones récurrents à mutation aléatoire (de l'ordre de 10 à 100 neurones) et d'une simple sélection des meilleurs individus selon le critère, par exemple, «qui pourrait bouger plus loin», vous pouvez appeler la cinématique de mouvement nécessaire pour chaque forme de corps:


Genesis


Les «hexoïdes» sont une autre forme de corps activement explorée. Les corps de ces créatures sont composés de cellules qui forment des formes arbitraires à partir de boules de même taille sur la base d'un réseau non strict proche de l'hexagonal.

Cette forme est bien adaptée pour étudier l'évolution simultanée de la forme et de la motilité du corps «en conjonction», tout en maximisant le potentiel d'expériences avec des cellules de différents types, différant en force et en fonction. Par exemple, les corps cosmiques peuvent être constitués de combinaisons de cellules solides qui forment le cadre de la créature et les muscles qui mettent la structure en mouvement.

À l'avenir, lorsqu'ils seront immergés dans un habitat complexe, sur la base de ces principes, différentes formes de créatures pourront être développées - dont certaines seront plus «blindées», d'autres sont conçues pour se déplacer rapidement, d'autres pour une attaque efficace, etc.


Chasse et élevage


Si le cosmos apprend à se chasser, la quantité de matière dans la simulation peut rester constante, tandis que des générations de créatures se succéderont.

Des chaînes alimentaires stables peuvent alors se former et un grand processus de co-évolution de différentes espèces de créatures commence.

Pour la première expérience, j'ai utilisé 4 types de cellules:

  • cellule digestive (colorée) - en touchant un autre corps cosmique, mord un morceau
  • armure (légère) - une cage mécanique plus solide qui ne peut pas être mordue
  • tissu conjonctif (gris) - tissu élastique doux
  • cellule motrice (sombre) - permet à l'espace de se déplacer plus rapidement

Dès que le cosmos mange un nombre suffisant de cellules, il "se divise", formant à proximité sa copie légèrement mutée.

Un tel processus génère déjà des formes avec une structure et un comportement différenciés:



Habitat


Un espace froid vide n'est pas le meilleur endroit où vivre.

Pour créer un biome virtuel, vous pouvez utiliser des matériaux de construction de base - des particules de sol, d'eau, de lumière et des cellules végétales capables de croître.

Les particules de sol adhèrent les unes aux autres, formant une plate-forme solide. Le sol peut être mouillé si des particules d'eau s'y déposent.

Sur un sol humide, sous un bon éclairage, les plantes peuvent pousser. La masse végétale est la principale source d'aliments biologiques pour les formes animales.

Les corps animaux, en décomposition, renvoient des substances inorganiques dans l'écosystème du biome.





PS


Il s'agit d'un article de synthèse dont les dimensions ne permettent pas une divulgation cohérente de tous les domaines dans lesquels le projet se développe.

Maintenant, je travaille sur un concepteur interactif complet qui vous donnera la possibilité de "jouer à des jeux spatiaux" en mode bac à sable, de concevoir de nouveaux types de créatures, de dessiner des écosystèmes "en mode Dieu" et d'observer l'évolution en temps réel.

Quant à la partie technique, les progrès ne sont pas en reste: depuis 2012, le paradigme de développement a changé 4 fois, passant progressivement du concept CUDA + JS décrit dans cet article vers des modèles GPU ORM qui fonctionnent complètement côté GPU et ont leur propre langage objet pour les procédures stockées.

C'est tout, merci de votre attention!

Suivez le développement du projet et soutenez le développement ici:

https://www.patreon.com/samadhi_toolbox

Il y a encore peu de billets de blog, mais s'il y a des abonnés, je promets de les poster, en 7 ans j'ai accumulé sans vergogne beaucoup de contenu

En conclusion - un petit aperçu de travail:

Source: https://habr.com/ru/post/fr458612/


All Articles