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
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
Modellazione fisica per ambienti virtuali
Introduzione:
Cos’è la simulazione dinamica?
3
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
Applicazioni industriali
Prototipizzazione,
studi ingegneristici
Formazione del personale
6
Modellazione fisica per ambienti virtuali
Applicazioni: animazione 3D
7
Tessuti
Vento
Moto inerziale
ecc. ecc.
Modellazione fisica per ambienti virtuali
Applicazioni: giochi e VR
Incrementare
la credibilità
– veicoli, sport, balistica, “rag-doll”, ecc.
Compromesso
accuratezza/prestazioni
... e divertimento!
8
Modellazione fisica per ambienti virtuali
Problemi
Accuratezza
Prestazioni
Stabilità
Parameter
9
tuning
Modellazione fisica per ambienti virtuali
Cinematica e dinamica
10
Cinematica
Descriviamo
il movimento
di un corpo
ignorandone le cause
Controlliamo
direttamente
la variabile posizione
11
P(t) = mv
a(t) = dv/dt
v(t) = dx/dt
x(t)
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
Cinematica vs. Dinamica
Dinamica!
Cinematica
13
Modellazione fisica per ambienti virtuali
Richiami di dinamica
14
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
Modellazione fisica per ambienti virtuali
Sistema di particelle (1/2)
Quantità
Centro
16
di moto totale
P = Σipi = Σimivi
di massa
xcm = (Σimixi)/M
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
Applicazioni dei sistemi particellari in CG
Molto usati!
Effetti (fuoco, nebbia, nuvole...)
Anche capelli!
18
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
Constrained dynamics
Le cose si complicano quando più
corpi rigidi interagiscono:
Collisioni
Vincoli
(sottrazione di gradi di libertà)
24
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
Soluzioni numeriche
per le equazioni differenziali
26
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
Modellazione fisica per ambienti virtuali
Soluzioni numeriche
Calcoliamo
la variazione di x(t)
in un intervallo temporale ∆T
Metodi famosi
– Eulero
– Punto di mezzo
– Runge Kutta
– ecc.
28
Modellazione fisica per ambienti virtuali
Metodo di Eulero
dx/dt = f(t)
x(t0 + h) = x0 + hf(t0)
29
Modellazione fisica per ambienti virtuali
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?
30
Funzioni di costo
(numero di valutazioni di F e F’)
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
Struttura di un motore fisico
35
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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 */
}
40
In generale ODE_Solver può chiamare ComputeForces
più volte durante un singolo step
Modellazione fisica per ambienti virtuali
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
41
calcolate forze e momenti
Modellazione fisica per ambienti virtuali
Utilizzo di un motore fisico
(esempio di ODE)
42
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
I vincoli (dJoint)
Limitano
i movimenti possibili di un
corpo rispetto ad un altro
51
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali
Per approfondire
56
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
57
Bullet http://www.continuousphysics.com/Bullet/
– Open source
– Integrazione con Blender
Modellazione fisica per ambienti virtuali
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
Modellazione fisica per ambienti virtuali