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
(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)
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
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
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!)
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
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”)
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
/
,...)
(
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
/
,...)
(
forzeacceleraz
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
CUn (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
CComputare 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)
init2. 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
Semplice esempio:
soluzione analitica
=
y x
v v
r
0 v
= 0 0 p0
⋅ −
= 9 . 8
m0
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
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 pAlcuni modelli numerici
Metodi forward Eulero (in avanti)
(semplici e diretto)
Metodi “leapfrog”
(it: a “cavallina”)
Metodi di Verlet
(position based dynamics)
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
/
,...)
(
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
fr
x y
costante
(in questo specifico caso, non dipende da pos) per lo stesso
fenomeno dell’esempio precendete
= 1 dt
qui scegliamo, per es,
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 =
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 )