Inicio     |     Sobre     |     GitHub     |     Games     |     Contato                        

quarta-feira, 13 de janeiro de 2016

[Pesquisa] Geração procedural de terrenos e ambientes Parte 1

   Como uma série do blog serão postadas pesquisas relacionadas a geração procedural, vida artificial, inteligência artificial e simulações de química, física e biologia aplicadas a jogos e simulações, desenvolverei jogos e simulações aplicando os mesmos, e explicarei detalhes e paço a paço desde a parte teórica até a prática. Iniciaremos do mais simples e com tempo avançando e melhorando os sistemas, o primeiro será uma aplicação que gerará automaticamente terrenos, muito similar a minecraft porém mais simples. A ideia com todo o conteúdo relacionado é além de facilitar e agilizar o trabalho do desenvolvimento de ambientes, também torná-los o mais realista possível.



O que é geração procedural?

   De modo resumido, quando se trata de jogos a geração procedural é muito usada, ela pode gerar desde mapas, ambientes e até mesmo criaturas. Essa se trata do uso de um algoritmo para gerar grandes extensões ou quantidade de conteúdo, facilitando e agilizando o trabalho de uma equipe de desenvolvimento e tornando o jogo mais dinâmico, os exemplos mais famosos de jogos que utilizam geração procedural são minecraft e no man's sky. Para saber mais sobre o assunto no final dessa postagem pode encontrar links de referência.

   Essa geração de terrenos servirá para suportar a simulação de vida artificial e pode ser usada para diversas aplicações, entre elas games. Toda parte gráfica será criada usando cubos por ser mais simples, mais rápido e mais leve, mas podem ser mudados posteriormente.


   A ideia é gerar tudo em código e gerar os gráficos apenas se necessário. Primeiramente 5 tipos de solos serão criados 1 (grama), 2 (grama seca), 3 (terra), 4 (areia) e 5 (pedra), a figura 1 ilustra os possíveis terrenos e quantos tipos de plantas podem nascer no mesmo.

Figura 1: Tipos de solo

   Para tornar a simulação mais realista vamos dar uma porcentagem de chance de uma planta crescer no terreno, já que a areia por exemplo, em um cenário de deserto mesmo tendo menos varições de plantas ainda existe uma chance pequena de nascerem, ou seja, são poucas, temos que garantir que não haverá um cenário lotado de cactos. A tabela 1 ilustra uma visão geral.

Tipo de solo
Variedades de plantas
Chance de nascer plantas
Grama
4
7/10
Grama seca
3
5/10
Terra
2
3/10
Areia
1
1/10
Pedra
0
0/10
Tabela 1: Visão geral geração de solo

   Como tudo será armazenado em código para que possa ser executado sem gráficos, uma matriz tridimensional armazenará as posições de cada cubo de solo. Para marcar a localização de cada cubo de solo, serão utilizadas as coordenadas x e z ou linhas e colunas, e y será a altura, o x e z máximos serão determinados durante a programação podendo ser alterados, enquanto o y que é a altura só poderá ter 5 camadas podendo ser modificado se houver necessidade. Uma regra criada por mim mas que pode ser alterada ao gosto de cada um, é que cada altura terá uma chance de gerar ou não o bloco na área, quanto mais baixo maior a chance quanto mais alto menor, como esse será um primeiro programa mais simples para testes criarei 5 camadas de solo a tabela 2 mostra a chance de gerar um solo em cada uma das camadas.

Camada
Chance de nascer
5
10%
4
30%
3
50%
2
80%
1
100%
Tabela 2: Chance de gerar solo em cada camada.

   Então o programa deve primeiro decidir se será ou não gerado um solo na atual posição, se for decidido que não ele pula para a próxima posição, se sim ele deverá escolher qual solo será gerado ali, nessa parte para dar mais realidade pode ser feita uma regra que de maiores porcentagens a alguns tipos de solos dependendo da altura (camada) que está, mas inicialmente não faremos isso, deixarei apenas uma regra que se houver um vizinho dos lados a chance de um solo igual a ele será maior que a de qualquer outro, se não a chance de todos é igual.

   A ideia é continuar trabalhando nesse algoritmo e ir melhorando o mesmo com o tempo, o próximo passo é construir o pseudocódigo e aplicar o mesmo em algumas linguagens de programação, continuaremos na próxima.

Referências para saber mais:




Nenhum comentário:

Postar um comentário