Aula 9 TECNOLOGIA EM JOGOS DIGITAIS PROGRAMACAO E INTEGRACAO DE JOGOS I Marcelo Henrique dos Santos
Marcelo Henrique dos Santos Mestrado em Educação (em andamento) Pós-graduação em Negócios em Mídias Digitais (em andamento) MBA em Marketing e Vendas Especialista em games : Produção e Programação Bacharel em Sistema de Informação TECNOLOGIA EM JOGOS DIGITAIS PROGRAMAÇÃO PARA JOGOS Marcelo Henrique dos Santos www.marcelohsantos.com.br
Técnicas de GameAI: Uma visão geral - continuação Prof. Marcelo Henrique dos Santos
Técnicas de GameAI Movimentação Estacionando Vagando Desvio de Obstáculos Pathfinding Simples Desvio de Obstáculos A* Waypoints
Movimentação Estacionando d = distância calculada dmin = distância mínima desejada do alvo fdes = fator de desaceleração (< 1 e depende da dinâmica do jogo) Ex: 0.3 Vaprox = velocidade de aproximação Vorig = velocidade sem levar em conta a aproximação
Movimentação Vagando passar a impressão de movimento aleatório 1ª idéia variar direção do NPC aleatoriamente problema... não natural - movimentos bruscos solução...
Movimentação Vagando a dinâmica do movimento é controlada por rv, dv e max_dram
Movimentação Desvio de Obstáculos retângulo de detecção ou outras formas. ex: largura igual ao raio de batida quanto mais rápido o veículo mais longo o retângulo fica
Movimentação Desvio de Obstáculos 1º passo achar o ponto de intersecção mais próximo... A. desconsiderar obstáculos fora do alcance do retângulo de detecção B. desconsiderar obstáculos atrás, converter coordenadas de obstáculos com possível colisão para coordenadas locais e verificar coordenada y C. verificar se obstáculos se sobrepõe ao retângulo, expandir raio do obstáculo por metade da largura do retângulo e verificar coordenada
Movimentação Desvio de Obstáculos D. achar o ponto de intersecção mais próximo
Movimentação Desvio de Obstáculos 2º passo calcular força de frenagem e força lateral
Movimentação Desvio de Obstáculos caso 3D... obstáculos = esferas retângulo = cilindro
Pathfinding Pathfinding, ou busca de caminhos é um dos problemas mais comuns no desenvolvimento de jogos, e está presente na maioria dos gêneros. patrulhamento desvio de obstáculos perseguição planejamento de trajetória mirar (se tem obstáculo deve ser previsto) mover-se e atirar
Pathfinding Caso Simples pode-se utilizar algoritmos de perseguição e fuga abstração: ponto inicial = predador ponto final = presa problema... obstáculos
Verificar textos deste slide que estão Atrás do código e eu não consegui decifrar...) Pathfinding Desvio de Obstáculos Estratégias pseudo-código pathfinding simples + desvio Início ENQUANTO não chegou ao destino ESCOLHA um próximo passo rumo ao destino SE o local está vazio, mova-se até ele SENÃO escolha outra direção segundo estratégia de desvio de obstáculos FIM ENQUANTO Fim Contornar Obstáculos obstáculos maiores critério de saída do modo contorno...
Pathfinding Waypoints utilização de rotas interligando os pontos principais em um mapa é uma técnica usada em jogos. cada nó do grafo representa um waypoint que contém informações sobre como chegar até os nós vizinhos. exemplo: jogos de corrida. Na pista pode ser definidas diversas rotas com características diferentes. Cada carro começa seguindo uma rota e muda quando necessário (ex: carros na sua frente)
Pathfinding A* cálculo de caminho ótimo + desvio de obstáculos modelagem: (quadrado, retângulos, hexágonos, outros) utilização de grafo (vizinhança) cada ladrilho = um nó no grafo
Pathfinding A* A* mantém duas listas: nós abertos: armazena todos os nós que precisam ser verificados, nós fechados: armazena os nós que não precisam mais ser verificados no momento.
Pathfinding A* o ponto crucial aqui é escolher qual dos nós fará parte do caminho a ser percorrido. função de avaliação F(n) que é o resultado da soma F(n) = G(n) + H(n) onde G(n) custo do nó inicial ao nó candidato ex: 10 quadrado horizontal ou vertical e de 14 diagonal(~10* 2) e H(n) é a função heurística, indica o custo estimado do nó candidato até o destino final ex: método Manhattan, número de quadrados horizontal e vertical até o alvo, ignorando movimento diagonal, e ignorando qualquer obstáculo que pode estar no caminho
Pathfinding A* 1. coloca-se o nó inicial na lista de abertos; 2. nós adjacentes (filhos) também na lista de abertos, se não estiverem, menos obstáculos ou nós da lista de fechados; 3. coloca-se o nó inicial na lista de nós fechados;
Pathfinding A* 4. se nó adjacente está na lista aberta, verificar se o G agora é mais baixo do que o já na lista se não for, não fazer nada; se for, trocar o pai do nó adjacente para o nó selecionado e recalcular o F; 5. repetir até nó-destino ser adicionado à lista de abertos (algoritmo termina em sucesso ), ou a lista de abertos fique vazia (falha na busca de um caminho).
Pathfinding A* Exemplo legenda: verde = lista aberta azul = lista fechada
Algoritmos de busca em grafo: B* Bellman-Ford algorithm Best-first search Bidirectional search Breadth-first search D* Depth-first search Depth-limited search Dijkstra's algorithm Floyd Warshall algorithm Hill climbing Iterative deepening depth-first search Johnson's algorithm Uniform-cost search
Algoritmo MiniMax Faz uma caminhamento em profundidade completo da árvore! Se a profundidade é m e em cada estado existem b jogadas possíveis, a ordem de complexidade é O(bm) Ou seja esse algoritmo não é prático para jogos reais Mas serve para análise matemática e como base para algoritmos mais eficientes
Multiplayer games O MiniMax pode ser estendido para jogos com múltiplos jogadores Uso de um vetor de utilidades Alianças Podem ocorrer naturalmente no processo de maximizar a função de utilidade
Qual o problema com o MiniMax?
Alpha-Beta Pruning Problema com o MiniMax # de estados é exponencial Pruning = Poda Não examinar grandes partes da árvore, diminuindo assim o custo Alpha-Beta Prunning Retorna a mesma ação do MiniMax, mas elimina caminhos que não influenciam a decisão
α-β pruning example
α-β pruning example
α-β pruning example
α-β pruning example
α-β pruning example
Alpha-Beta Pruning a = o maior valor já encontrado no caminho (melhor alternativa p/ MAX) ß = o menor valor já encontrado no caminho (melhor alternativa p/ MIN) Se v é pior que alpha, MAX vai evitá-lo
Alpha-Beta Pruning A eficiência do algoritmo depende da ordem em que os nodos são examinados
Decisões Imperfeitas, em Tempo Real Minimax mesmo c/ Alpha Beta Prunning não é factível para jogos complexos Solução: Parar a busca antes de chegar ao final É necessário: Função de Avaliação (Evaluation Function): fornece uma estimativa da utilidade daquele estado (Heurística) Teste de Parada (Cutoff Test): decide em quando parar a busca
Funções de Avaliação Devem tentar manter a mesma ordenação da função de utilidade final Não podem demorar muito Devem estar relacionadas com as chances de ganhar o jogo Chances? Jogo é determinístico!? Incerteza computacional ao invés de incerteza da informação
Funções de Avaliação Análise de características (features) do estado corrente Divisão em classes de equivalência Conjuntos de estados com características similares Para cada classe, determina-se por experiência: %Vitórias, %Empates, %Derrotas Função de avaliação é calculada como uma média ponderada. Ex. 72% Vitória, 20% Derrota, 8% empate Eval(S) = (0.72 x 1) + (0.2 x -1) + (0.08 x 0) = 0.52 Requer muitas classes e experiência...
Funções de Avaliação Uma forma mais fácil é dar valor diretamente as features Xadrez: Peão = 1, Cavalo / Bispo = 3, etc... Estrutura de peões, Proteção do rei, etc... A função de avaliação é computada através de uma combinação linear ponderada Eval(S) = w1.f1 (s) + w2.f2 (s) +... + wn.fn (s) Funções não lineares também podem ser usadas Um par de bispos tem mais valor que o dobro de um só Leva em consideração as outras peças De novo, experiência / aprendizado é necessário
Teste de Parada If Cutoff-Test(State, Depth) return Eval(state) Forma mais comum: profundidade fixa Problemas: e se na próxima jogada...
Teste de Parada A função de avaliação somente deve ser aplicada a estados que não vão sofrer mudanças bruscas de valor Quiescence Search Efeito Horizonte: jogada catastrófica que vai acontecer inevitavelmente em um futuro próximo, fora do horizonte de busca
Poda Singular Extensions Ultrapassar a profundidade limite para ações que são claramente melhores Na prática, diminui o branching factor (poda) Forward Prunning Ignorar certos movimentos possíveis Humanos fazem isso inconscientemente Não há garantias... Interessante para movimentos simétricos
Xadrez na Prática Suponha uma função de avaliação e um PC que consiga investigar 10^6 nodos/s 200 x 10^6 nodos por jogada (3 minutos) Branching Factor: 35: 35^5 = 50 x 10^6 Minimax = 5 jogadas (jogador mediano) Alpha-Beta = 10 Jogadas (expert) Para virar um Grande-Mestre: Função de avaliação bem ajustada Banco de jogadas (abertura e término) Supercomputador...
Jogos Não-Determinísticos (sorte) Exemplo: Gamão As jogadas possíveis são determinadas depois que se jogam os dados Não é possível construir uma árvore como no caso do xadrez e aplicar o minimax Solução: Incluir nodos intermediários com as chances Algoritmo: ExpectiMinimax