Inicio     |     Sobre     |     GitHub     |     Games     |     Contato                        

quinta-feira, 13 de abril de 2017

[Artigo] Computação natural e cognitiva aplicada a jogos digitais


Nesse artigo darei uma introdução sobre desenvolvimento, assunto que já é abordado nesse blog a um tempo, e farei um breve resumo sobre computação natural e cognitiva e como elas se aplicam em projetos de jogos. Nos próximos artigos abordarei cada tema relacionado a computação natural e cognitiva com mais detalhes.

Com o grande crescimento do mercado de jogos digitais, que já ultrapassou o faturamento do mercado de cinema é importante ressaltar a importância de pesquisas e avanços nas técnicas de desenvolvimento e nas melhoras da qualidade dos jogos, seja gráfica ou artística, ou em algoritmos. É visível o grande salto na evolução das qualidades gráficas dos jogos, não só os jogos se tornaram mais realistas como também surgiram novas formas de arte que tornaram os jogos mais belos ou melhor dizendo, transformaram os jogos em uma verdadeira obra de arte. Além disso surgiram novas mecânicas  algumas inovadoras, outras melhoras e modificações de mecânicas antigas.


Alguns dos pontos que costumam ser considerados postos fortes em jogos e podem definir o tamanho do seu sucesso são os gráficos ou a arte, a mecânica, a sonorização ou trilha sonora e a história, porque sim, boas histórias fazem bons jogos, por isso, caso você deseje ser tanto um desenvolvedor em uma grande empresa como um desenvolvedor independente é de extrema importância que você procure se tornar especialista em uma área de desenvolvimento.



Parte 1 - Introdução ao desenvolvimento de jogos

Se você é uma pessoa de boas ideias, que gosta de ler livros, assistir filmes, jogar jogos, e sempre tem boas ideias de histórias e até mesmo mecânica de jogos, talvez sua área seja o game design, onde você trabalhará com ideias, as organizando, documentando e criando conceitos de jogos, algumas dicas para melhorar as habilidades de game design (para pessoas que querem se especializar e independentes que precisam ter um conhecimento minimo geral) são, leia livros, todo tipo de livros, romance, aventura, mistério, terror, científicos  livros de regras de RPG de mesa, livros de história, mitologia etc., o mesmo vale para assistir filmes e series, e quanto a jogar jogos, não jogo apenas por diversão ou por jogar, jogue com um olhar critico de desenvolvedor, preste atenção nos detalhes, procure coisas que poderiam ser melhores, entenda a mecânica, entenda a história, e se tiver uma ideia por mais boba que pareça, sempre anote.



Se você é um artista provavelmente já sabe disso, mas para deixar claro, o artista costuma ser o desenhista (não necessariamente precisa ser um desenhista), o artista entende de cores, arte, e costuma ter seu próprio estilo de arte, pode ser dividido de varias formas e se especializar em uma delas (concept art, pixel art, vetores, modelagem e animação 3D, animação 2D etc.), mas é importante que ele saiba trabalhar com softwares de imagem e animação, fazer desenhos legais no caderno da escola não é suficiente. Uma dica para o artista melhorar sua habilidades, além de jogar jogos e procurar conhecer as novidades no mundo das artes digitais é estudar arte, sim, estudar arte, moderna, clássica, no geral, isso pode expandir sua imaginação e habilidades de uma maneira inimaginável.



O musico, dificilmente um musico ou engenheiro de som ou alguém dessa área começará a estudar para trabalhar com jogos, provavelmente em algum momento da vida ele "cairá" nesse mundo, não entendo muito de musica então não me vejo apta a dar dicas para esse nicho, mas para desenvolvedores independentes minha dica é procure um profissional para fazer a trilha sonora do seu jogo, alternativa, compre pacotes de assets de áudio e trilhas sonoras, alternativas não muito aconselháveis, baixe pacotes gratuitos (dê preferencia á pacotes e áudios no domínio público CC0) ou faça você mesmo, existem softwares que facilitam o trabalho de criação e edição de áudio, você pode se arriscar com esses.



