• Non ci sono risultati.

Game Engine

N/A
N/A
Protected

Academic year: 2021

Condividi "Game Engine"

Copied!
16
0
0

Testo completo

(1)

Video Game Dev 2015/2016 Univ. Insubira

Game Physics

Marco Tarini

Animazioni nei games

Assets!

Controllo da parte degli artisti / creatori (dramatic effects!) Non interattiva Realismo…

dipende dall’artista

Poca customizzabilità

Physic engine Poco controllo

Interattiva

Realismo come prodotto collaterale del rispetto leggi fisiche

Si autoadatta

Procedural Non procedural

(2)

(recall?)

Game Engine

Parte del game che si occupa di alcuni dei task “comuni”

Scena / livello Renderer

Real time transofrm + lighting Models, materials … Physics engine

(soft real-time) newtonian physical simulations Collision detection + response

Networking

(LAN – es tramite UTP)

Sound mixer e “sound-renderer”

Gestore unificato HCI devices

Main event loop, timers, windows manager…

Memory management Artificial intelligence module

Soluz dei sotto task comuni AI Supporto alla localizzazione Scripting

GUI (HUD)

Animations scripted or computed

Simulazione fisica nei video games

3D, oppure 2D

“soft” real-time efficienza

1 frame = 33 msec (a 30 FPS)

fisica = 5% - 30% max del tempo di computaz

plausibililità

(ma non necessariamente “realismo”)

robustezza

(non deve “scoppiare”… quasi mai)

(3)

Physics engine:

intro

Modulo del game engine

esegue a tempo di esecuz del game

Computazione high-demanding

(su low-time budgets!)

Ma, altamente parallelizzabile

“embarassignly parallel” ;) hardware support

(come il Rendering Engine, del resto)

Tasks del game engine:

(simulare l’evoluz fisica del sistema!)

Dynamics (Newtonian)

per classi di oggetti come:

Corpi rigidi (rigid bodies)

Corpi deformabili articolati (soft bodies)

“ragdolling”

Corpi deformabili free form: soluz specifiche per Corde

Tessuti Capelli…

Fluidi

Air (wind) etc

Collision handling

Collision detection

(4)

HardWare per Physics engine

Recentemente: PPU

“Physical Processing Unit”

unità HW specializzata per motore fisico

Piùrecentemente:GP-GPU

“General Purpose Graphics Processing Unit”

riuso della scheda video per task generici (non di computer graphics 3D)

e.g. Cuda (nVidia)

per sfuttare un forte parallelsmo,

ci vuole un HardWare fortemente para llelo

Software: libraries / SDK

open source, free, HW accelerated

2D! open source, free open source, free HW accelerated (OpenCL)

HW accelerated (CUDA)

by

(5)

PhysX

Fisica nei games:

cosmesi o gameplay?

Solo un accessiorio grafico?

(x realismo!) es:

particle effects (senza feedback)

“secondary” animations e.g.

ragdolling

o parte del gameplay?

e.g. phyisic based puzzles in 2D, approccio popolare (da sempre!)

(6)

Fisica nei games:

cosmesi o gameplay?

Solo un accessiorio grafico?

(x realismo!) es:

particle effects (senza feedback)

“secondary” animations e.g.

ragdolling

o parte del gameplay?

e.g. phyisic based puzzles in 3D : tendenza in aumento

Motore fisico:

Dynamics

Simualz fisica (newtoniana)

Ripasso:

oggetti = massa stato di un oggetto:

posizione e derivata: velocità (e momento)

orientamento e velocità angolare (e momento angolare)

mutamento dello stato:

forze => accelerazione, torque

(7)

Reminder:

Posizione di un oggetto

Fisica 2D

Posizione:

(x,y)

Orientamento:

(α) – angolo (scalare)

Fisica 3D

Posizione:

(x,y,z)

Orientamento:

quaternione oppure

asse,angolo oppure

asse*angolo oppure

matrice 3x3 oppure

angoli Eulero oppure

non molto adatti

Dinamica newtoniana:

bignamino

Locazione attuale oggetto

Rate of change di 

(d / dt )

 “con massa”

(momentum)

Ciò che cambia il rate of change (d2/ dt2)

 “con massa”

Posizione

= (x,y,z)

Velocity

( | | =“speed” )

Quantità di moto

Accelerazione

=

Forza

Orientamento (e.g.

quaternione)

Angular velocity Momento angolare

= momento d’inerzia (x asse) (“inerzia rotazionale”)

