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