29

Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Embed Size (px)

Citation preview

Page 1: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile
Page 2: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Física e Inteligência Artificial para jogos utilizando XNA

Nome Roger TangEmpresaGLU Mobile

Page 3: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

AgendaFísica

Primeira lei de Newton

Modelando Velocidade, Atrito e Aceleração

Impulso e Quantidade de Movimento

Colisão e Conservação de energia

Exemplo

Engines de Física

Inteligência ArtificialChase – Perseguição

Evade – Fuga

Exemplos

Page 4: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Física

Page 5: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Conceito de amostragemConceito de amostragem É necessário armazenar o tempo transcorrido entre duas amostragens para efetuar uma simulação física.A amostragem temporal do jogo (Frames por segundo) não é contínua.A variação temporal entre duas interações de “Update” não pode ser considerada 1 e deve ser calculada a cada interaçãoO XNA possui a classe auxiliar GameTime que permite calcular o tempo transcorrido entre duas interações

Page 6: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Primeira Lei de NewtonLei da Inércia

Na ausência de forças, um corpo em repouso continua em repouso, e um corpo em movimento, continua em movimento retilíneo uniforme (MRU).

ModeloEm uma simulação onde existe uma esfera rolando sobre uma superfície a força que faz com que o corpo desacelere e perca velocidade é a força de atrito. Esta força é contrária ao vetor velocidade.

velocidadeatrito

Page 8: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Modelando Velocidade em XNAA velocidade é a derivada do espaço no

tempo

tvssdt

dsv if

Codificando em XNAprivate Vector3 posicao = new Vector3(-200, 0, 0);private Vector3 velocidade = new Vector3(1, 0, 0);

public override void Update(Microsoft.Xna.Framework.GameTime gameTime){

// Calcula Dt - Tempo transcorrido float timeDelta = (float)gameTime.ElapsedGameTime.TotalSeconds;

// Calcula nova posição. sf = si + vDtposicao += velocidade * timeDelta;

}

Page 9: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Modelando Atrito em XNAO atrito é força contrária ao movimento

velocidadeatrito

private Vector3 posicao = new Vector3(-200, 0, 0);private Vector3 velocidade = new Vector3(1, 0, 0);const float coeficienteAtrito = 0.1f;

public override void Update(Microsoft.Xna.Framework.GameTime gameTime){

// Calcula Dt - Tempo transcorrido float timeDelta = (float)gameTime.ElapsedGameTime.TotalSeconds;

// Calcula atrito. Vetor contrário a velocidadeVector3 direcaoAtrito = -velocidade;

direcaoAtrito.Normalize(); direcaoAtrito *= coeficienteAtrito;

// Calcula nova velocidadevelocidade += direcaoAtrito;

// Calcula nova posição. sf = si + vDtposicao += velocidade * timeDelta;

}

Page 10: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Modelando Aceleração em XNAA aceleração é a derivada da velocidade no

tempotavv

dt

dva if

Codificando em XNAprivate Vector3 posicao = new Vector3(-200, 0, 0);private Vector3 velocidade = new Vector3(0, 0, 0);private Vector3 aceleracao = new Vector3(1, 0, 0);

public override void Update(Microsoft.Xna.Framework.GameTime gameTime){

// Calcula Dt - Tempo transcorrido float timeDelta = (float)gameTime.ElapsedGameTime.TotalSeconds;

// Calcula nova velocidade. vf = vi + vDtvelocidade += aceleracao * timeDelta;

// Calcula nova posição. sf = si + vDtposicao += velocidade * timeDelta;

}

Page 11: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Impulso e Quantidade de MovimentoPara o caso do exemplo anterior, como a aceleração é

constante, a velocidade cresce exponencialmente a cada ciclo de “Update”. Logo a velocidade tende ao infinito. Como queremos apenas alterar a velocidade em um curto espaço de tempo, vamos aplicar um Impulso

No nosso modelo vamos aplicar o Impulso no intervalo de tempo de apenas um ciclo de “Update”. Desta forma assim que processarmos a nova velocidade vamos zerar o valor do impulso.

Para o nosso exemplo, o Impulso continuará sendo aplicado enquanto o botão do “gamepad” estiver sendo pressionado

m

Ivv

Pvmtt

vmI

tmatFI

if

Page 12: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Modelando Impulso em XNAO Impulso é aplicado em apenas em ciclo de

updateprivate Vector3 posicao = new Vector3(-200, 0, 0);private Vector3 velocidade = new Vector3(0, 0, 0);private Vector3 Impulso = new Vector3(1, 0, 0);