Acc. angolare α Torque τ

τ

(“momento meccanico”)

(8)

Dinamica newtoniana:

bignamino

Locazione attuale oggetto

Rate of change di 

(d / dt )

 “con massa”

(momentum)

Ciò che cambia il rate of change (d2/ dt2)

 “con massa”

Posizione

= (x,y,z)

Velocity

( | | =“speed” )

Quantità di moto

Accelerazione

=

Forza

Orientamento (e.g.

quaternione)

Angular velocity Momento angolare

= momento d’inerzia (x asse) (“inerzia rotazionale”)

Acc. angolare α Torque τ

τ

(“momento meccanico”) cambiano lo stato

(no memoria)

stato (si mentiene! inerzia!)

(cambia, ma solo con contin)

Dinamica (Newtoniana)

⋅ +

=

⋅ +

=

=

=

dt v p

p

dt a v

v

m f

a

p funz f

r r r

r r r r

0 0

/

,...)

(

(9)

Dinamica (Newtoniana)

⋅ +

=

⋅ +

=

=

=

dt v p

p

dt a v

v

m f a

p funz f

r r r

r r r r

0 0

/

,...)

(

forze

acceleraz

velocità posizioni

Dinamica (Newtoniana)

⋅ +

=

⋅ +

=

=

=

C C

t C

t C

C C

C C

dt t v p

t p

dt t a v

t v

m t

f t

a

t p funz t

f

0 0 0

) ( )

(

) ( )

(

/ ) ( )

