Modellazione fisica per ambienti virtuali

Transcript

Modellazione fisica per ambienti virtuali
Modellazione fisica
per ambienti virtuali
Ing. Davide Vercelli
[email protected]
Emanuele Ruffaldi
[email protected]
1
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Argomenti di oggi
Cos’è
la simulazione dimamica?
Richiami di dinamica
Soluzioni numeriche
per le equazioni differenziali
Struttura di un motore fisico
Utilizzo di un motore fisico
2
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Introduzione:
Cos’è la simulazione dinamica?
3
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Simulazione dinamica in breve
Dinamica:
applicazione delle leggi di Newton
sul moto dei corpi
Simulazione
dinamica:
ottenere l’evoluzione del sistema
a partire dalla descrizione di
– Oggetti
– Interazioni fra oggetti
– Forze che agiscono sugli oggetti
4
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Tipologie di simulazione
Offline:
velocità scorrelata
da quella dei processi simulati
Online:
stessa velocità dei processi simulati
– Realtime
– Interattiva: è possibile modificare
lo stato della simulazione
mentre è in corso
5
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Applicazioni industriali
Prototipizzazione,
studi ingegneristici
Formazione del personale
6
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Applicazioni: animazione 3D
Tessuti
Vento
Moto inerziale
ecc. ecc.
7
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Applicazioni: giochi e VR
Incrementare
la credibilità
– veicoli, sport, balistica, “rag-doll”, ecc.
Compromesso
accuratezza/prestazioni
... e divertimento!
8
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Problemi
Accuratezza
Prestazioni
Stabilità
Parameter
tuning
9
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Cinematica e dinamica
10
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Cinematica
Descriviamo
il movimento
di un corpo
ignorandone le cause
Controlliamo
direttamente
la variabile posizione
P(t) = mv
a(t) = dv/dt
v(t) = dx/dt
x(t)
11
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Dinamica
F(t)
Descriviamo
le cause del moto,
ovvero le forze
Controlliamo
direttamente
le forze che agiscono
sui corpi stessi
a(t) = F/m
v(t) = ∫a
x(t) = ∫v
dP(t)/dt = F
12
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Cinematica vs. Dinamica
Dinamica!
Cinematica
13
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Richiami di dinamica
14
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Dinamica delle particelle
Particella (o punto)
Non ha estensione
La sua posizione nello spazio è
descritta solo dalla sua traslazione
rispetto all’origine: (x, y, z)
Stato di una particella
Posizione
Velocità
15
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Sistema di particelle (1/2)
Quantità
Centro
di moto totale
P = Σipi = Σimivi
di massa
xcm = (Σimixi)/M
16
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Sistema di particelle (2/2)
In assenza di forze esterne:
la quantità di moto (o momento lineare)
del sistema si conserva
il centro di massa resta in quiete
In presenza di forze esterne:
il moto del centro di massa è equivalente
a quello di un’unica particella
con massa M=Σmi
17
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Applicazioni dei sistemi particellari in CG
Molto usati!
Effetti (fuoco, nebbia, nuvole...)
Anche capelli!
18
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Dinamica del corpo rigido
Il corpo rigido
Ha un’estensione spaziale
– È quindi soggetto anche al moto rotatorio
È
indeformabile
Stato di un corpo rigido
Posizione e velocità (del baricentro)
Rotazione e velocità angolare
19
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Moto rotatorio
Rotazione attorno ad un asse fisso
L’angolo θ varia nel tempo
Tracciando un’analogia
fra angolo θ(t) e posizione x(t)
possiamo definire:
– Velocità angolare
– Accelerazione angolare
– Momento angolare
– Momento di una forza
– Momento d’inerzia
20
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Parallelismo fra moto lineare e angolare
Lineare
Angolare
x
Θ (angolo)
velocità
v = dx/dt
Ω = dΘ/dt
accelerazione
a = vx/dt
= d2x/dt2
m
α = dΩ/dt
= d2Θ/dt2
I
(massa inerziale)
(momento d’inerzia)
P = mv
L = IΩ
F = ma = dP/dt
τ = Iα = dL/dt
=Fxr
posizione
resistenza al moto
momento (si conserva)
forza
21
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Moto del corpo rigido
Moto di un singolo corpo rigido
Tutte le forze influenzano
il moto del baricentro
Alcune forze influenzano
anche il moto rotatorio
– Forze che non agiscono uniformemente su
tutto il corpo
– Forze non in linea col baricentro
22
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Momento (o tensore) d’inerzia
È
una matrice 3x3 che rappresenta
la resistenza di un corpo alla rotazione
rispetto ai vari assi
I = mr2
(per un punto, rispetto ad un asse noto)
Nota:
è diverso per ogni orientazione
di un corpo, ma è possibile esprimerlo
come
I(t) = R(t)IbodyR(t)T
23
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Constrained dynamics
Le cose si complicano quando più
corpi rigidi interagiscono:
Collisioni
Vincoli
(sottrazione di gradi di libertà)
24
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Collisioni
Argomento molto vasto
In breve:
Collision detection
– Banale particelle/piano
– Poco banale fra superfici qualsiasi!
Collision
response
– Cruciale dove applichiamo la risposta
in un corpo rigido
25
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Soluzioni numeriche
per le equazioni differenziali
26
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Equazioni differenziali ordinarie
Una ODE (Ordinary Differential Equation)
di ordine “n” è
“un’equazione in cui l’incognita
è una funzione in una variabile indipendente,
e che contiene derivate dell’incognita
in quella variabile fino all’ordine n”
Esempio:
F = ma ovvero d2x/dt2=F/m
(ODE di ordine 2)
27
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Soluzioni numeriche
Calcoliamo
la variazione di x(t)
in un intervallo temporale ∆T
Metodi famosi
– Eulero
– Punto di mezzo
– Runge Kutta
– ecc.
28
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Metodo di Eulero
dx/dt = f(t)
x(t0 + h) = x0 + hf(t0)
29
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Problemi (1/2)
Accuratezza
– La soluzione non è esatta, ma quanto
si discosta da un risultato corretto?
Ordine dell’errore
– Che prezzo siamo disposti a pagare
in cambio di una maggiore accuratezza?
Funzioni di costo
(numero di valutazioni di F e F’)
30
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Problemi (2/2)
Stabilità
– Alcuni metodi rischiano di divergere
completamente
– Equazioni “stiff”
Metodi impliciti
– Diminuire il passo di integrazione può
servire, ma può costare molto e a volte
può essere addirittura controproducente!
31
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Deriva numerica di R: problema
R
è la matrice 3x3 che esprime
la rotazione di un corpo nello spazio
Dopo molte elaborazioni successive
si accumulano gli errori numerici
Tuttavia non tutte le matrici 3x3
sono matrici di rotazione!
– R tende ad allontanarsi dall’ortogonalità
Effetto grafico e fisico non realistico
– Difficile ripristinare R
32
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Deriva numerica di R: soluzione (1/2)
I quaternioni
Estensione dei numeri complessi
Un valore reale e tre immaginari
Q = a + ib + jc +kd
con i2 = j2 = k2 = ijk = -1
Un quaternione è unitario se
a2 + b2 + c2 + d2 = 1
Ogni quaternione unitario
è interpretabile come una rotazione
in 3D e viceversa
33
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Deriva numerica di R: soluzione (2/2)
Risolvono il problema perché:
Hanno solo 4 elementi
– Si accumula meno errore
Sono
facili da correggere
– Hanno norma unitaria
– Tutti i 4v con norma unitaria
sono quaternioni!
Inoltre:
– Meno memoria
– Facile interpolare rotazioni
34
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Struttura di un motore fisico
35
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Strutture dati
struct Particle {
float m;
float x[3];
float v[3];
float f[3];
};
/* massa */
/* posizione */
/* velocita’ */
/* risultante */
struct ParticleSystem {
int n;
/* numero di particelle */
Particle **p;
float t;
/* orologio di sistema */
};
36
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Metodo GetDerivative
void GetDerivative(ParticleSystem *ps, float *dst) {
for (int i = 0; i < ps->n; i++) {
Particle *p = ps->p[i];
*(dst++) = p->v[0];
/* xdot = v */
*(dst++) = p->v[1];
*(dst++) = p->v[2];
*(dst++) = p->f[0] / p->m; /* vdot = f / m */
*(dst++) = p->f[1] / p->m;
*(dst++) = p->f[2] / p->m;
}
}
37
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Metodo SetState
void SetState(ParticleSystem *ps, float *src) {
for (int i = 0; i < ps->n; i++) {
Particle *p = ps->p[i];
p->x[0] = *(src++);
p->x[1] = *(src++);
p->x[2] = *(src++);
p->v[0] = *(src++);
p->v[1] = *(src++);
p->v[2] = *(src++);
}
}
/* analogamente abbiamo GetState */
38
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Esempio col metodo di Eulero (2/2)
ParticleSystem *ps = Init_System(NPARTICLES);
float *aux = new float[ps->n * 6];
float *aux2 = new float[ps->n * 6];
for (ps->t = t_0; ps->t < t_end; ps->t += delta_t) {
ClearForces(ps);
/* p[i]->f = 0 */
ComputeForces(ps);
/* p[i]->f = (...) */
GetDerivative(ps, aux);
/* F(t) */
_vector_scale(aux, delta_t);
/* hF(t) */
GetState(ps, aux2);
/* x0 */
_vector_add(aux2, aux, aux2);
/* x0 + hF(t) */
SetState(ps, aux2);
}
39
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Struttura generale
void ComputeForces(ParticleSystem *p, float t);
Init_System();
while (1) {
/* qui prendiamo il vecchio stato */
ODE_Solver(t0, t0 + h, state, ComputeForces);
/* qui settiamo il nuovo stato */
}
In generale ODE_Solver può chiamare ComputeForces
più volte durante un singolo step
40
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Caso del corpo rigido
La
struttura si arricchisce
– Rotazione R (o q!)
– Tensore d’inerzia Ibody
– Velocità angolare (o momento)
– Momento della forza T
Vanno
calcolate forze e momenti
41
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Utilizzo di un motore fisico
(esempio di ODE)
42
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Il software ODE
Da
non confondere:
– ODE, la libreria di simulazione dinamica
– ODE, equazioni differenziali ordinarie
ODE
sta per “Open Dynamics Engine”
È open source
– LGPL
– BSD
C
/ C++
www.ode.org
43
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Inizializzazione di ODE
Per
prima cosa si crea un mondo
(contenitore di oggetti
in grado di interagire fra loro)
dWorldID world = dWorldCreate();
Successivamente
possiamo
aggiungere i corpi rigidi
dBodyID body = dBodyCreate(world);
44
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
I corpi rigidi (dBody)
Metodi per settare lo stato
dBodySetPosition(body, x, y, z);
dBodySetRotation(body, R);
dBodySetQuaternion(body, q);
dBodySetLinearVel(body, x, y, z);
dBodySetAngularVel(body, x, y, z);
... e relativi metodi di Get
Metodi per aggiungere forze
dBodyAddForce(body, x, y, z);
dBodyAddTorque(body, R);
/* ... E molte altre varianti */
/* vengono azzerate dopo ogni time step */
45
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
La massa (dMass) (1/2)
Struttura
che contiene
– Massa
– Posizione del centro di gravità
– Momento d’inerzia
È
possibile inizializzarla
mediante composizione di masse
di solidi elementari
– Così non c’è bisogno di calcolare I
46
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
La massa (dMass) (2/2)
Esempio:
dMass m1, m2;
dMassSetSphere(&m, density1, 5.0);
dMassSetBox(&m, density2, 1.0, 2.0, 3.0);
dMassAdd(&m1, &m2);
dBodySetMass(body, &m1);
Altre
operazioni:
– Traslazione
– Rotazione
– Adjust (per settare la massa totale)
47
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Collision detection
Collision
detection
– Esterna
– Integrata in ODE
L’esito
è una serie di “contact points”
Per usare la CD integrata
– Ogni corpo deve avere
una sua descrizione “spaziale”
48
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Geometry Objects (1/2)
Descrivono
figure rigide fondamentali
Ogni body può averne più di una
Vari tipi:
– Sfera
– Box
– “Capped Cylinder”
– Piano
– Raggio
– Mesh
– User defined...
49
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Geometry objects (2/2)
Esempio:
dGeomID box, sphere;
box = dCreateBox(0, lx, ly, lz);
sphere = dCreateSphere(0, rad);
dGeomSetPosition(sphere, 0, 0, lz);
dGeomSetBody(box, body);
dGeomSetBody(sphere, body);
Da
non confondere:
– Creazione massa
– Creazione geometrie
50
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
I vincoli (dJoint)
Limitano
i movimenti possibili di un
corpo rispetto ad un altro
51
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Uso dei vincoli (dJoint)
dJointID joint = dJointCreateBall(world, jointGroup);
/* o Hinge, Slider, Contact, Universal, Fixed... */
dJointAttach(joint, body1, body2);
dJointSetBallAnchor(joint, x, y, z); /* occhio! */
dJointSetHingeAxis(j2, x, y, z);
/* ecc. */
Limiti spaziali/angolari vanno settati a mano
dJointSetHingeParam(j2, dParamLoStop, val);
I joint possono anche avere una velocità
dJointSetHingeParam(j2, dParamVel, val2);
dJointSetHingeParam(j2, dParamBounce, 0.2);
52
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Disabilitare i corpi
Un
corpo “lontano” può essere
temporaneamente escluso dalla
simulazione
In ODE c’è la possibilità di farlo
automaticamente sotto certe soglie di
velocità
dBodyEnable(body);
dBodyDisable(body);
bool b = dBodyIsEnabled(body);
dBodySetAutoDisableFlag(body, 1);
Questo
funziona per “isole” di corpi
connessi
53
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Avanzamento di una simulazione
dWorldStep(world,
stepsize)
– Può essere lento
– Pesante in memoria
– Relativamente accurato
dWorldQuickStep(world,
stepsize)
– Molto più veloce
– Molto più leggero
– Meno accurato
54
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Parameter tuning
ERP
(Error Reduction Parameter)
– Ripristinare joint violati
– ERP = 1.0 instabile...
CFM
(Constraint Force Mixing)
– “Ammorbidisce” i vincoli
– Stabilizza i conti...
Grandezze
in gioco di ordine
paragonabile
... E molto altro!
55
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Per approfondire
56
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Motori fisici
Tokamak http://www.tokamakphysics.com/
–
–
–
–
Nativo in XVR (prossima lezione)
Documentazione scarsa
Gratis ma non open source
Sviluppo fermo?
PhysX http://www.ageia.com/developers/
– Supporto hardware!
– Commerciale
– Ottimi strumenti per gli sviluppatori
Bullet http://www.continuousphysics.com/Bullet/
– Open source
– Integrazione con Blender
57
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica
Letture consigliate
Il
famoso “paper di Baraff”
– http://www.cs.cmu.edu/~baraff/sigcourse/
ODE User Guide
– http://www.ode.org/ode-latest-userguide.html
Novodex/PhysX
– Registrazione obbligatoria 58
Realtà
il passato,
il futuro
Realtà Virtuale: il presente,
Modellazione
basata sulla
Fisica