O que é geração procedural: a “mágica matemática” que cria universos infinitos nos games

A geração procedural, vinda da computação, é uma forma de criar dados de forma algorítmica. Ou seja, através de instruções programadas e processamento de códigos numéricos (map seed), o que permite gerar elementos aleatórios automaticamente. É um processo que permite gerar até coisas complexas como texturas e modelos 3D, como é usado na computação gráfica por exemplo. Entretanto, apesar de tantas aplicabilidades, a geração procedural surgiu justamente no desenvolvimento dos games.
A geração procedural nos games foi realizada com o intuito de facilitar a criação de fases, mapas e mundos, com o mínimo de esforço humano. Para isso, são utilizados certos algoritmos e técnicas, de acordo com o tipo de conteúdo que será criado.
O Randomized graph traversal (travessia aleatória de grafos) é comumente utilizado em geradores de dungeons, ou em mapas ramificados (como em Slay the Spire e FTL: Faster Than Light). Esse processo é realizado com a construção de grafos (modelos matemáticos) que constroem salas e conexões, enquanto aplicam regras pré-definidas referentes a situações como mínimo de caminho, quantidade de barreiras (como portas trancadas ou outros tipos de obstruções que precisam de determinados itens/habilidades para desbloquear), e becos sem saída.
Todos esses elementos, geralmente, são extraídos de assets prontos e posteriormente organizados em uma forma geométrica passível de renderização. Exemplificando: a estrutura de nós e ligações em diferentes diagonais é transformada em uma estrutura “quadrada”, com ligações horizontais e verticais, como vemos nas dungeons dos jogos.
São algoritmos como o Ruído de Perlin e o Diagrama de Voronoi. Essas funções criam transições suaves entre os elementos, ideais para paisagens naturais. Elevação de terrenos, textura de nuvens e delimitação de diferentes biomas ou terrenos são os usos mais comuns dessas ferramentas. São recursos muito comuns em engines para desenvolvimento de jogos, como a Unity 3D e a Unreal Engine.
Weighted random selection é uma função extremamente comum no posicionamento de inimigos e armadilhas, assim como na criação de loots e equipamentos. Todos esses dados são inseridos previamente, assim como o “peso” de cada um deles. Com essas informações, cabe ao algoritmo ponderar, de acordo com o “peso” estabelecido, e inserir no jogo conforme a probabilidade e outras regras estabelecidas.
Entre para comentar.