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