real time physicspercro.sssup.it/marcello/didattica/aa2012/19_pbm.pdfrealtà virtuale: il presente,...
TRANSCRIPT
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Real Time Physics
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Perché si usano le simulazioni fisiche
• Si permette all'utente di interagire con l'ambiente virtuale e
muovere gli oggetti in maniera coerente
• Si aumenta il realismo della scena, gli oggetti non si
intepenetrano, non stanno sospesi in aria
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
La fisica è complessa
• Perfino una collisione anelastica può diventare un
problema complesso
• La maggior parte dei problemi sono complicati da
risolvere in real-time
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
La fisica è complessa (ii)
•Abbiamo bisogno di semplificare
Solo corpi rigidi, gli oggetti deformabili sono trattati come caso
speciale
Solo forme convesse omogenee e indistruttibili
Collisioni elastiche tra gli oggetti
Niente forze magnetiche, elettriche o reazioni chimiche
Niente attrito con l'aria (o modelli di attrito molto semplici)
Molti casi speciali (fluidi, tessuti e corpi deformabili)
•Non possiamo semplificare troppo
L'utente deve credere che la fisica sia reale
La simulazione deve essere stabile…
…e veloce.
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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)
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Dinamica
dP(t)/dt = F(t)
a(t) = F(t)/m
v(t) = a(t)dt
x(t) = v(t)dt
Descriviamo
le cause del moto,
ovvero le forze
Controlliamo
direttamente
le forze che agiscono
sui corpi stessi
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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)
La particella NON può ruotare!
Stato di una particella
Posizione
Velocità
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Sistema di particelle
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
Quantità di moto totale
P = ipi = imivi
Centro di massa
xcm = (imixi)/M
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Applicazioni dei sistemi particellari in CG
Molto usati!
Effetti (fuoco, nebbia, nuvole...)
Anche capelli!
11
XVR
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Parallelismo fra moto lineare e angolare
Lineare Angolare
posizione x Θ (angolo)
velocità v = dx/dt Ω = dΘ/dt
accelerazione a = vx/dt
= d2x/dt2
α = dΩ/dt
= d2Θ/dt2
resistenza al moto m (massa inerziale)
I (momento d’inerzia)
momento (si conserva) P = mv L = IΩ
forza F = ma = dP/dt τ = Iα = dL/dt
= F x r
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Momento (o tensore) d’inerzia
È una matrice 3x3 che rappresenta la resistenza di un corpo alla rotazione rispetto ai vari assi
Nota: è diverso per ogni orientazione di un corpo, ma è possibile esprimerlo come
I(t) = R(t) I R(t)T
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Constrained dynamics
Le cose si complicano quando più
corpi rigidi interagiscono:
Collisioni
Vincoli
(sottrazione di gradi di libertà)
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Collision Detection
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Ray-Mesh collision
Esistono semplici test di intersezione raggio-geometria (es. in XVR
isColliding)
Utile per ray –casting selection, terrain following, collision detection
(oggetto-oggetto, camera –oggetto etc.)
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
• Tunneling
Oggetti veloci (o piccoli) in
movimento posso mancare
alcune collisioni
5/28/2009 21
Collisioni
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
•Per risolvere il
problema del tunnelling
dobbiamo considerare
l'intero movimento
•Una “sweep shape” è
una forma che
racchiude il movimento
dell'intero passo
Collisioni
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Osservazione:
• Incrementando la
dimensione di un oggetto e
riducendo la dimensione
dell'altro la distanza non
cambia
Un oggetto può essere
ridotto a una
singolarità (punto)
5/28/2009 23
Collisioni
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Somma di Minkowski
Test Square & Circle Collision Square + Circle Minkowski Sum
Test
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Possibilità: effettuare la collisione triangolo-triangolo tra tutti i triangoli di entrambe le mesh -> computazionalmente MOLTO oneroso
Possibilità più realistica: utilizzare bounding volumes e, preferibilmente, gerarchie di bounding volumes
Collisioni
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Bounding Volume Hierarchies
l = 0 l = 1 l = 2 l = 3
l = 4 l = 5 l = 6 l = 7
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Collisioni fra BVH
Collisioni gerarchiche fra BVH
BVH oggetto 1
A
B C
A
B C
BVH oggetto 2
B C
B C A
A
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Collisioni: Bounding Volumes
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Collisioni: Modello a fasi
DETECTION: BROAD PHASE
collision detection “rozza” per determinare coppie di
oggetti potenzialmente collidenti (uso di BVH)
DETECTION: NARROW PHASE
collision detection più precisa tra le coppie individuate
nella fase precedente (difficilmente comunque si arriva
alla precisione triangolo-triangolo)
RESPONSE: RESOLUTION PHASE
Si aggiorna lo stato degli oggetti sulla base delle
informazioni risultanti dal contatto
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Affiancare alla rappresentazione
poligonale una rappresentazione
Voxel e una rappresentazione
Point-shell, e testare le collisioni
usando queste rappresentazioni
alternative
Collision detection: altre possibilità
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Vincoli
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
• Gli oggetti possono essere linkati assieme da vincoli
per creare oggetti complessi:
Ragdoll
Corde / Ponti
Bracci robotici
Gru
Anche i punti di contatto sono visti come vincoli
Risoluzione dei vincoli
XVR
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
• Risolvere i vincoli vuol dire risolvere un sistema di n
equazioni
N è il numero dei vincoli
• All'aumentare del numero di vincoli aumenta la
complessità del problema in maniera quadratica
• Il numero di vincoli può crescere molto rapidamente
(in una scena normale si può tranquillamente
raggiungere 30 ~ 40)
Risolvere un equazione con 30 variabili può essere
lento.
Risoluzione dei vincoli
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Risoluzione dei vincoli
•Una possibile soluzione è risolvere un
vincolo alla volta
Risolvere un vincolo può rendere
invalidi gli altri
•Si può risolvere il problema
iterativamente finché la soluzione non
converge
Poche iterazioni = soluzione instabile
Molte iterazioni = si sforano i tempi
1m
2m
3m
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Simulazione fisica
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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)
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Il problema del tempo discreto
• Le simulazioni sono a tempo discreto: necessaria analisi
numerica
• I movimenti sono l'approssimazione del vero movimento
suddiviso in piccoli movimenti lineari
Un'integrazione sbagliata porta a guadagni o perdite di
energia
Gli errori si sommano nel tempo
La grandezza dell’intervallo (step) influisce sull’errore.
Alcuni metodi (primo ordine) prevedono una sola iterazione
ma necessitano di uno step piccolissimo, altri prevedono più
iterazioni ma consentono uno step più grande. Il costo
computazionale è proporzionale ad entrambi: costo α (step size, # iterations)
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Soluzioni numeriche
Calcoliamo la variazione di x(t)
in un intervallo temporale ΔT
Metodi famosi
Eulero
Punto di mezzo
Runge Kutta
ecc.
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Metodo di Eulero
dx/dt = f(t)
x(t0 + h) = x0 + hf(t0)
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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’)
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Problemi (2/2)
Stabilità
Alcuni metodi rischiano di divergere
completamente
Equazioni “stiff”
Per esse soluzioni instabili finchè il passo di
integrazione non è sufficientemente piccolo
Diminuire il passo di integrazione può servire,
ma può costare molto e a volte
non risolve il problema
step size = 1
step size = 0.7
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Deriva numerica di R: soluzione (1/2)
I quaternioni
Estensione dei numeri complessi
Un valore reale e tre immaginari
Q = w + ix + jy +kz
con i2 = j2 = k2 = ijk = -1
Un quaternione è unitario se
x2 + y2 + z2 + w2 = 1
Ogni quaternione unitario (w,x,y,z)
è interpretabile come una rotazione
in 3D e viceversa
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
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
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Instabilità numerica
La precisione dei float è finita e varia con la
grandezza del numero
I test di collision non sono mai precisi
Soluzione: permettere una lieve interpenetazione
Gli oggetti possono guadagnare energia
La simulazione diventa instabie
Soluzione: aggiungere dello smorzamento
Tutti i test devono considerare gli errori di precisione
dei numeri float
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Un mondo di soluzioni
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
physXVR hello world
function initPhysics(){
phManager = CVmPhManager(false);
phManager.SetTiming(SUBPASSTIME,
PASSNUMBER, PHX_TIMEFIXED);
phManager.setParameters(PHY_ENABLE_H
ARDWARE, 1);
}
function run (){
time += phManager.simulate();
phManager.updateGraphics();
phManager.draw();
}
Crea il manager della fisica
Imposta i parametri temporali
Imposta altri parametri
Inizia la simulazione
Aggiornal la posizione degli oggetti
Disegna gli oggetti con la posizione aggiornata
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Creare degli oggetti
Una box:
var box = phManager.AddPhObj(posA, orientationA,
PHX_DYNAMIC, PHX_BOX, 10, 1.0, 1.0, 1.0);
Una sfera:
var sphere = phManager.AddPhObj(posB, posB,
PHX_DYNAMIC, PHX_SPHERE, 10, 12, 0.5);
Un piano:
var plane = phManager.AddPhObj(0.0, [0.0, 1.0, 0.0],
PHX_FIXED, PHX_PLANE);
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
Creare una mesh da un oggetto
var mesh = CVmNewMesh(“myMesh.aam”);
var cookedMeshConvex = phManager.cookConvexMesh(mesh);
var cookedMeshTri = phManager.cookMesh(mesh);
var o1 = phManager.AddPhObj(pos, rot, PHX_DYNAMIC);
o1.addConvexShape(cookedMeshConvex, o, r, 100, 0);
o1.linkToMesh(mesh);
oppure
o1.addTriangleShape(cookedMeshTri, o, r, 100, 0);
Realtà Virtuale: il presente, il passato, il futuro Real-Time Physics
•Le collisioni tra oggetti
concavi non sono supportate
•Oggetti convessi possono
essere create tramite
diverse convex shape
Oggetti convessi