Um jogo de corrida em ambiente virtual Apresentação de Projeto de Graduação Aluno: Túlio Ligneul Santos DRE: 106017420 Orientador: Ricardo Marroquim Introdução Ambiente de Desenvolvimento Movimentação dos Carros Pista Tipo I Pista Tipo II Controlador Heurístico Controlador Neural Demonstração Conclusões Trabalhos Futuros Motivação: Industria de jogos em crescimento: ▪ Movimenta bilhões de dólares apenas nos Estados Unidos [10]. Principais atrativos dos jogos atuais: ▪ Interatividade e realismo: ▪ Importantes para a imersão do jogador. Objetivo: Implementar uma versão preliminar jogável de um jogo de corrida e analisar seus componentes; Constituir uma fonte de estudo para o desenvolvimento de jogos. Metodologia: Preocupação com a imersão do usuário: ▪ Imersão sensorial (audiovisual): ▪ Áudio 3D; ▪ Efeitos gráficos (e.g. Cel Shading). ▪ Imersão baseada em desafios: ▪ Inteligência, ou competitividade, dos oponentes: Busca-se um controlador capaz de, pelo menos, completar o percurso de uma volta da corrida. ▪ Oponentes humanos: Partida multijogador em rede; ▪ Realismo físico. ▪ Imersão imaginativa: ▪ Gerada pela narrativa, personagens e ambientação; ▪ Não faz parte do foco do projeto. Game engines ( ou Motores de jogos): Fornecem ferramentas de desenvolvimento e componentes reusáveis; Costumam operar através de um sistema integrado de desenvolvimento (IDE) : ▪ Busca permitir que se produzam jogos de um modo rápido e simplificado. Panda3D [22]: ▪ Criada pela Disney e mantida por um grupo de pesquisa da Universidade Carnegie Mellon; ▪ Gratuita; ▪ Fórum ativo; ▪ Bastante completa: ▪ Simulações físicas; ▪ Técnicas avançadas de renderização; ▪ Monitoramento do desempenho; ▪ Alto grau de customização; Game engines ( ou Motores de jogos): Open Dynamics Engine (ODE) [23] ▪ Engine de física. ▪ Integrada com o Panda3D. ▪ Permite maior controle das rotinas de simulação. ▪ Viabiliza a construção de efeitos mais complexos. Biblioteca neat-python [11] Mesma linguagem de programação utilizada pelo Panda3D; Base para a inteligência artificial dos oponentes; Treinamento de redes neurais: ▪ Através da neuroevolução com crescimento topológico (NEAT) [2]. Carrega-se o modelo 3D do veículo; Cria-se um corpo do ODE para o modelo: ▪ Utilizado na simulação física; ▪ Define-se a massa do corpo/body; ▪ Distribuída na forma de uma caixa; ▪ Densidade uniforme; ▪ Envolve todo o volume do modelo. Associa-se uma geometria ao corpo: Utilizada na detecção de colisão; Forma de caixa delimitadora: ▪ Envolve todo o volume do modelo; ▪ Detecção de colisões entre carros ou com o cenário. Cria-se um corpo do ODE para cada roda: Utilizada na simulação física; Define-se a massa de cada corpo/body; ▪ Distribuída em forma de cilindro; ▪ Densidade uniforme; ▪ Envolve todo o volume de sua respectiva roda. Define-se uma superfície/surface para as rodas: ▪ Define atributos físicos; ▪ Ex: coeficiente de atrito. Associa-se uma geometria ao corpo de cada roda: Para detecção de colisão: Geometrias em forma de esfera: ▪ Envolve todo o volume do roda; ▪ Detecção de colisões entre as rodas e o chão. Resultado: Definem-se as articulações: Ligam corpos distintos; Permitem o movimento conjunto entre os corpos das rodas e do carro; Permite rotação e alteração da direção das rodas; Simulam a suspensão do carro. Retirado do Manual do ODE[17]. Deslocamentos: Para frente: ▪ Uma força é aplicada ao corpo do carro no sentido para frente; ▪ Rodas se movem devido às articulações: ▪ Rotacionadas sobre o eixo horizontal devido ao atrito com o chão. Para trás ou frenagem: ▪ Uma velocidade angular e uma força são aplicadas às rodas no sentido para trás. ▪ Rodas se movem devido ao atrito com o chão: ▪ Articulações entre as rodas e o corpo do carro fazem com que o carro se mova. Em curva: ▪ Realizado através de mudanças na direção das rodas frontais. ▪ Rotacionadas sobre o eixo vertical. ▪ Deslocamento para frente ou para trás faz com que o carro realize uma curva. Efeitos sonoros: Aceleração do motor; Motor ligado; Freio. Terreno 3D gerado através um mapa de altura: Imagem em escala de cinza; Cores representam deslocamentos em altura: ▪ Preto é altura mínima e branco a máxima; Textura aplicada sobre a topologia gerada. Um Shader simula um plano de água que reflete o cenário. Idealmente: permite corrida em terreno altamente irregular; Não foi encontrada uma configuração de parâmetros do ODE para suportar tal cenário; Os carros escorregavam ao tentar subir uma pequena elevação. Terreno projetado sobre o plano XY; Menu principal do jogo: Demonstração do efeito visual planejado. Delimitação da pista sobre o cenário: Textura com o desenho do formato da pista . Teste do jogador sobre a pista: Mapeamento direto: ▪ Entre coordenadas XY de mundo e posição do pixel na imagem do mapa da pista. Verifica a cor do pixel correspondente. Aplica-se uma penalidade por estar fora da pista Definição do centro de checkpoints: Definidos empiricamente: ▪ Distribuídos de modo uniforme e centrados ao longo da pista. Checkpoints: Ativado quando um jogador está a um distância mínima de seu centro. Acompanhamento do progresso dos jogadores; Definição da colocação de cada jogador na corrida. Modelo 3D : Concatenação de unidades Numeração das unidades: ▪ Define a ordem de cada unidade na pista. Centros geométricos das unidades: ▪ Definem as posições dos checkpoints. Checkpoints: ▪ Planos orientados de acordo com a pista. Suposições: Percurso formado pelos checkpoints é um bom caminho. Ajuste incremental da direção do jogador para seguir este caminho resulta em um bom controlador. Jogador se move para frente: Realizam-se pequenos ajustes na direção do movimento em cada iteração. Em cada iteração: ▪ θ >0: ▪ Checkpoint à direita do carro ; ▪ Virar para a direita. ▪ θ < 0: ▪ Checkpoint à esquerda do carro; ▪ Virar para a esquerda. ▪ θ = 0: ▪ Checkpoint à frente; ▪ Continuar em frente. Direção do movimento Checkpoint θ Rede Neural: Camada de Entrada Camada de Intermediária (ou oculta) Camada de Saída Rede Neural: Camada de Intermediária (ou oculta) Camada de Entrada Camada de Saída Modelo Neural: Pesos Sinápticos u1 1 u2 2 u3 3 u4 4 Junção Aditiva u i i Função de Ativação z f iui Saída y 8 nós de entrada, referentes à: Sensores a -90, -60, -30, 30, 60 e 90 graus; Sensor frontal especializado: ▪ Retorna o maior valor entre os obtidos por sensores a -10, 0 e 10 graus; ▪ Procura detectar mais precisamente o final de uma curva. Velocidade instantânea do jogador. 2 nós de saída, onde: Variam entre -1 e 1; Saída Y1: ▪ Andar para frente ou para trás. Saída Y2: ▪ Virar para a direita ou esquerda. Camadas intermediárias: Determinadas pelo algoritmo de treinamento. Função Objetivo / Função de Aptidão: Procura-se a maximizar; F (controlador) = (C1 nCheckPointsReached - distance) + C2 avgSpeed; ▪ Maior progresso geral com a menor distância, maximizando a velocidade; ▪ C1 e C2 definidos empiricamente para ajustar a ordem de grandeza das variáveis. População de 100 indivíduos; Quantidade máxima de indivíduos em qualquer momento do treinamento. 100 Iterações ou épocas do treinamento; Para cada iteração do treinamento: Controladores guiam um jogador durante 500 iterações do Panda3D. Calculam-se as aptidões de cada controlador; Ao final, o indivíduo com melhor aptidão é escolhido; Rede obtida é salva; Pode ser carregada durante o jogo. Neuroevolução com crescimento topológico NeuroEvolution of Augmenting Topologies (NEAT); Utiliza algoritmos genéticos para treinar uma rede neural. Inicia com a menor topologia possível: ▪ Entradas ligadas diretamente as saídas. Crescimento incremental da topologia da rede: ▪ Dada pela inserção ou alteração de pesos, conexões e nós das camadas intermediárias; ▪ Somente as estruturas significantes são mantidas; ▪ Buscas em espaços com complexidade incremental. Especiação: ▪ Protege inovações estruturais. Ao final de cada iteração: Escolhem-se os indivíduos mais aptos de cada espécie; Realiza-se a reprodução dos indivíduos. Representação das Características do Individuo Genoma(Genótipo): ▪ Genes dos Nós: Nó 1 Entrada Nó 2 Entrada Nó 3 Entrada Nó 4 Saída Nó 5 Oculto ▪ Genes das Conexões: Inovação 1 Entrada: 1 Saída: 4 Peso: 0.7 Habilitado Inovação 2 Entrada: 2 Saída: 4 Peso: 0.5 Desabilitado Inovação 3 Entrada: 3 Saída: 4 Peso: 0.5 Habilitado Inovação 5 Entrada: 5 Saída: 4 Peso: 0.4 Habilitado Inovação 6 Entrada: 1 Saída: 5 Peso: 0.6 Habilitado Inovação 11 Entrada: 4 Saída: 5 Peso: 0.6 Habilitado Inovação 4 Entrada: 2 Saída: 5 Peso: 0.2 Habilitado Representação das Características do Individuo Fenótipo: 4 5 3 1 2 Operador de Crossover / Cruzamento: Pai 1 Inovação 1 Entrada: 1 Saída: 4 Habilitado Inovação 2 Entrada: 2 Saída: 4 Desabilitado Inovação 3 Entrada: 5 Saída: 4 Habilitado Pai 2 Inovação 1 Entrada: 1 Saída: 4 Habilitado Inovação 2 Entrada: 2 Saída: 4 Desabilitado Inovação 3 Entrada: 5 Saída: 4 Desabilitado Inovação 4 Entrada: 1 Saída: 5 Habilitado Prole Inovação 1 Entrada: 1 Saída: 4 Habilitado Inovação 2 Entrada: 2 Saída: 4 Desabilitado Inovação 3 Entrada: 5 Saída: 4 Habilitado Inovação 4 Entrada: 1 Saída: 5 Habilitado Inovação 5 Entrada: 2 Saída: 5 Habilitado Inovação 6 Entrada: 3 Saída: 5 Habilitado Inovação 5 Entrada: 2 Saída: 5 Habilitado Inovação 6 Entrada: 3 Saída: 5 Habilitado Operador de Crossover / Cruzamento: 4 5 5 1 2 4 4 5 1 2 3 1 2 3 Mutação por inclusão de um novo nó. Antes Inovação 1 Entrada: 1 Saída: 4 Habilitado Inovação 2 Entrada: 2 Saída: 4 Desabilitado Inovação 3 Entrada: 5 Saída: 4 Habilitado Inovação 5 Entrada: 2 Saída: 5 Habilitado Depois Inovação 1 Entrada: 1 Saída: 4 Desabilitado Inovação 2 Entrada: 2 Saída: 4 Desabilitado Inovação 3 Entrada: 5 Saída: 4 Habilitado Inovação 5 Entrada: 2 Saída: 5 Habilitado 4 4 6 5 1 2 Inovação 6 Entrada: 1 Saída: 6 Habilitado 1 5 2 Inovação 7 Entrada: 6 Saída: 4 Habilitado Pista Tipo I Pista Tipo II Panda3D e ODE: Forneceram meios de se efetuar desde a criação de uma janela até a realização de simulações de física. Neuroevolução com crescimento topológico (NEAT): Permite construir controladores de carros em ambientes virtuais. Não é necessário se preocupar com a quantidade de camadas da rede neural: ▪ Não é preciso testar diferentes configurações topológicas de modo manual. Rede de baixa complexidade: ▪ Apenas três nós intermediários entre as entradas e as saídas. Controlador neural pouco eficiente: Guia um carro para completar pelo menos uma volta; Facilmente derrotado pelo usuário ou pelo jogador controlado pelo método heurístico; Cardamone et al. [3] construiu um controlador com bom desempenho através do mesmo método: ▪ Rede obtida pode ser aprimorada. Passo inicial para a construção de um jogo mais complexo: Base para estudo e aprendizagem de fundamentos e questões de implementação. Melhor imersão do usuário no jogo: Buscar mais fatores de caráter sensorial, baseado em desafios, ou imaginativo, por exemplo: ▪ Ambientação de cada corrida, introduzindo outros atores no mundo, fora os jogadores e a pista. ▪ Animais, pessoas, som do vento, objetos, como construções, etc. Novo estudo para tornar mais eficiente o controlador neural Interagir com o usuário e não somente guiar um carro. Abordagem mais competitiva pra o controlador neural: Constituído de dois controladores, ou duas redes neurais ▪ Um para guiar o carro para completar voltas ▪ Outro para interação com o jogador, impedindo ou realizando uma ultrapassagem. Gerador de Pistas Tipo II Pistas geradas pela concatenação de diversas unidades em um mesmo plano. Permite a criação de conteúdo personalizado. [2] Stanley, K. O., Miikkulainen, R. “Efficient Reinforcement Learning through Evolving Neural Network Topologies”, In: Proceedings of the Genetic and Evolutionary Computation Conference (GECCO), 2002. [3] Cardamone, L., Loiacono, Daniele, Lanzi, P. L, “Evolving Competitive Car Controllers for Racing Games with Neuroevolution”, In: Proceedings of the Genetic and Evolutionary Computation Conference (GECCO), 2009. [4] Togelius J., Lucas, S. M., Nardi, R. de, “Computational Intelligence in Racing Games”, Studies in Computational Intelligence, v. 71/2007, pp. 39-69, 2007. [7] Ermy, L., Mäyrä, F., “Fundamental Components of the Gameplay Experience: Analysing Immersion”. In: Proceedings of DiGRA 2005 Conference: Changing Views – Worlds in Play, 2005. [10] Entertainment Software Association, “The Entertainment Software Association – Industry Facts”, http://www.theesa.com/facts/index.asp, 2010, (Acesso em 11/11/2010). [11] neat-python, “neat-python - Project Hosting on Google Code”, http://code.google.com/p/neat-python/, 2010 (Acesso em 11/11/2010). [17] Open Dynamics Engine (ODE) Community Wiki, “Manual (All) - ODE Wiki”, http://opende.sourceforge.net/wiki/index.php/Manual_(All)#Hinge-2 (Acesso em 02/12/2010). [22] Panda3D, “Panda3D – Free 3D Game Engine”, http://www.panda3d.org/, (Acesso em 03/12/10). [23] Open Dynamics Engine, “Open Dynamics Engine – home”, http://www.ode.org, (Acesso em 05/12/10). Um jogo de corrida em ambiente virtual Apresentação de Projeto de Graduação Aluno: Túlio Ligneul Santos DRE: 106017420 Orientador: Ricardo Marroquim