Programador, para quem deseja fazer um game maior com uma mecânica mais complexa, precisará de programadores ou de habilidades em programar, para quem não sabe a programação é o que faz tudo funcional, o programador programa a mecânica, programa o funcionamento do personagem e suas animações, programa a inteligencia dos inimigos, os NPCs, e tudo mais. A programação é também uma das partes mas complexas e mais suscetível a erros, é nas linhas de código que moram os bugs. O desenvolvedor independente precisa ter conhecimento em lógica, pois até os motores de jogos mais simples que não precisam de programação exigem conhecimento em lógica.
Não preciso dizer que as melhores formas de se aprender a programar e melhorar suas habilidades é programando, prática e estudo, muita prática e muito estudo, é basicamente isso, por isso para o programador é bom procurar um ou dois motores de jogos e se fixar no aprendizado desses e das linguagens que esses trabalham, não dá para abraçar o mundo, então seja realista.



Não vou entrar muito na parte de marketing, mas vale lembrar que essa é uma das etapas mais importantes, principalmente no lançamento do jogo, por isso, procure um profissional ou empresa para trabalhar com a divulgação do seu jogo, se não tem dinheiro para isso procure ler a respeito, divulgue seu jogo em todos os meios gratuitos que conseguir.

Como eu sou programadora, meu foco será esse, programação, algoritmos, mecânicas, mas procurarei sempre tentar abordar um pouco das outras áreas já que como uma desenvolvedora independente é importante termos uma boa noção e visão geral das coisas.



Vamos falar um pouco de softwares, nessa postagem você encontra uma lista de programas (pagos e gratuitos) para desenvolvimento no geral, mas vou fazer algumas indicações de motores de jogos:
Para iniciantes e não programadores eu aconselho o uso do RPG Maker , que foi o primeiro programa que usei para criar jogos, é excelente para iniciantes e possui muito material sobre ele online, o mesmo é pago e já foi mais barato, mas possui versões de teste, vale a experiencia. Uma alternativa que é muito usado por principiantes é o Game Maker , eu particularmente nunca usei, mas já ouvi e ainda ouço falar tanto nele e o fato de existir a tanto tempo provam que é um software excelente e além disso gratuito.
Construct 2 é outro motor de jogos simples, porem muito poderoso e com muito material de apoio, ele é pago mas possui uma versão limitada gratuita, eu já testei e por mais que exija conhecimento básico em lógica, pode ser usado por qualquer um, outro ponto positivo é que com ele você pode publicar jogos para diversas plataformas. Uma alternativa não muito conhecida ao Construct 2 é o GDevelop, ele é gratuito e possui uma interface parecida com a do Construct, eu usei o mesmo em uma Game Jam e achei muito interessante e intuitivo, uma excelente ferramenta para não programadores.
Alguns dos motores mais complexos que citarei a seguir possuem formas de se criar jogos que não necessitam  de programação, alguns deles são o Blender, UDK e o Unity que possui um pacote chamado Playground criado exatamente para isso, esses podem ser usados por artistas mas para iniciantes ainda aconselho os anteriores.

Agora vamos aos um pouco mais complexos, vou começar com a framework Phaser que ainda não usei muito mas pretendo usar mais vezes, basicamente ela é uma ferramenta que facilita o desenvolvimento de jogos em HTM5, completamente gratuita.
Duas ferramentas ligeiramente novas que descobri a pouco tempo mas estou muito interessada são a GODOT e a ATOMIC Game Engine, ambas são gratuitas, te permitem desenvolvimento de jogos 2D e 3D e necessitam de programação, a Godot utiliza a linguagem Python mas possui API para C++ enquanto a Atomic utiliza C++ mas possui API para JavaScript, TypeScript e C#. Pretendo testar melhor essas duas engines e postarei os resultados no blog.
Dois motores de jogos gratuitos, pouco conhecidos mas que eu uso e gosto muito são Blender e jMonkey, sim, o blender é conhecido como um software excelente e gratuito para modelagem e animação 3D, mas ele possui desde que conheço (e olha que faz tempo) uma game engine que pode ser usada sem programação ou com programação usando a linguagem Python, vale a pena experimentar, enquanto o jMonkey é um motor de jogos criado exatamente para programadores Java, você sabe programar em java? se sim, então tudo o que você precisa é dar uma olhada na documentação do jMonkey e sair por ai criando seus jogos.

