Inteligência Computacional para Jogos Eletrônicos Prof. Alex F. V. Machado [email protected] Game IA? “Anything that gives the illusion of intelligence to an appropriate level, thus making the game more immersive, challenging, and, most importantly, fun, can be considered game AI.” • Física? Detecção de colisão? Pathfinding? Papéis da IA em Jogos • • • • • • • • Adversários Aliados Personagens de apoio NPC’s (Non-player Character) Comentaristas Controle de câmera Geração de fases Nivelamento da dificuldade Histórico • 1770: “O turco”, criado por Wolfgang von Kempelen, que supostamente jogava xadrez com perfeição. Histórico • Até a década de 1970, os jogos possuíam apenas Versus Mode • A indústria percebeu que a inclusão de um modo para um jogador poderia atrair um público maior, desta forma, aumentando os lucros • Técnicas já conhecidas no meio acadêmico passaram a ser utilizadas para simular o comportamento humano Histórico • 1978: Space Invaders implantou as primeiras entidades inteligentes em jogos Histórico • 1980: Pac-man conta com movimentos padronizados dos inimigos, porém cada fantasma tem um modo diferente de caçar o jogador Histórico • 1990: O primeiro jogo de estratégia em tempo real, Herzog ZWei, é lançado. A busca de caminho apresentada nesse jogo era de baixa qualidade Histórico • 1996: BattleCruiser: 3000AD é publicado como o primeiro jogo a utilizar redes neurais comercialmente Histórico • 1998: Half-Life é lançado como a melhor Game IA até então • 2001: Black & White é alvo da mídia a respeito de como as criaturas aprendem com as decisões do jogador Técnicas de Game IA • Determinística “Deterministic behavior or performance is specified and predictable. There's no uncertainty.” • Não-Determinística “Behavior has a degree of uncertainty and is somewhat unpredictable (the degree of uncertainty depends on the AI method employed and how well that method is understood).” A Indústria dos Games • O setor de jogos é uma área em crescente ascensão que fatura no bilhões de dólares. • É hoje um dos setores mais rentáveis do entretenimento. • Área com excelente futuro para o desenvolvedor de software. Empresa: Confidencial Área de atuação: Desenvolvimento Oportunidade: Desenvolvedor Java, web e Android A vaga para programador é para desenvolvimento em Java, web e Android, e é desejável ter familiaridade com CC++ e JavaScript, conhecimento de PHP e experiência de desenvolvimento em Android ou iOS. A contratação é em regime CLT, e a Tectoy Studios oferece ainda benefícios como vale-refeição, plano de saúde completo e plano odontológico optativo, além de um dos melhores ambientes de trabalho do mercado. O salário inicial é a partir de R$ 2,3 mil, dependendo da experiência prévia do candidato na área de atuação. Pesquisado em 1 de Agosto de 2011 Criação dos jogos • Hoje a área de desenvolvimento de jogos é enorme, tendo muitas áreas técnicas e artísticas envolvidas. • No mercado atual, cada membro da equipe é especialista em alguma coisa. • Mas independente da área, eles devem possuir: talento artístico para produzir um bom enredo, música ou gráficos, talentos como refatoração do código, padrões de projeto, trabalho em equipe e bons conhecimentos técnicos. • E claro conhecimento das mais variadas áreas, como matemática e física, inteligência artificial, computação gráfica, redes e sistemas distribuídos, otimização, etc... Seqüência de criação de um jogo • • • • • • • • Definição da idéia Criação de um game design (planejamento do jogo) Criação do roteiro Esboçando concept-arts (artistas 2D e 3D) Programação e modelagem dos esboços Criação de efeitos sonoros e trilha sonora. Testes Divulgação (marketing) Criadores de jogos • • • • • • • • • Desenvolvedor, Designer, Engenheiro de software, Programadores, Character/Level design, Escritores, Roteristas, Músicos, ... e varios outros profissionais. Linguagens mais usadas na criação de jogos: • • • • • • • • • • • • C++, C, C# e XNA, PureBasic, Python, Java, Linguagens de Script como Lua, .NET, Delphi, Flash, Ferramentas de autoria ... e outras. Como anda a IA nos Jogos • Os jogos estão chegando a um patamar artístico incrível, com gráficos extraordinários, simulando a física real e tendo uma inteligência artificial bem convincente. • Com o avanço dos jogos, é cada vez mais comum o uso das mais diversas técnicas de inteligência artificial. • Antigamente os desenvolvedores pouco se preocupavam com a IA, preocupando-se mais com os gráficos do game e sua jogabilidade. Hoje o cenário esta mudando. A Inteligência Artificial está cada vez mais forte no desenvolvimento de um jogo. Proporcionando principalmente uma maior diversão ao jogo. Mas o que é afinal AI ? • Inteligência artificial em jogos é o uso de técnicas que possibilitam a implantação de rotinas complexas de tomada de decisões no software. Tudo isso para encontrar caminhos, tomar decisões, agir de acordo com a situação, aprender. A inteligência artificial tem grandes aplicações em jogos, ao tentar atribuir ao computador um comportamento humano. Técnicas para Programar AI em Jogos • • • • • • • • • • • • • • • • • • Máquinas de Estado Maquinas de Estado baseada em Pilha Lógica Fuzzy Uso de scripts Sistema de mensagens Ferramentas de autoria Algoritmos Genéticos Combinação de física com grafos Matrizes e Árvores de Decisão Sistemas Baseados em Regras Steering Behaviors AlgoritmoPath-finding - A* Sistema baseado em planejamento Redes Neurais Sistemas baseados dados Uso de Agentes Combinação de física com grafos Vida artificial Técnicas de Inteligência Artificial em Jogos - Máquinas de Estado Finita • FSM - Finite State Machine • Uma máquina de estados é basicamente composta por um conjunto de estados e um conjunto de regras de transição entre estes estados. Ou seja, o personagem está configurado com uma série de regras e possui regras de transição para ver se o personagem deve alterar o estado inicial, como por exemplo, se ele viu um oponente e se vale a pena ir atrás dele. • As desvantagens em utilizar as FSM são os comportamentos repetitivos, caso uma situação se repita. E a questão do desempenho, pois quanto mais complexo for o ambiente, maior será o número de estados e transições na qual o FSM terá de prever.Aumentando seu custo. Técnicas de Inteligência Artificial em Jogos - Agentes • Um agente inteligente pode ser um personagem na qual pode raciocinar e tomar suas próprias decisões, baseadas tanto em regras quanto no cenário do jogo em si. • Além disso, é possível criar emoções que podem deixar um personagem mais realista. • Uma abordagem interessante para se utilizar em agentes é a arquitetura BDI, baseada em 3 conceitos: – Crenças, desejos e intenções. Técnicas de Inteligência Artificial em Jogos - Lógica Fuzzy • Lógica Difusa é uma generalização da lógica booleana que admite valores lógicos intermediários entre a falsidade e a verdade (como o talvez). • A lógica difusa normalmente está associada ao uso de uma teoria de conjuntos fuzzy. • A lógica fuzzy permite representar num sistema computacional valores onde lógicas clássicas não conseguiriam representar, como “pouca comida”, “muito perto”, e outros eventos não contáveis (ou imprecisos). • Uma estratégia interessante para se utilizar é a mistura entre a lógica Fuzzy e as FSMs. Técnicas de Inteligência Artificial em Jogos - Algoritmos de Pathfinding • Os personagens precisam criar rotas, e não podem fazer coisas que comprometam seu funcionamento, como, por exemplo, atravessar paredes ou andar em cima de um lago. • Por isso, os programadores aplicam algoritmos de pathfinding (procura por caminhos). • Este tipo de lógica é importante para que o personagem faça uma rota satisfatória e normalmente mais curta, e não ande a esmo pelo cenário. • Além disso, o algoritmo deverá calcular possíveis novos obstáculos que o personagem poderá se deparar, como uma nova parede, outros personagens, possíveis projéteis que o podem atingir (como uma bala de uma pistola), e qualquer variável do ambiente que possa interromper a ação deste personagem. Técnicas de Inteligência Artificial em Jogos - Redes Neurais • São sistemas não lineares que imitam o mecanismo de processamento do cérebro humano. • Elas são redes computadorizadas onde a sua estrutura é similar a um cérebro humano, tendo nós de rede (neurônios) e conexões entre os nós. • A vantagem de usar uma rede neural é que a rede pode aprender e armazenar conhecimento para uso posterior. • Num game de futebol, a aplicação de redes neurais pode ser utilizada para que jogadores de futebol aprendam a interceptar a bola durante uma partida. Técnicas de Inteligência Artificial em Jogos - Algoritmo genético • Um algoritmo genético é uma técnica de procura utilizada na ciência da computação para achar soluções aproximadas em problemas de otimização e busca. • Algoritmos genéticos são uma classe particular de algoritmos evolutivos que usam técnicas inspiradas pela biologia evolutiva como hereditariedade, mutação, seleção natural e recombinação. • Algoritmos genéticos diferem dos algoritmos tradicionais de otimização em basicamente quatro aspectos: – Se baseiam em uma codificação do conjunto das soluções possíveis, e não nos parâmetros da otimização em si; – Os resultados são apresentados como uma população de soluções e não como uma solução única; – Não necessitam de nenhum conhecimento derivado do problema, apenas de uma forma de avaliação do resultado; – Usam transições probabilísticas e não regras determinísticas Sistemas Baseados em Regras Técnicas de Inteligência Artificial em Jogos - • Trata-se de um sistema de apoio à decisão que procura representar o modo de raciocínio e o conhecimento utilizado por especialistas na resolução de problemas no seu âmbito de especialidade. • É definido através de um conjunto de parâmetros e um conjunto de regras que trabalham sobre estes parâmetros, de modo que durante a tomada de decisão, essas regras são então processadas. Sistema Baseado em Planejamento Técnicas de Inteligência Artificial em Jogos - • O planejamento de IA aplicado a jogos digitais é o armazenamento de “planos de ação” e fazer com que o usuário escolha o plano mais adequado numa determinada situação. Também pode permitir ao personagem decidir qual estratégia ele pode utilizar (além do próprio personagem criar a sua estratégia). • Uma vantagem desta técnica é que as ações do personagem não são tão repetitivas (diferente dos personagens com o sistema de Máquina de estado Finita, por exemplo).