- Sans textures pré-rendues, uniquement avec un fragment shader GLSL, toute l’histoire d’une planète tellurique est générée de manière procédurale en quelques minutes, et la simulation finale se met à jour à 60 fps
- Le relief initial est créé en convertissant latitude et longitude en coordonnées 3D, puis en superposant des cratères sur 5 niveaux de détail et un bruit de fractional Brownian motion pour former la surface d’une planète primitive
- La tectonique des plaques déplace les plaques par pas de temps discrets au niveau du pixel, puis diffuse l’élévation aux points de collision vers les pixels voisins via une érosion thermique, afin d’approximer la formation des chaînes de montagnes et des continents
- L’érosion hydrique envoie l’eau de chaque pixel vers le voisin le plus pentu parmi 8 directions, et utilise la stream power law pour éroder l’altitude, ce qui permet de créer des rivières d’une largeur d’1 pixel même à basse résolution
- Jusqu’aux phases de climat, de vie et d’humanité, la simulation relie pression atmosphérique au niveau de la mer, vents, précipitations, modèle de diffusion de Lotka–Volterra et combustion des énergies fossiles pour représenter dans une seule simulation GPU les transformations de surface d’une planète sur le long terme
Simulation planétaire procédurale en shader GPU
- La simulation procédurale de la Terre est réalisée uniquement avec un fragment shader GLSL
- Elle simule en quelques minutes toute l’histoire d’une planète semblable à la Terre, avec un affichage mis à jour à 60 fps
- Un enregistrement vidéo du shader final est également fourni
Génération du relief d’une planète primitive
- La Terre primitive est traitée comme une planète primitive chaude, fortement marquée par les impacts d’astéroïdes
- Comme il n’y a pas de textures pré-rendues, la première étape consiste à calculer la hauteur du relief pour une latitude et une longitude données
- Latitude et longitude sont d’abord converties en coordonnées cartésiennes 3D
- Comme la taille des astéroïdes varie, les cratères se superposent à différentes échelles
- Le shader répète 5 niveaux de détail
- Les cratères sont empilés des plus grands aux plus petits
- Un bruit de fractional Brownian motion est ajouté pour donner au terrain un aspect rugueux
- Un facteur d’échelle fait en sorte que les plus grands cratères aient l’impact le plus important sur le relief
- Les cratères sont générés dans une grille 3D, puis la surface de la sphère y est découpée pour servir de terrain
- Pour éviter les motifs trop réguliers, les centres des cratères reçoivent un décalage pseudo-aléatoire à partir des points de la grille via une hash function
- L’influence des cratères appartenant aux points de grille voisins est moyennée avec une pondération exponentielle basée sur la distance
- Les rebords des cratères sont générés à l’aide d’une simple courbe sinusoïdale
- En remplissant d’eau les zones basses, le relief généré procéduralement se rapproche de l’apparence que les scientifiques prêtent à la Terre primitive
- Avec le temps, les roches se refroidissent, la vapeur d’eau se condense pour former les océans, et l’écoulement de l’eau liquide en surface creuse des vallées et laisse des sédiments
Tectonique des plaques et formation des continents
- Pour produire des chaînes de montagnes, des fosses océaniques et des formes continentales familières, il faut un modèle de tectonique des plaques
- Les plaques partent de positions initiales aléatoires et reçoivent une vitesse initiale
- La croissance des plaques est traitée avec un simple modèle d’agrégation
- Des points adjacents sont choisis aléatoirement
- Si un point n’a pas encore été attribué à une autre plaque, il est ajouté à celle-ci
- Chaque pixel interne à une plaque stocke la vitesse de déplacement de cette plaque
- Cette méthode ressemble à une diffusion-limited aggregation sans diffusion
- Le déplacement continu des plaques est difficile à implémenter, car il faut gérer les cas où les frontières ne se déplacent que d’une fraction de pixel
- À la place, les plaques se déplacent d’exactement 1 pixel horizontalement ou verticalement à des pas de temps discrets
- Le moment du déplacement est aléatoire pour chaque plaque
- La vitesse moyenne définie par la direction et la vitesse choisies est conservée
- Cela réduit la probabilité que des plaques voisines se déplacent simultanément
- Une collision se produit lorsqu’un pixel de bord d’une plaque se déplace vers une position déjà occupée par un pixel d’une autre plaque
- Les collisions sont traitées comme de la subduction, modélisée par une légère augmentation de l’altitude au point de collision
- L’effet de collision n’apparaît d’abord que sur les pixels de bord, mais un modèle d’érosion thermique le diffuse progressivement vers les pixels voisins
- L’érosion thermique pousse l’altitude d’un pixel dans la direction de la moyenne de ses voisins
- Cette combinaison permet de simuler dans une certaine mesure la formation de continents avec chaînes de montagnes
Érosion hydrique et bassins fluviaux
- L’aspect accidenté des reliefs naturels provient en grande partie de la formation des bassins versants, qui érodent le paysage en motifs ramifiés familiers
- Comme la carte de terrain de toute la planète est de faible résolution, le modèle doit pouvoir simuler des rivières d’une largeur d’1 pixel
- Le modèle simple de Barnes (2018) répond à cette contrainte
- Chaque pixel examine ses 8 voisins pour trouver la direction de la plus forte baisse d’altitude
- Les voisins diagonaux étant plus éloignés, une correction est appliquée
- La direction de la pente la plus forte devient celle de l’écoulement de l’eau depuis ce pixel
- L’eau est d’abord répartie dans les cellules par les précipitations, puis se déplace entre pixels voisins à chaque pas de temps
- L’érosion est calculée selon la stream power law
- Elle utilise l’
elevation, la quantité d’wateret laslopedans la direction de l’écoulement - La baisse d’altitude est limitée pour ne pas descendre sous le niveau du point vers lequel l’eau s’écoule
- Elle utilise l’
- Le couplage entre écoulement de l’eau et érosion fait émerger naturellement des bassins fluviaux dans le relief
- En colorant les réseaux connectés selon la position de leur embouchure, on obtient une visualisation qui rappelle une vraie carte de bassins fluviaux
- Le shader original de la simulation des bassins est également fourni
Modèle climatique global
- Le système climatique d’une planète entière est complexe, mais cette simulation en propose une approximation relativement simple
- Le moteur principal de la simulation climatique est une carte procédurale de pression moyenne au niveau de la mer (MSLP)
- D’après le Climate Cookbook, les principaux facteurs de génération d’une carte de MSLP sont la position des terres entre les océans et l’influence de la latitude
- Si l’on trace les données réelles de MSLP terrestre séparées entre terre et mer en fonction de la latitude, on obtient deux courbes sinusoïdales légèrement différentes
- Le modèle de pression annuelle moyenne est calculé avec des formules dépendant de la latitude, séparées pour terre et mer
- Terre :
1012.5 - 6. * cos(lat*PI/45.) - Mer :
1014.5 - 20. * cos(lat*PI/30.)
- Terre :
- Calculer séparément terre et mer crée des discontinuités nettes aux frontières
- Dans la réalité, la diffusion locale de la pression adoucit les transitions entre océan et continent
- Ce processus de diffusion est approché en appliquant un flou gaussien à la carte de MSLP
- L’écart-type se situe entre 10 et 15 degrés
- Les variations saisonnières sont implémentées en modélisant en plus la différence de MSLP entre janvier et juillet
- Cette différence suit elle aussi un motif sinusoïdal dérivé des données terrestres
- Après ajustement des paramètres et application d’un flou gaussien, elle est combinée à la MSLP annuelle moyenne
- À partir de la MSLP, la simulation génère vents et températures
- En réalité, la température produit la pression, mais ici la corrélation est utilisée à la place
seasonoscille entre -1 et 1 au cours d’une année
- Les vents ont tendance à se déplacer des hautes vers les basses pressions, mais à l’échelle globale il faut aussi tenir compte de la force de Coriolis
- La force de Coriolis fait circuler les vents autour des zones de pression
- Le vecteur vitesse est calculé en combinant le terme de Coriolis et le gradient de pression
- Malgré sa relative grossièreté, cette simulation produit des schémas de circulation des vents réalistes
- L’inversion des vents pendant la saison de mousson en Inde est également reproduite
- Les précipitations sont simulées en advectant la vapeur d’eau océanique vers les terres le long du champ de vecteurs du vent
- L’advection est implémentée de manière proche d’une simulation de fluide
Répartition de la vie et dynamique prédateur-proie
- Le climat influe sur la répartition de la vie sur la planète
- Les régimes de précipitations et les variations de température déterminent le taux de croissance de la végétation
- Lorsque les saisons changent, les herbivores se déplacent vers les régions où la végétation est suffisante pour les maintenir
- Les prédateurs suivent les herbivores qui se déplacent avec la végétation
- Cette dynamique est capturée par un modèle de diffusion de Lotka–Volterra
- Les composantes
xyzde la variablecreprésentent respectivement les populations de végétation, d’herbivores et de prédateurs - À grande échelle, la dynamique des populations animales crée des motifs intéressants
- Dans la réalité, on observe le plus facilement ce type de motifs dans les populations microbiennes de boîtes de Petri, mais les mêmes lois s’appliquent aussi aux grandes populations animales à l’échelle du globe
Humanité et émissions de carbone
- Après la phase de la Terre primitive, la vitesse de la simulation ralentit pour suivre le cycle jour-nuit, la tectonique des plaques devient difficile à percevoir et le relief se fige
- La nuit, l’humanité colonise la surface de la planète, faisant apparaître des motifs lumineux sans précédent
- L’expansion rapide de l’humanité s’accompagne de la combustion d’énergies fossiles
- En quelques centaines d’années, l’humanité brûle toutes les ressources fossiles disponibles et rejette dans l’atmosphère 5 000 milliards de tonnes de carbone
- Ces émissions renforcent l’effet de serre et augmentent la température moyenne mondiale de près de 10 °C
- En raison des températures extrêmes, de vastes zones terrestres autour de l’équateur deviennent inhabitables
- En conséquence, l’humanité disparaît d’une grande partie de la planète
1 commentaires
Avis sur Hacker News
C’est impressionnant, mais la partie finale où une civilisation dotée d’éclairage nocturne finit forcément par brûler tous les combustibles fossiles et transformer la planète en désert semble reposer sur une seule trajectoire possible de notre civilisation
Rien ne permet de dire qu’une mort par réchauffement et désertification est plus plausible qu’une guerre nucléaire, le développement d’une fusion nucléaire propre, une pandémie, ou l’invasion d’une planète tellurique voisine générée procéduralement
C’est excellent quand il s’agit de simuler ce qui s’est réellement passé, mais ça l’est jusqu’au moment où une opinion s’y glisse
En plus, il semble assimiler chaleur et sécheresse, et ne pas tenir compte non plus de l’effet du CO2 supplémentaire sur les plantes. Même si la zone équatoriale devient trop chaude pour être habitable par les humains, elle pourrait très bien être recouverte non pas de désert, mais de jungle
Cette approche ignore en grande partie les effets de second ordre évoqués plus haut
Je reconnais que la désertification finale relève d’une petite licence artistique destinée à raconter l’histoire plus facilement visuellement. La réalité serait beaucoup plus complexe
Ce n’est que le récit d’un scénario possible particulier, et c’est aussi formulé ainsi ailleurs : « La dernière partie vise à montrer un futur possible, mais probablement peu vraisemblable. Je voulais quelque chose de dramatique, donc j’ai représenté le cas extrême où littéralement tous les combustibles fossiles sont brûlés, mais pour les autres effets, j’ai essayé de rester aussi réaliste que possible en lisant des articles scientifiques portant sur ce type d’hypothèse. »
https://www.vice.com/en/article/xgx7nq/watch-four-billion-ye...
En 1996/1997, j’ai travaillé sur un jeu CD-ROM qui simulait la tectonique des plaques, la température, l’altitude et les précipitations sur des millions d’années
C’est stupéfiant de voir à quel point le matériel et les logiciels informatiques ont progressé en 28 ans : https://www.kmoser.com/evolution/
L’idée même de simuler une planète et les animaux qui y vivent était totalement renversante à l’époque, et elle l’est encore aujourd’hui. J’aurais dû garder le poster fourni avec ; les différentes branches d’évolution des sapiens étaient vraiment fascinantes
Je me disais que ce serait génial de pouvoir manipuler les déplacements supposés des plaques sur un globe 3D avec un curseur temporel, afin de visualiser comment on en arrive au relief actuel. Tu connais quelque chose de ce genre ?
[1] https://www.goodreads.com/book/show/19898.Assembling_Califor...
[2] extrait : https://www.newyorker.com/magazine/1992/09/07/assembling-cal...
Un excellent livre de hard SF très lié à ce sujet est Permutation City. En voyant le titre de cet article, j’ai eu l’impression d’être dans un rêve
C’est un peu une digression, mais la courte et excellente nouvelle « I don't know, Timmy, being God is a big responsibility » traite en un sens de simulation de mondes, et elle est vraiment très bonne :
https://qntm.org/responsibility
Pendant des années, j’ai voulu écrire une histoire avec une intrigue très similaire, mais il y avait un gros trou scénaristique lié au surcoût de calcul entre les univers, et je n’avais pas pensé à le résoudre avec des ordinateurs quantiques
Une autre différence dans l’histoire que j’imaginais était que les personnages écrivaient cette histoire, qu’elle devenait « mon » histoire, et qu’ils créaient une variable dont la valeur augmentait de 1 à chaque univers, afin que le lecteur sache à la fin à quelle profondeur il se trouve
Les personnes qui lisent ceci sur HN se trouvent au niveau de profondeur 8474771628371839
C’est peut-être la première fois que je rencontre plusieurs versions dans une œuvre de fiction, en dehors des manuels. J’aime beaucoup ce genre de texte-expérience de pensée, tant qu’il ne s’agit pas de chercher des failles dans la logique ou la physique
J’aime l’idée d’un multivers où tous les univers sont en fait identiques, ce qui rend la plupart d’entre eux dénués de sens
Le traitement du drame, de la physique et de la fin était différent, mais cela laissait un état de réflexion agréablement similaire. J’ai failli écrire le titre ou le nom du réalisateur, puis j’ai compris que, rien que dans ce contexte, ce serait déjà un gros spoiler, alors je me suis arrêté
Peut-être que j’ai chiffré le nom dans ce commentaire. Honnêtement, j’ai essayé, et comme il est tard, les moteurs de recherche actuels pourraient peut-être le trouver
L’un de mes cours préférés à l’université était l’analyse des politiques énergétiques, et nous avions expérimenté avec le modèle EPPA développé au MIT.
On modifiait certains paramètres, par exemple pour voir ce qui se passerait si le coût du stockage de l’énergie était divisé par 10. C’était très amusant, mais malheureusement je n’ai jamais trouvé l’occasion de faire quelque chose de similaire au travail.
[0] : https://globalchange.mit.edu/research/research-tools/eppa
Pour être honnête, la simulation a clairement omis quelques détails :)
Je ne sais pas pourquoi, mais tous les exemples Shadertoy intégrés à la page tournent à environ 0,6 FPS chez moi.
Si j’ouvre le « final shader » lié sur le site de Shadertoy, j’obtiens bien 60 fps.
Je me demande parfois ce que ça ferait de vivre dans un univers simulé.
Si nous pouvions « voir » l’« extérieur » de l’« univers », nous comprendrions peut-être que notre réalité est très simple et limitée par rapport à la « réalité » extérieure. Cette structure pourrait se poursuivre à l’infini, ou bien la réalité extérieure pourrait être bien plus logique que la nôtre et nous pousser à accepter sa finitude.
Mais puisque nous avons un début et un écoulement du temps, il y a peut-être une naissance, une mère, voire un but. Bien sûr, c’est une façon de penser très humaine, et tout cela pourrait n’être qu’une soupe aléatoire.
Imaginez qu’il y ait des entités conscientes d’elles-mêmes dans une simulation que nous avons créée, et qu’elles commencent à penser la même chose. Tout le monde se moquerait en disant : « nous sommes juste le fruit du hasard, il n’y a ni dieu ni conception, pourquoi dépenserait-on autant d’énergie pour un énorme amas d’espace vide inutile ? » ; il devrait en partie leur donner raison, tout en ayant en partie tort.
Nous découvrir ne serait pas une consolation, car nous ne pouvons rien leur dire sur nos propres concepteurs. Pour la même raison, les découvrir ne nous consolerait pas non plus. C’est pourquoi le concept de dieu est absurde. Si dieu a lui aussi un dieu, que fait-on ensuite ? Accepter son existence ne résout aucun problème.
C’est peut-être une forme de nihilisme, mais au moins ça évite d’être submergé.
Personne n’a jamais dit qu’une simulation devait forcément tourner sur des semi-conducteurs.
Je ne sais pas pourquoi il n’utilise que des fragment shaders. Avec un vertex shader pour la heightmap, on pourrait aussi zoomer jusqu’à la surface.
Il est écrit « written entirely in GLSL fragment shaders » ; c’est quel langage ?
La musique est assez cliché. Elle a peut-être été faite par une IA.
À l’origine, il a été composé par John Murphy pour le film Sunshine, sorti en 2007.
https://en.wikipedia.org/wiki/Sunshine:_Music_from_the_Motio...