Para finalizar vou citar três motores de jogos que estão entre os "tops", mais usados profissionalmente por empresas grandes, pequenas e desenvolvedores independentes,  Cryengine, UnrealEngine e Unity, primeiro é bom ressaltar que para que você consiga obter o máximo de proveito dessas engines talvez você precise de um computador com uma boa configuração, mas vamos falar um pouco sobre elas, primeiro são todas gratuitas possuindo versões pagas e "regras" sobre faturamento, segundo, são usadas para desenvolvimento de jogos 3D com exceção do Unity que pode ser usada tanto para 3D quanto para 2D, e por ultimo, na Unity você pode programar em C# ou JavaScript, na Unreal você programa em C++ e na Cryengine você usa C# e C++.
Até o momento o motor que mais usei foi o Unity, mas indico e gosto de todos os citados, acredito que cada um atenda as necessidades de formas diferentes, por isso é interessante ter uma visão geral sobre motores de jogos. Experimente e escolha o seu!



É importante que um desenvolvedor de jogos conheça o processo de desenvolvimento de um jogo, conheça as partes envolvidas, como um jogo funciona e os tipos de jogos existentes. Tipos de jogos podem ser divididos de vairas formas, gêneros, 2D, 3D e isométricos, RPG, MOBA, luta, corrida, plataforma etc.. O primeiro passo para desenvolver um jogo, uma vez que você já definiu suas ferramentas, é a ideia e o planejamento, eu criei a um tempo um tutorial de como desenvolver uma documentação básica de jogos que podem ser vistas nos links a baixo:


Uma vez que você escreveu a documentação do seu jogo, se ainda não possui experiencia em desenvolvimento, pode começar estudando ou usando os links externos de tutoriais e vídeo aulas da página [Lista] GameDev, ou pode usar os tutoriais presentes no blog para desenvolver seu primeiro jogo. A experiencia e a quantidade de materiais prontos que você terá depois de um tempo te permitirão desenvolver com mais facilidade e cada vez melhor, podendo arriscar projetos cada vez maiores e mais complexos.
Parte 2 - Introdução e aplicação da computação natural e cognitiva

A computação natural é um campo de estudo  e pesquisa que trabalha com soluções computacionais baseados na natureza ou na biologia, ou soluções computacionais que visam auxiliar as ciências biológicas, aqui focaremos nas soluções computacionais baseadas na natureza. Esse campo se divide em diversas subáreas, que vão desde redes neurais, até algoritmos genéticos e fractais, a seguir irei citar algumas das subáreas que poderemos estar estudando aqui no blog e como elas podem ser aplicadas em jogos digitais.



A teoria de agentes talvez seja um dos tópicos mais importantes cujo entendimento auxilia a aplicação de todos os outros temas, uma definição simples para agentes é um objeto ou criatura capaz de perceber e interagir com o ambiente, recebendo inputs e executando outputs. Na linguagem dos games, o jogador é um agente pois ele percebe o ambiente do jogo e pode interagir com o mesmo matando criaturas, pegando itens, os inimigos em alguns casos podem ser agentes, porque em alguns casos? pelo fato de existir inimigos pré-programados  para ações simples, como andar de um lado para o outro, ele não está percebendo o ambiente e nem fazendo alterações no mesmo, mas podem existir inimigos mais complexos e inteligentes, programados para atacar outras criaturas, atacar e perseguir o jogador e até mesmo se alimentar ou destruir plantas no ambiente, o mesmo vale para os NPCs, como o meu foco é programação, em alguns momentos trabalharei com algoritmos para deixar os inimigos e NPCs mais inteligentes e realistas de modo a deixar o jogo mais dinâmico e desafiador.
Os algoritmos genéticos ou evolutivos como também são conhecidos, são baseados na teoria da evolução das espécies por meio da seleção natural do biólogo naturalista Charles Darwin, o algoritmo pode ser aplicado em NPCs e inimigos, mas acho interessante trabalhar com ambientes que possuam diferentes tipos de animais ou criaturas, que possuam uma fauna própria que auto interaja com ela mesma e com o jogador, e uma forma de treinar e deixar essas criaturas mais realistas são os algoritmos evolutivos, capazes de fazer seus agentes se adaptarem ao ambiente e condições.


