# Geração procedural em jogos digitais

Geração procedural em jogos é um conjunto de algoritmos usados como ferramentas para criar grandes quantidades de conteúdo em arquivos de tamanhos mínimos. Ademais, pode ser descrito como algo de grande importância para a proporção de experiências em multimídias inovadoras, vindo a permitir desenvolvedores independentes a desenvolver produtos mais viáveis e completos.

## História

Os primeiros jogos gráficos foram extremamente limitados pela baixa memória que os computadores tinham na época, forçando os desenvolvedores a buscar novos métodos mais eficientes ao desenvolver esses jogos. Além disso, o desenvolvimento manual exigiria muito tempo, tendo ainda como limitação, a baixa capacidade de memória dos computadores da época. Assim, surgiu, como uma nova alternativa, uma tecnologia mais moderna, que utilizava de algoritmos sofisticados, capazes de otimizarem a geração em tempo real dos jogos.
Partindo de princípios simples da matemática, as primeiras gerações procedurais consistiam em criar números pseudo-aleatórios, chamados de seeds (sementes), usados ​​frequentemente com valores predefinidos, a fim de gerar grandes mundos. O primeiro jogo criado com o uso de seeds foi Akalabeth, de Richard Garriott, em 1980, que, usando o mesmo número de sementes, permitiu ao jogador poder sempre voltar a um determinado mundo.
Outros exemplos notáveis ​​incluem Rescue on Fractalus (1985) que cria montanhas escarpadas de um planeta alienígena através de fractais procedurais. River Raid (1982) da Activision, usou uma sequência de números pseudo-aleatórios gerados por um registro de deslocamento linear feedback shift register, a fim de gerar um labirinto de rolagem de obstáculos, além de The Sentinel que supostamente tinha 10.000 níveis diferentes armazenados em apenas 48 de 64 KB.
Porém, com a evolução dos computadores e com o advento dos Compact Disks (CDs) foi possível armazenar uma quantidade muito maior de conteúdo pré-fabricado, levando a geração procedural a perder espaço, pois exigia muito tempo para fazer um modelo puramente procedural se tornar um método funcional, utilizável ​​e de aparência realista, tornando-se mais barato e viável contratar profissionais para criação e modelagem desse conteúdo. Tais fatores contribuíram para que os geradores procedurais caíssem em desuso na década de 90. A geração procedural se inovou na virada do século, trazendo aos jogos experiências dinâmicas. Left 4 Dead, lançado pela Valve Software, em 2008, é um marco, pois continha um Game Design Assistido por Inteligência Artificial, que aleatorizou o jogo, criando e removendo inimigos, e itens com base em variáveis individuais contida nos jogadores. Tudo isso, a fim de proporcionar um ritmo frenético e envolvente. Outro marco importante foi o jogo Minecraft, lançado em 2009, onde o estado inicial do mundo é gerado aleatoriamente, baseando-se em diretrizes para criar terrenos parecidos com a Terra, onde o mapa é gerado sempre que o jogador atinge as bordas do mundo.
Por fim, com os desenvolvedores independentes, popularmente chamado de indies, a geração procedural passou a ser um método pratico e ágil para o desenvolvimento de jogos, pois permite a criação de uma quantidade imensa de conteúdo, usando equipes de desenvolvimento pequenas e grandes períodos de desenvolvimento.

## Áreas de pesquisa

As emoções e experiências do usuário são críticos para o planejamento de um jogo, logo se tornou essencial definir o sucesso dos eventos seguintes no gameplay, assim enfatizando a importância de uma boa construção. Porém com o aumento do mercado de jogos digitais, criar produtos inovadores se tornou um grande estresse para toda uma equipe de desenvolvimento, que passaram a sofrer com longos bloqueios criativos. Em resposta a isso, as técnicas procedurais vieram por se popularizar por solucionar tais problemas criativos em diversas áreas como:

### Geração de mapas

