FISL14 - Desmontando uma engine de física

37
desmontando uma engine de física

Transcript of FISL14 - Desmontando uma engine de física

Page 1: FISL14 - Desmontando uma engine de física

desmontandouma engine

de física

Page 2: FISL14 - Desmontando uma engine de física

Adriano MeloEngenhero de Software (INdT)

Mestrando em IA (UFPE)Membro do CInLUG

http://adrianomelo.comhttp://github.com/adrianomelo

Page 3: FISL14 - Desmontando uma engine de física

the incredible circus!

nas lojas: meego, symbian, windows phoneem breve: facebook e android

Page 4: FISL14 - Desmontando uma engine de física

o que é umaengine de física?

(ou motor de física)

Page 5: FISL14 - Desmontando uma engine de física

simulações de sistemas físicos como dinâmica de

corpos rígidos, de corpos macios e de f luidos

Page 6: FISL14 - Desmontando uma engine de física

representaçãográfica

representaçãogeométrica

motor de físicaframework gráfico

Page 7: FISL14 - Desmontando uma engine de física

como integrar a representação geométrica

com a repre. gráfica?

Page 8: FISL14 - Desmontando uma engine de física

main loop•alimenta o sistema com eventos, atualiza a

simulação física e desenha os elementos na tela

Page 9: FISL14 - Desmontando uma engine de física

*16ms = 1 seg / 60 fps

exemplo de main loop #1

Page 10: FISL14 - Desmontando uma engine de física

*16ms = 1 seg / 60 fpshttp://entropyinteractive.com/2011/02/game-engine-design-the-game-loop/

exemplo de main loop #2

Page 11: FISL14 - Desmontando uma engine de física

movendo objetos

Page 12: FISL14 - Desmontando uma engine de física

•Verlet integration•Euler method•Runge-kutta methods•Symplectic integrator

métodos numéricos

https://en.wikipedia.org/wiki/Numerical_ordinary_differential_equations

Page 13: FISL14 - Desmontando uma engine de física

position verlet - equações

Positionnew = Positioncurrent

+ Acceleration * Timestep2+ (Positioncurrent - Positionold)

Positionold = Positioncurrent

http://www.pagines.ma1.upc.edu/~susin/files/AdvancedCharacterPhysics.pdf

Page 14: FISL14 - Desmontando uma engine de física

positionoldpositioncurrent

positionnew-g*t2

positioncurrent - positionold

trajetória livre

p1

p2

p2

p1p0

Page 15: FISL14 - Desmontando uma engine de física

trajetória com colisãop0 p1

p2

p2 terá sua posição corrigida para não entrar no outro objeto

Page 16: FISL14 - Desmontando uma engine de física

detectandocolisões

Page 17: FISL14 - Desmontando uma engine de física

e1e2

e3

colidem!(e2 e e3)

problema não trivial e de alto custo de processamento!

e4

Page 18: FISL14 - Desmontando uma engine de física

volumes delimitadoresrepresentação geométrica que otimiza a detecção de

colisões

http://en.wikipedia.org/wiki/Bounding_volume

Page 19: FISL14 - Desmontando uma engine de física

alguns tipos..

Page 20: FISL14 - Desmontando uma engine de física

e1e2

e3

e4

usando AABBs como volumes delimitadores (bounding volumes)

a checagem de colisão seria feita apenas entre e2 e e3

Page 21: FISL14 - Desmontando uma engine de física

teorema dos eixos de separação

dois objetos convexos não se intersectam se e somente se existe uma linha (chamada de eixo) em que as projeções

dos objetos não se cruzam.

http://en.wikipedia.org/wiki/Separating_axis_theorem

Page 22: FISL14 - Desmontando uma engine de física

relembrando o que é uma projeção...

ponto P

reta R

projeção de P em R

http://en.wikipedia.org/wiki/Vector_projection

Page 23: FISL14 - Desmontando uma engine de física
Page 24: FISL14 - Desmontando uma engine de física

25º

70º

quais eixos testar?

e1

e2

e3usando OrientedBounding Boxes

Page 25: FISL14 - Desmontando uma engine de física

e1

e2

e3

v1

v2 v5

v6

v4

v3

Page 26: FISL14 - Desmontando uma engine de física

resoluçãode colisões

Page 27: FISL14 - Desmontando uma engine de física

informações para a resolução

•normal do contato•tamanho da interseção•a depender da engine:•ponto do contato•vértice ou aresta envolvida na colisão•formas dos objetos colididos•...

Page 28: FISL14 - Desmontando uma engine de física
Page 29: FISL14 - Desmontando uma engine de física

restriçõesusadas para remover liberdades entre corpos

Page 30: FISL14 - Desmontando uma engine de física

restrição de distância

longe..perto..

x0

x1

|x1 - x0| = d

Page 31: FISL14 - Desmontando uma engine de física

restrição de angulo

x0

x1 x2

(x2 − x0) ⋅ (x1 − x0) < α

Page 32: FISL14 - Desmontando uma engine de física

uma engine simples...

Page 33: FISL14 - Desmontando uma engine de física

•verlet integration

•modelar corpos rígidos como partículas com restrições

•colisões usando as informações do teorema dos eixos de separação

•constraint solver (resolve o comportamento das restrições)

d1

d2

d3

d4d5 d6

Page 35: FISL14 - Desmontando uma engine de física

•Advanded Character Physics•Thomas Jakobsen

•Real-time collision detection•Christer Ericson

referências

Page 36: FISL14 - Desmontando uma engine de física

palestras relacionadas

•Arquitetura para jogos multi-plataforma•Sala P09 - quinta das 10 às 11 horas

•Workshop de Jogos em HTML5•Sala 714 - quinta das 14 às 17 horas

Page 37: FISL14 - Desmontando uma engine de física

obrigadoAdriano Melo

adrianomelo.com