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:
- (Youtube) Alguns jogos que usam geração procedural: https://www.youtube.com/watch?v=C7FYVRzWpoE
- (Youtube) No man's sky: https://www.youtube.com/watch?v=mGy8HIYBwV0
- (TecMundo) Como são criados os mapas de minecraft: http://www.tecmundo.com.br/video-game-e-jogos/75996-criados-mapas-infinitos-minecraft-video.htm
- (Wikidot) Wiki sobre geração procedural: http://pcg.wikidot.com/
- (PapoGeek) Um excelente artigo sobre o assunto: http://papogeek.com.br/games-e-mapas-os-imensos-mundos-de-no-mans-sky-e-minecraft/
- (GitHub) Pesquisador da área de geração procedural: https://github.com/Ian-Parberry?tab=repositories
- (PDF) Alguns trabalhos relacionados:
- http://bcc.ime.usp.br/principal/tccs/2013/rec/gustavo/slides.pdf
- http://repositorio.ufrn.br/jspui/bitstream/123456789/18044/1/PhilipMD_DISSERT.pdf
- http://cascavel.cpd.ufsm.br/tede/tde_arquivos/31/TDE-2012-11-28T115448Z-3867/Publico/DE%20CARLI,%20DANIEL%20MICHELON.pdf
- http://edirlei.3dgb.com.br/artigos/Gabriel_SBGames_2015.pdf
- https://www.researchgate.net/profile/Johan_Gielis/publication/254872467_A_botanical_perspective_on_modeling_plants_and_plant_shapes_in_computer_graphics/links/02e7e523990199b7df000000.pdf
- http://conic-semesp.org.br/anais/files/2015/trabalho-1000021015.pdf
- Superfórmula de Johan Gielis:
- https://en.wikipedia.org/wiki/Superformula
- http://www.procato.com/superformula/
- http://www.scriptspot.com/forums/3ds-max/scripts-wanted/super-formula
Nenhum comentário:
Postar um comentário