A fabricação de mapas é dita como principal motivo para uso de técnicas procedurais, pois é capaz de aumentar o tempo de vida útil do jogo com a criação de terrenos com desafios que instigarão a curiosidade de cada jogador ao explorar. Dois métodos bastante conhecidos são os de desenho com base Fractal e o de Matriz, o primeiro conhecido por esculpir planos para formar terrenos tridimensionais com planícies, morros e depressões de diversas escalas em planos tridimensionais, enquanto o segundo é aplicado principalmente em jogos 2D para posicionar, através do calculo matemático de mesmo nome, blocos que representam a arte de jogo. É possível combinar os dois estilos, o popular método por agentes que separam um terreno em formas geométrica (o mais popular sendo o diamante) e através de uma matriz tridimensional esculpir o terreno e posicionar os modelos sob e sobre ele.

### Geração de narrativas

Narrativa trata da transmissão de uma história para um interlocutor, isto em um jogo eletrônico é de extrema importância. Diversos estudos a respeito da construção da narrativa existem, num campo de estudo conhecido como narratologia. A condição fundamental e tradicional para a existência de uma narrativa, é “Uma sequência de eventos envolvendo indivíduos pensantes, conectados por relações causais, motivadas por um conflito, buscando uma solução”. Visando minimizar o tempo gasto no desenvolvimento construindo tal narrativa, diversas formas de geração com foco na narrativa foram inventadas nos últimos anos, dentre elas as mais famosas são:
* Geração baseada em Gramática, que consiste em codificar a estrutura da narrativa em termos de um conjunto de regras, usando uma gramática formal.
* Geração de Personagens Procedurais, na qual é construída uma Inteligência Artificial que gera informações através de Gramática, posteriormente as substitui na biografia que será atribuída a um personagem que de alguma forma irá interagir com o enredo.

### Geração de Artes Visuais

Baseados em conceitos de arte algorítmica, são capazes de formar estilos visuais únicos e memoráveis através de conjuntos de modelos tridimensionais constantemente alocados e em seguida misturados com texturas e com palhetas de cores. Jogos como Borderlands 2 ou No Man's Sky, por exemplo, utilizam da geração procedural e de arte algorítmica para modelar recompensas ao jogador, seja no formato ou aparência de armas ou com cenários fantásticos.

## Aplicações
### Jogos de Corrida Infinita

Um dos usos mais básicos de geração procedural, pois é aplicada na ordem em que os objetos aparecerão e como o percurso será durante o jogo. Usando o jogo Canabalt como exemplo para essa técnica, é visível um padrão das plataformas (prédios, guindastes, outdoors) na qual o protagonista percorre e o modo em que elas se repetem de forma aleatória com o nível da dificuldade ditada pela velocidade com que esses são criados até onde jogador consegue chegar.

### Jogos Roguelike

Roguelike é um subgênero de RPG que possui duas características:
* O jogador quando morre, retorna ao início do jogo.
* Aleatoriedade de cenários formado por tiles, gerados proceduralmente para torná-lo imprevisível pelo fato do aspecto visual mudar a cada nível.
Dependendo do jogo a geração procedural não é implementada apenas no cenário, mas também nos itens, em inimigos e power ups. Um bom exemplo é o jogo Don’t Starve que a cada vez que um mundo é gerado, sua forma, terrenos, localização dos NPCs e do próprio jogador são gerados de forma aleatória influenciando o jogador mudar sua estratégia a cada nova campanha.

### Aleatoriedades em Cenários

Possivelmente o uso mais simples da geração procedural é a aleatoriedade em cenários, isso é, o reposicionamento de objetos pela fase ou mundo em que o jogo está sendo explorado. O jogo Payday 2 é um dos melhores exemplos dessa técnica, nele é visto pessoas a serem encontradas em posicionamentos diferentes, se estão ou não com um item de interesse, onde esse item está, além da modificação de cenário com, também, o reposicionamento de cômodos na infraestrutura dos prédios.

### Criação de Missões

As missões são, basicamente, um conjunto de tarefas que podem ser concluídas em troca de algum item ou para progredir no jogo. A geração procedural é aplicada para gerar novas missões no jogo de acordo com o progresso do jogador no mesmo. Skyrim, quinto jogo da série The Elder Scrolls, torna-se um exemplo perfeito para este tópico possuindo um recurso que disponibiliza novas missões após completar outras, sendo principais ou secundárias, de acordo com inúmeros fatores que incluem as relações e decisões tomadas com o NPC que o jogador iniciou a quest.