- Sem texturas pré-renderizadas, a história completa de um planeta terrestre é gerada proceduralmente em poucos minutos usando apenas um fragment shader GLSL, e a simulação final é atualizada a 60 fps
- O relevo inicial é criado convertendo latitude e longitude em coordenadas 3D e sobrepondo crateras em 5 níveis de detalhe com ruído fractional Brownian motion para formar a superfície de um planeta primitivo
- A tectônica de placas move placas em passos discretos de tempo no nível de pixel, e a elevação causada nos pontos de colisão é espalhada ao redor por erosão térmica, aproximando a formação de cadeias de montanhas e continentes
- A erosão hídrica faz cada pixel enviar água na direção de maior descida entre 8 vizinhos e reduz a altitude com a stream power law, permitindo criar rios com 1 pixel de largura mesmo em baixa resolução
- Até as fases de clima, vida e humanidade, a simulação conecta pressão média ao nível do mar, vento, precipitação, modelo de difusão de Lotka–Volterra e queima de combustíveis fósseis para reunir mudanças de longo prazo na superfície planetária em uma única simulação na GPU
Simulação procedural de planeta feita com shader de GPU
- A simulação procedural da Terra foi implementada apenas com fragment shader GLSL
- Ela simula, em poucos minutos, toda a história de um planeta parecido com a Terra, enquanto a tela é atualizada a 60 fps
- Também é fornecido um registro em vídeo do shader final
Geração do relevo de um planeta primitivo
- A Terra inicial é tratada como um planeta primitivo quente e coberto de crateras causadas por impactos de asteroides
- Como não há texturas pré-renderizadas, a primeira etapa é calcular a altura do terreno em uma latitude e longitude específicas
- Latitude e longitude são primeiro convertidas em coordenadas cartesianas 3D
- Como os asteroides têm tamanhos variados, crateras de vários tamanhos são sobrepostas
- O shader repete 5 níveis de detalhe
- As crateras são dispostas em camadas, das maiores às menores
- Ruído fractional Brownian motion é misturado para deixar o terreno mais áspero
- O escalonamento faz com que as maiores crateras tenham o maior impacto sobre o relevo
- As crateras são geradas em uma grade 3D, e uma fatia da superfície da esfera é usada como terreno
- Para evitar padrões regulares, os centros das crateras recebem offsets pseudoaleatórios nos pontos da grade com uma hash function
- A influência das crateras pertencentes aos pontos vizinhos da grade é combinada por média com pesos exponenciais baseados na distância
- A borda da cratera é gerada com uma curva senoidal simples
- Ao preencher com água as áreas mais baixas, o relevo gerado proceduralmente se torna parecido com o que cientistas imaginam para a Terra primitiva
- Com o tempo, as rochas esfriam e o vapor d’água se condensa em oceanos, enquanto o fluxo de água líquida na superfície cria vales e deixa sedimentos
Tectônica de placas e formação dos continentes
- Para criar cadeias de montanhas, fossas oceânicas e formas continentais familiares, é necessário um modelo de tectônica de placas
- As placas começam em posições-semente aleatórias e recebem velocidades iniciais
- O crescimento das placas é tratado com um modelo simples de agregação
- Pontos adjacentes são escolhidos aleatoriamente
- Se o ponto ainda não foi atribuído a outra placa, ele é adicionado à placa atual
- Cada pixel dentro da placa armazena a velocidade de movimento da placa
- Esse método é parecido com diffusion-limited aggregation sem difusão
- O movimento contínuo das placas é difícil de implementar porque exigiria tratar fronteiras deslocadas por frações de pixel
- Em vez disso, as placas se movem exatamente 1 pixel na horizontal ou vertical em passos discretos de tempo
- O momento do movimento é randomizado para cada placa
- A velocidade média definida e a direção são preservadas
- A chance de placas vizinhas se moverem ao mesmo tempo diminui
- A colisão de placas ocorre quando um pixel de fronteira de uma placa se desloca para uma posição antes ocupada por um pixel de outra placa
- A colisão é tratada como subduction e modelada elevando levemente a altitude no ponto de impacto
- O efeito da colisão aparece apenas nos pixels de fronteira, mas o modelo de erosão térmica o espalha gradualmente para os pixels ao redor
- A erosão térmica empurra a altitude de um pixel na direção da média dos vizinhos
- Essa combinação permite simular até certo ponto a formação de continentes com cadeias de montanhas
Erosão hídrica e bacias hidrográficas
- O aspecto acidentado do relevo natural vem em grande parte da formação de bacias hidrográficas, que erodem a paisagem em padrões ramificados familiares
- Como o mapa de relevo que representa o planeta inteiro tem baixa resolução, o modelo precisa conseguir simular rios com 1 pixel de largura
- O modelo simples de Barnes (2018) atende a esse requisito
- Cada pixel examina 8 vizinhos para encontrar a direção com a maior queda de altitude
- Os vizinhos diagonais são mais distantes, então recebem correção
- A direção de descida mais íngreme se torna a direção pela qual a água sai daquele pixel
- A água é inicialmente distribuída nas células pela chuva e, a cada passo de tempo, se move entre pixels vizinhos
- A erosão é tratada de acordo com a stream power law
- Usa
elevation,watere aslopena direção para onde a água está se movendo - A redução de altitude é limitada para não ficar abaixo do ponto para onde a água escoa
- Usa
- Com a interação entre fluxo de água e erosão, as bacias hidrográficas se formam naturalmente no relevo
- Ao colorir os cursos d’água conectados de acordo com a posição de sua foz, é possível criar uma visualização que lembra mapas reais de bacias hidrográficas
- O shader original da bacia hidrográfica simulada também é fornecido
Modelo climático global
- O sistema climático de um planeta inteiro é complexo, mas nesta simulação ele é aproximado de forma relativamente simples
- O principal motor da simulação climática é um mapa de pressão média ao nível do mar (MSLP) gerado proceduralmente
- Segundo o Climate Cookbook, os principais fatores para gerar um mapa de MSLP são a posição das massas de terra em relação aos oceanos e o efeito da latitude
- Ao separar os dados reais de MSLP da Terra entre terra e mar e plotá-los por latitude, surgem duas curvas senoidais de formato um pouco diferente
- O modelo de pressão média anual é calculado com fórmulas baseadas na latitude, separando terra e mar
- Terra:
1012.5 - 6. * cos(lat*PI/45.) - Mar:
1014.5 - 20. * cos(lat*PI/30.)
- Terra:
- Calcular terra e mar separadamente cria descontinuidades bruscas nas fronteiras
- Na realidade, por causa da difusão local da pressão, a MSLP varia de forma suave na transição entre oceano e continente
- Esse processo de difusão é aproximado aplicando um Gaussian blur ao mapa de MSLP
- O desvio padrão fica na faixa de 10–15 graus
- A variação sazonal é implementada modelando adicionalmente a diferença de MSLP entre janeiro e julho
- Essa diferença também segue um padrão senoidal nos dados da Terra
- Após ajustar os parâmetros e aplicar Gaussian blur, ela é combinada com a MSLP média anual
- A partir da MSLP, são gerados vento e temperatura
- Na realidade, a temperatura cria a pressão, mas aqui a correlação é aproveitada
seasonoscila entre -1 e 1 ao longo de um ano
- O vento tende a ir de alta para baixa pressão, mas em escala global também é preciso considerar a força de Coriolis
- A força de Coriolis faz o vento circular ao redor das áreas de pressão
- O vetor velocidade é calculado combinando o termo de Coriolis e o gradiente de pressão
- Essa simulação relativamente grosseira produz padrões de circulação de vento realistas
- O fenômeno de reversão dos ventos durante a estação das monções na região da Índia também é reproduzido
- A precipitação é simulada por advecção do vapor d’água do oceano para o continente ao longo do campo vetorial dos ventos
- A advecção é implementada de forma semelhante à usada em simulação de fluidos
Distribuição da vida e dinâmica predador-presa
- O clima influencia a distribuição da vida no planeta
- Padrões de chuva e variações de temperatura determinam a taxa de crescimento da vegetação
- Quando as estações mudam, os herbívoros migram para áreas com vegetação suficiente para sustentá-los
- Os predadores seguem os herbívoros, que por sua vez seguem a vegetação
- Essa dinâmica é capturada com um modelo de difusão de Lotka–Volterra
- Os componentes
xyzda variávelcrepresentam respectivamente as populações de vegetação, herbívoros e predadores - A dinâmica populacional de animais em grande escala cria padrões interessantes
- No mundo real, esses padrões são mais fáceis de observar em populações microbianas em placas de Petri, mas as mesmas leis também se aplicam a populações de grandes animais em escala global
Humanidade e emissões de carbono
- Depois de passar pela fase da Terra inicial, a velocidade da simulação desacelera para o ciclo de dia e noite, a tectônica de placas se torna difícil de perceber e o relevo fica fixo
- À noite, à medida que a humanidade coloniza a superfície do planeta, surgem padrões de luz sem precedentes
- A rápida expansão humana vem acompanhada da queima de combustíveis fósseis
- Ao longo de algumas centenas de anos, a humanidade queima todos os recursos disponíveis de combustíveis fósseis e emite 5 trilhões de toneladas de carbono na atmosfera
- Essas emissões intensificam o efeito estufa e elevam a temperatura média global em quase 10 graus Celsius
- Devido às temperaturas extremas, vastas áreas terrestres próximas ao equador se tornam inabitáveis
- Como resultado, a humanidade desaparece de uma parte significativa do planeta
1 comentários
Opiniões no Hacker News
É interessante, mas a parte no final em que uma civilização com iluminação noturna inevitavelmente queima todos os combustíveis fósseis e transforma o planeta em um deserto parece uma suposição baseada em apenas um caminho possível da nossa civilização
Não há motivo para considerar a morte por aquecimento e desertificação mais plausível do que guerra nuclear, desenvolvimento de fusão nuclear limpa, pandemia ou invasão de um planeta semelhante à Terra gerado proceduralmente nas proximidades
É ótimo quando simula o que realmente aconteceu, mas só até começar a inserir opinião
Além disso, parece equiparar calor a aridez e não considerar o efeito do CO2 adicional sobre as plantas. Mesmo que a faixa equatorial fique quente demais para humanos viverem, há uma boa chance de ela acabar coberta por selvas, não por desertos
Essa abordagem em geral ignora os efeitos de segunda ordem mencionados acima
Reconheço que a desertificação no final é uma certa licença artística para facilitar a narrativa visual. A realidade seria muito mais complexa
É apenas a história de um cenário possível específico, e isso foi dito também em outro lugar: “A parte final pretende mostrar um futuro possível, mas provavelmente improvável. Eu queria torná-la dramática, então retratei o resultado extremo de literalmente todos os combustíveis fósseis sendo queimados, mas tentei manter os outros efeitos tão realistas quanto possível lendo artigos científicos sobre essa suposição.”
https://www.vice.com/en/article/xgx7nq/watch-four-billion-ye...
Em 1996/1997 trabalhei em um jogo em CD-ROM que simulava tectônica de placas, temperatura, altitude e precipitação ao longo de milhões de anos
É impressionante ver quanto o hardware e o software de computação avançaram em 28 anos: https://www.kmoser.com/evolution/
A própria ideia de simular um planeta e os animais nele era absolutamente chocante na época, e ainda é. Eu deveria ter guardado o pôster que vinha junto; os vários ramos evolutivos dos sapiens eram realmente fascinantes
Pensei que seria ótimo ter um globo 3D com um controle deslizante de tempo para manipular os movimentos previstos das placas e visualizar como elas chegam à topografia atual. Você conhece algo assim?
[1] https://www.goodreads.com/book/show/19898.Assembling_Califor...
[2] trecho: https://www.newyorker.com/magazine/1992/09/07/assembling-cal...
Um excelente livro de hard sci-fi muito relacionado a esse tema é Permutation City. Quando vi o título deste artigo, tive a sensação de estar dentro de um sonho
Saindo um pouco pela tangente, o conto curto e excelente "I don't know, Timmy, being God is a big responsibility" trata, em certo sentido, de simulação de mundos e é muito bom:
https://qntm.org/responsibility
Durante anos quis escrever uma história com uma trama muito parecida, mas havia um grande furo de enredo no overhead computacional entre universos, e eu não tinha pensado em resolver isso com computadores quânticos
Outra diferença na história que eu imaginava era que os personagens escreveriam essa história, ela se tornaria “minha” história, e criariam uma variável cujo valor aumentaria em 1 a cada universo, permitindo que no final o leitor soubesse em que nível de profundidade está
Quem estiver lendo isso no HN está no nível de profundidade 8474771628371839
Acho que é a primeira vez que me deparo com várias versões em ficção, fora livros didáticos. Gosto muito desse tipo de texto em forma de experimento mental, desde que não se explorem brechas de lógica ou de física
Gosto da ideia de um multiverso em que todos os universos são praticamente idênticos, tornando a maior parte dele sem sentido
O drama, a física e o final foram tratados de maneiras diferentes, mas deixou um estado de reflexão agradável parecido. Quase escrevi o título ou o nome do diretor, mas percebi que, só por este contexto, isso poderia ser um grande spoiler, então parei
Talvez eu tenha cifrado o nome dentro deste comentário. Sinceramente, eu tentei, e agora é tarde da noite, então talvez os mecanismos de busca de hoje consigam descobrir
Uma das minhas aulas favoritas na universidade foi análise de políticas energéticas, e fiz experimentos com o modelo EPPA desenvolvido pelo MIT
Eu alterava parâmetros específicos, como o que aconteceria se o custo de armazenamento de energia caísse para um décimo. Foi muito divertido, mas infelizmente nunca encontrei no trabalho uma oportunidade de fazer algo parecido
[0]: https://globalchange.mit.edu/research/research-tools/eppa
Para falar a verdade, a simulação claramente omitiu alguns detalhes :)
Não sei por quê, mas todos os exemplos do Shadertoy incorporados na página rodam a cerca de 0,6 FPS no meu ambiente
Se eu abro o “final shader” linkado no site do Shadertoy, ele roda bem a 60 fps
Às vezes fico pensando em como seria viver em um universo simulado
Se pudéssemos “ver” o “fora” do “universo”, talvez entendêssemos que a nossa realidade é muito simples e limitada em comparação com a “realidade” externa. Essa estrutura poderia continuar infinitamente, ou a realidade externa poderia ser muito mais lógica que a nossa, levando-nos a aceitar sua finitude
Mas, como temos um começo e a passagem do tempo, talvez também haja um nascimento, uma mãe e quem sabe até um propósito. Claro que essa é uma forma de pensar muito humana, e tudo pode ser apenas uma sopa aleatória
Imagine que exista uma entidade autoconsciente dentro de uma simulação que criamos, e que ela comece a pensar a mesma coisa. Todos ririam dizendo “somos só aleatórios, não há deus nem projeto, por que alguém gastaria tanta energia com esse monte enorme e inútil de espaço vazio?”, e ela teria de concordar em parte, mas ao mesmo tempo estaria parcialmente errada
Descobrir a nossa existência não serviria de consolo, porque também não podemos dizer nada sobre os nossos próprios projetistas. Pelo mesmo motivo, se nós os descobríssemos, isso não seria consolo. Por isso o conceito de deus é tolo. Se deus também tem um deus, o que fazemos agora? Aceitar a existência dele não resolve nada
Talvez isso seja um certo niilismo, mas é por isso que não fico sobrecarregado
Ninguém disse que uma simulação precisa rodar em semicondutores
Não sei por que usam só fragment shaders. Se também houvesse um vertex shader para o heightmap, daria para dar zoom até a superfície
Está escrito “written entirely in GLSL fragment shaders”, mas que linguagem é essa?
A música é bem clichê. Talvez tenha sido feita por IA
Originalmente, foi composta por John Murphy para o filme Sunshine, de 2007
https://en.wikipedia.org/wiki/Sunshine:_Music_from_the_Motio...