(

),...) (

( )

(

r r r

r r r r

pos, acc, vel, forze:

funz del tempo corrente

t

C

(10)

Un (ovvio) inciso

= tempo virtuale != tempo reale

es:

gioco in pausa tcostante.

Fast forward, replay,

rallenty, time all’indietro cambia ritmo/verso di scorrimento di t

occasionalmente,

il gameplaysfrutta su questa differenza in modo spettacolare!

PoP – the sands of timesserie (Ubisoft, 2003-…) Braid(Jonathan Blow, 2008)

t

C

Computare l’evoluzione fisica

Soluzione analitica:

stato = funz(

t

)

date le funz di forza (e acc) trovavare le funzioni (pos, vel…) che siano nelle relazioni

specificate:

Soluzione numerica

1. stato

( t = 0)

init

2. stato

( t + 1)

evolve( statot

) 3. goto 2

+

=

+

=

=

=

C C

t C

t C

C C

C C

dt t v p t p

dt t a v t v

m t f t a

t p funz t

f

0 0

0 0

) ( )

(

) ( )

(

/ ) ( ) (

),...) ( ( ) (

r r r r r r r

(11)

Semplice esempio:

soluzione analitica

 

 

=

y x

v v

r

0 v





= 0 0 p0

 

 

⋅ −

= 9 . 8

m

0

f

r

x y

costante

(in questo specifico caso, non dipende da pos)

«tiro balistico»

di un massa, in 2D, ignorando gli attriti….

Semplice esempio:

soluzione analitica

Calcolando…





 ⋅

=

⋅





+



=

⋅ +

=





= −

⋅



 + −





=



 

= −

=



 

⋅ −

=

0 2 0

) 0 ( )

(

8 . 8 9

. 9 ) 0

(

8 . 9 / 0

) ( ) (

8 . 9 ) 0

(

C x t

x t

C

C y

x t

y x C

C C

C

t dt v

dt v t v p t p

t v

dt v v

t v v

m t f t a

m t

f

C C

C

r r

r r r

+

=

+

=

=

=

C C

t C

t C

C C

C C

dt t v p t p

dt t a v t v

m t f t a

t p funz t

f

0 0

0 0

) ( )

(

) ( )

(

/ ) ( ) (

),...) ( ( ) (

r r r r r r r

(12)

Semplice esempio:

soluzione analitica

Calcolando…





= ⋅





= −



 

= −



 

⋅ −

=

2 2

/ 8 . ) 9

(

8 . ) 9

(

8 . 9 ) 0 (

8 . 9 ) 0

(

C C

y

C x C

C y

x C

C C

t t

v

t t v

p

t v

t v v

t a

m t f

r r r

x y

) (

tC p

Alcuni modelli numerici

Metodi forward Eulero (in avanti)

(semplici e diretto)

Metodi “leapfrog”

(it: a “cavallina”)

Metodi di Verlet

(position based dynamics)

(13)

Caratteristiche

di un metodo numerico

Quanto è efficiente / oneroso

serve che sia almeno soft real-time

(se ogni tanto computaz rimadata al prox frame, ok)

Quanto è accurato

serveche sia almeno plausibile

(se rimane plausibile, discrepanze dalla realtà, ok)

Quanto è robusto

serveche risultati del tutto sballati siano molto rari (e, mai crash)

Quanto è generico

quali fenomeni / vincoli / tipo di oggetti è in gradi di riprodurre?

necessitàdipendenti dal contesto (es, gameplay)

L’evoluzione fisica del sistema metodi di Eulero

(1) computare la forza (su ciascuna particella)

come una qualche funzione delleposizioni (anche di altre particelle)

(2) accelerazione di ogni particella data da:

forzesu di essa, e sua massa

(3) aggiornare la velocitàcon l’ acceleraz.

(4) aggiornare la poscon la velocità Per ogni step:

⋅ +

=

⋅ +

=

=

=

dt v p

p

dt a v

v

m f

a

p funz f

r r r

r r r r

0

/

,...)

(

(14)

Metodi di Eulero

dt v p p

dt a v v

m f a

p funz f

v p

⋅ +

=

⋅ +

=

=

=

=

=

r r r r r r r r

/

...) , ( ...

init

...

state

one

step

t = t + dt

Semplice esempio:

soluzione numerica

 

 

 =

 

= 4

2

0 y x

v v

r

v





= 0 0 p0

 

 

⋅ −

= 1

m

0

f

r

x y

costante

(in questo specifico caso, non dipende da pos) per lo stesso

fenomeno dell’esempio precendete

= 1 dt

qui scegliamo, per es,

(15)

Semplice esempio:

soluzione numerica

dt v p p

dt a v v

m f a

m f

+

=

+

=

=





=

r r r r r r r

/ 8 . 9 0

init

step: 0 1 2 3 4 5 6 7

pos: (0,0) (2,3) (4,5) (6,6) (8,6) (10,5) (12,3) (14,0) vel: (2,4) (2,3) (2,2) (2,1) (2,0) (2,-1) (2,-2) (2,-3)

x y

0 1

2 3 4

5 6

7

step step step step step step step step

Computare l’evoluzione fisica

Soluzioni analitiche: Soluzioni numeriche:

x y

0 1

2 3 4

5 6

7

x y

) (tC function pos =

(16)

Computare l’evoluzione fisica

Soluzioni analitiche:

efficientissime!

soluz forma chiusa

accurati

solo sistemi semplici formule trovate caso per caso

(spesso neanche esistono!)

NO

(ma, per es, utili per consentire all’’AI di fare predizioni)

Soluzioni numeriche:

dispendiosi (iterativi)

ma, interattivi

errori di integrazione flessibili

generici

SI

Errori (di integrazione)

Dipendono da dt

dtpiccolo = più step (a parità di tempo virtuale)

= più sforzo computazionale

ma meno errore, simulaz più accuratezza

(ci discostiamo meno dalla soluz analitica, esatta) dt = 1.0 sec / FpS della simulaz fisica

(recall: non necessariametne lo stesso FpS del rendering) quanto cresce l’errore al variare di dt ?

«Ordine» della simulazione

Eulero è del 1mo ordine: l’errore è un O( dt^1) (ma di solito molto meno)

Si accumulano col tempo

(dipendono anche da t_tot )

Riferimenti

Documenti correlati

Panoramica SNC-DH210 è una telecamera mini-dome compatta per interni con risoluzione HD (1080p, supporto di H.264 a 15 fps), 3 Megapixel (risoluzione massima 2048 x 1536),

PLATORELLI DIAMANTATI MULTIUSO • DIAMOND MULTIPURPOSE GRINDING WHEELS • MEULES DIAMANTEES MULTIUSAGE MEHRZWECK DIAMANT-SCHLEIFSCHEIBE • MUELAS DE DIAMANTE PARA EL CORTE Y

[r]

Also note that, when 0 < α < 1, the second member is not more Lipschitz in general, and so we may have non-uniqueness for the corresponding Cauchy problem, when y 0 = 0, as in

[r]

 Use of the graphics card for generic tasks (not related with 3D computer graphics).  Ex.:

Ogni frammento in pos [X,Y] viene processato indipendentemente dagli altri frammenti. indipendentemente da quale primitiva lo ha generato output della computazione: un pixel

applico il lighting una volta per vertice – di solito #vertici << #frammenti. Per-fragment * Lighting – (a.k.a. " Phong Shading“)