public override void Update(Microsoft.Xna.Framework.GameTime gameTime){

// Calcula Dt - Tempo transcorrido float timeDelta = (float)gameTime.ElapsedGameTime.TotalSeconds;

// vf = vi + I/m velocidade += Impulso / massa;

// Calcula atrito. Vetor contrário a velocidadeVector3 direcaoAtrito = -velocidade;

direcaoAtrito.Normalize(); direcaoAtrito *= coeficienteAtrito;

// Modela a valiação (redução) de velocidade devido ao atrito velocidade += direcaoAtrito;

// sf = si + v*Dt - Ajusta posição Posicao += velocidade * timeDelta;

// O Impulso é aplicado em apenas um ciclo de update Impulso = Vector3.Zero;}

Page 13: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Colisão e Conservação de EnergiaConservação da Energia Cinética. A soma da

energia antes da colisão é igual a Energia depois da colisão

2121 EEEE

Conservação do Momento

ff vmvmvmvm

pppp

22112211

2121

)(

)(

21

12

vv

vve ff

Coeficiente de Restituição. É a medida de quanto uma colisão é Elástica ou Inelástica

Page 14: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Resolvendo as velocidades finaisDesta forma as novas velocidades depois

da colisão são dadas por:

)(

)()1(

)(

)()1(

21

212112

21

211221

mm

emmvvmev

mm

emmvvmev

f

f

Page 15: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Detectando ColisãoCria-se uma esfera envolvendo a malha e verifica se uma esfera intercepta a outra

public bool DetectaColisao(Esfera esfera){

// A massa escala o objeto BoundingSphere envolucroEsfera1 = new BoundingSphere(Posicao,

Modelo.Meshes[0].BoundingSphere.Radius * Massa); BoundingSphere envolucroEsfera2 = new BoundingSphere

(esfera.Posicao, esfera.Modelo.Meshes[0].BoundingSphere.Radius * esfera.Massa);

if (envolucroEsfera1.Intersects(envolucroEsfera2)) { audio.PlayCue("Bola"); CalculaVelocidades(esfera); return true; } else return false;}

Page 16: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Codificando novas velocidadesprivate void CalculaVelocidades(Esfera esfera){

float produtoInversoMassas = 1.0f / (Massa + esfera.Massa);

Vector3 velocidade1Nova =((coeficienteRestituicao + 1.0f)*esfera.Massa*esfera.Velocidade +

Velocidade * (Massa - (coeficienteRestituicao * esfera.Massa))) * produtoInversoMassas;

Vector3 velocidade2Nova = (

(coeficienteRestituicao + 1.0f) * Massa * Velocidade -

esfera.Velocidade*(Massa-(coeficienteRestituicao*esfera.Massa))) * produtoInversoMassas;

Velocidade = velocidade1Nova; esfera.velocidadeColisao = velocidade2Nova;}

Page 18: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Engines de Física – Open SourceOpen Source Engines

Box2D Physics Engine - Engine 2DBullet – Multarefa, colisão 3D e Dynamic Rigid BodyODE (Open Dynamics Engine) - Dynamic Rigid BodyOPAL (Open Physics Abstraction Layer) PAL (Physics Abstraction Layer )Tokamak Game Physics Farseer Physics Engine (engine 2D para Microsoft XNA e Silverlight)

Page 19: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Engines de Física – ProfissinaisPhysX – Nvidia – build-in editor, graficos Direct X e som, vertex

based PhyzTorque X – Garage GamesNewton Game DynamicsPhun 2D Physics SandboxHavokAgX Multiphysics (software)Working Model

Page 20: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Inteligência Artificial

Page 21: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Chase - PerseguiçãoChase - PerseguiçãoO conceito de perseguição consiste em direcionar O conceito de perseguição consiste em direcionar o agente para o alvo e iniciar a perseguição o agente para o alvo e iniciar a perseguição

Vector3 direction = A.position – B.Position;Vector3 direction = A.position – B.Position;

Page 22: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Lógica para definir lado da Lógica para definir lado da rotaçãorotação

Page 23: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Implementando Implementando PerseguiçãoPerseguiçãopublic void Chase(Asteroids.Asteroid asteroid){

// Calculate ship vector between ship and asteroid Vector3 direction = asteroid.position - Position; // Calculate direction direction.Normalize();

Vector3 shipHead = HeadShip; Vector3 shipSide = HeadSide; // Calculate the angle between ship and asteroid float angle = GetAngleSignedBetween2Vectors(shipHead, direction); // Calculate side dot to verify if we need turn to rigth or left float sideDot = Vector3.Dot(shipSide, direction); // Prevent angle to be bigger MaxAngle if (angle > GameConstants.MaxRotationAngle) angle = GameConstants.MaxRotationAngle; if (sideDot > 0)

Rotation -= angle; else Rotation += angle; // Updade velocity velocity += direction * GameConstants.VelocityScale / 3;}

Page 25: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Evade - FugaEvade - FugaO conceito de fuga consiste em direcionar o O conceito de fuga consiste em direcionar o agente para a posição oposta ao alvo agente para a posição oposta ao alvo

Vector3 posicaoFuga = 2 * A.posicao - B.posicao;Vector3 posicaoFuga = 2 * A.posicao - B.posicao;

Page 26: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Exemplo de Busca e Exemplo de Busca e PerseguiçãoPerseguição

Page 27: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Estados da IAEstados da IAVagandoVagando

CapturandoCapturando

FugindoFugindo

CapturadoCapturado

Page 28: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

Outras técnicas de IAOutras técnicas de IASterring BehavioursSterring Behaviours

Chase and EvadeWander...

Redes NeuraisRedes Neurais

Logica FuzzyLogica Fuzzy

PendenciasPendencias

Alterar a IA da nave de perseguicaoAlterar a IA da nave de perseguicao

Esplicar o conceito de tomada de Esplicar o conceito de tomada de decisão para tiro do exemplo do decisão para tiro do exemplo do asteroideasteroide

Explicar a IA do exemplo de Explicar a IA do exemplo de perseguiçãoperseguição

Page 29: Física e Inteligência Artificial para jogos utilizando XNA Nome Roger Tang EmpresaGLU Mobile

http://www.gamefestbrasil.net/

© 2008 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only.

Microsoft makes no warranties, express or implied, in this summary.