Game Design Game Jams Programação

Geração Procedural – Controlando o caos

Jogos que possuem conteúdo gerado proceduralmente tem se tornado uma hype na atual cena indie. Mas o que é procedural? Como usá-lo? Do que se alimenta? Onde vive?

Sempre se debateu muito sobre maneiras de manter os jogadores interessados em um jogo. Um dos principais tópicos destas discussões é: o que acontece quando o jogo termina? Esse problema proporcionou várias soluções, entre elas o New Game+, Achievements que exigiriam o jogador jogar mais de uma vez, novas Skins e até novos personagens. Mas tudo isso apenas estendia o tempo de vida do jogo que inevitavelmente chegava ao fim.

Depois de muito se pensar e debater, os desenvolvedores resolveram tentar implementar algo que já era muito utilizado, mas não com o objetivo de prolongar a “validade” do jogo, a Aleatoriedade. A ideia partia de um simples princípio: “E se os inimigos, os recursos e até os objetivos do jogo fossem gerados em tempo real de forma aleatória?”

Assim nasceu a ideia da implementação de algoritmos procedurais no design de jogos. Antes de irmos mais afundo, vamos falar um pouco sobre a diferença de aleatório e procedural. Podemos, de maneira simples, apenas dizer que um algoritmo procedural é um tratamento, ou um processo, em cima de resultados aleatórios. Ele usa de informação caótica, interpreta-a e aplica os devidos tratamentos pré determinados em cima dela.

Vamos usar de um exemplo bem simples. Imagine que você está usando uma ferramenta para gerar um nível de um RPG. Você elabora um algoritmo que simplesmente distribui elementos da sua base de mapas (por exemplo um tileset). Coisas bizarras como essas podem acontecer:
random_mapÁrvores em terrenos de areia, cactos na água, o terreno completamente mal distribuído. Isso porque nenhum tipo de pós processamento foi aplicado. E é aí que entram os algoritmos procedurais. Vamos tentar agora com uma simples filtragem: árvores só podem ser instanciadas em terrenos verdes e cactos em terrenos de areia. Só pra fins de testes, vamos tirar a água do processo.

semi_procedural_mapAgora temos algo indesejado também. Há muitas árvores e cactos. Isso pode acontecer devido ao fato de que, como retiramos a água do algoritmo, as árvores ocupam alguns dos espaços que deveriam, devido as probabilidades, estarem sendo ocupados pela água. Então vamos filtrar ainda mais esse algoritmo. Agora cada espaço verde terá uma chance de 20% de ter uma árvore e cada espaço de areia uma chance de 10% de ter um cacto.

procedural_mapBem melhor. Reparem que a distribuição dos terrenos é exatamente a mesma do último algoritmo que usamos. Mas não era pra ser algo aleatório? Exatamente. Porém computadores não trabalham com a mesma aleatoriedade que nós estamos acostumados, eles possuem um outro jeito de interpretá-la. Computadores trabalham com paletas de números que estão meio que pré-definidas, essas paletas são enormes, mas ainda sim existem e podem resultar em uma “aleatoriedade padrão”. Existe um termo para isso nesse campo de estudos, é o que chamamos de Seed. Através de uma Seed podemos replicar qualquer interação “aleatória” que o computador calcule.

Para que o mapa seja gerado de forma diferente todas as vezes, precisamos antes de iniciar o algoritmo gerar uma nova paleta de números, ou seja, uma nova seed. Feito isso todas as vezes teremos um novo mapa gerado diferentemente do último.

Existem inúmeras maneiras de gerar conteúdo através de algoritmos procedurais, entre elas as técnicas de Noise, Fractais, entre várias outras. Mas agora que fomos devidamente apresentados ao procedural existe uma questão muito delicada: como as interações e experiências do jogador serão projetadas em um ambiente tão “volátil”?

Este é mais um debate no campo de design. As vantagens e desvantagens de usar este tipo de técnica no desenvolvimento de jogos, pois sua utilização pode ser desfavorável dependendo da intenção do designer, principalmente quando o jogo depende fortemente de uma narrativa bem projetada e construída onde vários elementos precisam estar em seus devidos lugares para manter seu significado. Mas esse é um debate para outro post.

Inúmeros jogos utilizam de algoritmos procedurais para gerar conteúdo para os jogadores, desde Minecraft até Diablo, passando por Spelunky, Dwarf Fortress e outros. As possibilidades são infinitas.

Se você gostou do assunto eu recomendo muito a leitura do ebook Procedural Content Generation in Games, de Julian Togelius, Noor Shaker e Mark J. Nelson. Assista também esse excelente vídeo do canal Extra Credits, tratando justamente de como os designers podem utilizar do controle da aleatoriedade e ainda criarem experiências magnificas em jogos. E como última recomendação, se você está sedento para por em prática o que aprendeu sobre geração procedural, está acontecendo esse mês até dia 27 a Godot Community Game Jam, e o tema é exatamente Procedural Generation, com o tema opcional Two Colors, altamente recomendada!


  • Gostou desse post? Clique nos botões para compartilhar com seus amigos no Facebook, Google+ ou Twitter!
  • Tem algo a falar sobre o assunto? Comente aqui embaixo!
  • Quer participar dos nossos sorteios? Clique aqui!!!