Conexionismo ou redes neurais é muito popular no campo de inteligencia artificial, o conexionismo pode ser usado em inimigos ou NPCs autônomos tornando esses agentes mais inteligentes. Nesse campo desenvolvemos um algoritmo que trabalha de forma similar ao nosso cérebro, onde temos representações de neurônios, sinapses e essas conexões formam a rede neuronal, o principio é o mesmo biológico.



Inteligencia de enxame é outra área muito interessante, nessa estudamos e reproduzimos nos agentes o comportamento de enxames (de formigas, abelhas, etc.), o objetivo aqui é fazer os agentes trabalhar em conjunto para obter melhores resultados em seus objetivos, comportamento de enxames ou grupos é algo extremamente comum e importante na natureza, por isso merece uma atenção especial e por isso vamos estuda-lo e reproduzir nos jogos e simuladores.



E finalmente a geometria de fractais, uma obra de arte presente na computação e na natureza, excelente para a criação de formas e ambientes, ela não será aplicada aos agentes mas sim ao ambiente, é uma forma de gerar mapas automáticos mais realistas.



Chegamos na computação cognitiva, uma tecnologia atual que tem ganhado muita atenção no mercado e na ciência. Como o nome sugere a computação cognitiva prevê a reprodução de processos cognitivos da mente humana em computadores, dentre os processos estão envolvidos visão computacional, comunicação e linguagem, aprendizado, comportamento dentre outros. Esses processos prometem não só um sistema mais inteligente, mas também autônomo, capaz de realizar tarefas que para nós são simples mas para uma maquina é praticamente impossível. Assim como a maioria dos campos relacionados a inteligencia estaremos aplicando esse aos inimigos e NPCs.
Para concluir, é importante ressaltar que quando falamos em inteligencia artificial (IA), podemos estar falando de quase todos os campos a cima, fora os fractais, todos são sub áreas de estudos em IA, e para fazermos um melhor uso desses recursos é importante entender os conceitos e ter familiaridade com programação e algoritmos, por isso se você não for da área de computação talvez sinta uma certa dificuldade, mas nos artigos que seguirão explicando a aplicando cada uma das áreas tentarei explicar da forma mais simples possível  portanto, não deixem de acompanhar o blog. O desenvolvimento de assets, ferramentas, softwares simuladores e jogos faz parte de um projeto maior que nomearei com o nome desse blog (ALGC), em breve trarei mais informações, bons estudos e até a próxima!

Referências para saber mais:

Andrade, B. C., Domingos, A. A., Barbosa, A. C. G., Garcia, M. C. M. (2016). "Avaliação do Algoritmo A* na Heurística de Path-Planning em Ambientes de Jogos Utilizando o Motor Unity3D". Sulcomp - Congresso Sul Brasileiro de Computação.

Baffa, M. F. O., Ramalho, M. M., Moreira, G. B. S. M., Machado, A. F. V. (2016). "Construindo Jogos de Sucesso: Uma Análise de League of Legends". SBC – Proceedings of SBGames 2016.

Passos, E. B., Silva Jr., J. R., Ribeiro, F. E. C., Mourão, P. T. (2009). "Tutorial: Desenvolvimento de Jogos com Unity 3D" VIII Brazilian Symposium on Games and Digital Entertainment Rio de Janeiro, RJ – Brazil, October, 8th-10th 2009.

de Paula, T. Z., Silva, A. B. P. (2015). "Desenvolvimento de Jogos Multplataforma em HTML5 com Phaser".

TCCs, Teses, Dissertações e Livros:


Júnior, C. C. M., Bizon, F. C. (2016) "Criação de uma desenvolvedora de jogos: da ideia ao mercado."  Trabalho de Conclusão de Curso.

Cardoso, K. C. L. (2014) "Advergames: aplicação de jogo digital como ferramenta de marketing". Trabalho de Conclusão de Curso de Pósgraduação Lato Sensu.

de Castro, L. N. (2010). "Computação Natural: Uma jornada ilustrada"







Este conteúdo é meramente informativo, e não aconselho seu uso como fonte de trabalhos acadêmicos ou científicos,  para isso sempre procuro disponibilizar no final da página no campo "Fontes" ou "Referências" links para artigos científicos, sempre busque informações em mais de um lugar.

Textos e ilustrações por Carol Salvato


Licença Creative Commons
Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Nenhum comentário:

Postar um comentário