12.07.2015 Views

Modellazione fisica per ambienti virtuali - Percro

Modellazione fisica per ambienti virtuali - Percro

Modellazione fisica per ambienti virtuali - Percro

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Argomenti di oggi Cos’èla simulazione dimamica? Richiami di dinamica Soluzioni numeriche<strong>per</strong> le equazioni differenziali Struttura di un motore fisico Utilizzo di un motore fisico2 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Simulazione dinamica in breve Dinamica:applicazione delle leggi di Newtonsul moto dei corpi Simulazione dinamica:ottenere l’evoluzione ldel sistemaa partire dalla descrizione di– Oggetti– Interazioni fra oggetti– Forze che agiscono sugli oggetti4 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Tipologie di simulazione Offline:velocità scorrelatada quella dei processi simulati Online:stessa velocità dei processi simulati– Realtime– Interattiva: è possibile modificarelo stato della simulazionementre è in corso5 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Applicazioni industriali Prototipizzazione, studi ingegneristici Formazione del <strong>per</strong>sonale6 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Applicazioni: animazione 3D Tessuti Vento Moto inerziale ecc. ecc.7 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Applicazioni: giochi e VR Incrementare la credibilità– veicoli, sport, balistica, “rag-doll”,, ecc. Compromesso accuratezza/prestazioni... e divertimento!8 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Problemi Accuratezza Prestazioni Stabilità Parameter tuning9 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Cinematica e dinamica10


Cinematica Descriviamoil movimentodi un corpoignorandone le cause Controlliamodirettamentela variabile posizioneP(t) = mva(t) = dv/dtv(t) = dx/dtx(t)11 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Dinamica Descriviamole cause del moto,ovvero le forze Controlliamodirettamentele forze che agisconosui corpi stessiF(t)a(t) = F/mv(t) = ∫ax(t) = ∫vdP(t)/dt = F12 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Cinematica vs. DinamicaDinamica!Cinematica13 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Richiami di dinamica14


Dinamica delle particelleParticella (o punto) Non ha estensione La sua posizione nello spazio èdescritta solo dalla sua traslazionerispetto all’origine: (x, y, z)Stato di una particella Posizione Velocità15 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Sistema di particelle (1/2) Quantità di moto totaleP = Σ ip i= Σ im iv i Centro di massax cm = (Σ(im ix i)/M16 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


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 quieteIn presenza di forze esterne: il moto del centro di massa è equivalentea quello di un’unica unica particellacon massa M=Σm i17 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Applicazioni dei sistemi particellari in CGMolto usati! Effetti (fuoco, nebbia, nuvole...) Anche capelli!18 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Dinamica del corpo rigidoIl corpo rigido Ha un’estensione spaziale– È quindi soggetto anche al moto rotatorio È indeformabileStato di un corpo rigido Posizione e velocità (del baricentro) Rotazione e velocità angolare19 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Moto rotatorioRotazione attorno ad un asse fisso L’angoloθ varia nel tempo Tracciando un’analogiafra angolo θ(t) e posizione x(t)possiamo definire:– Velocità angolare– Accelerazione angolare– Momento angolare– Momento di una forza– Momento d’inerziad20 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Parallelismo fra moto lineare e angolareposizionevelocitàaccelerazioneresistenza al motomomento (si conserva)forzaLinearexv = dx/dta = vx/dt= d 2 x/dt 2m(massa inerziale)P = mvF = ma = dP/dtAngolareΘ (angolo)Ω = dΘ/dtdα = dΩ/dtd= d 2 Θ/dt2I(momento d’inerzia) dL = IΩIτ = Iα I = dL/dt= F x r21 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Moto del corpo rigidoMoto di un singolo corpo rigido Tutte le forze influenzanoil moto del baricentro Alcune forze influenzanoanche il moto rotatorio– Forze che non agiscono uniformemente sututto il corpo– Forze non in linea col baricentro22 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Momento (o tensore) d’inerziad È una matrice 3x3 che rappresentala resistenza di un corpo alla rotazionerispetto ai vari assiI = mr 2(<strong>per</strong> un punto, rispetto ad un asse noto) Nota: è diverso <strong>per</strong> ogni orientazionedi un corpo, ma è possibile esprimerlocomeI(t) = R(t)I body R(t) T23 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Constrained dynamicsLe cose si complicano quando piùcorpi rigidi interagiscono: Collisioni Vincoli(sottrazione di gradi di libertà)24 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


CollisioniArgomento molto vastoIn breve: Collision detection– Banale particelle/piano– Poco banale fra su<strong>per</strong>fici qualsiasi! Collision response– Cruciale dove applichiamo la rispostain un corpo rigido25 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Soluzioni numeriche<strong>per</strong> le equazioni differenziali26


Equazioni differenziali ordinarieUna ODE (Ordinary Differential Equation)di ordine “n” è“un’equazione in cui l’incognitalè una funzione in una variabile indipendente,e che contiene derivate dell’incognitain quella variabile fino all’ordine n” n Esempio:F = ma ovvero d 2 x/dt 2 =F/m(ODE di ordine 2)27 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Soluzioni numeriche Calcoliamo la variazione di x(t)in un intervallo temporale ∆T Metodi famosi– Eulero– Punto di mezzo– Runge Kutta– ecc.28 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Metodo di Eulerodx/dt = f(t)x(t 0 + h) = x 0 + hf(t 0 )29 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Problemi (1/2) Accuratezza– La soluzione non è esatta, ma quantosi discosta da un risultato corretto? Ordine dell’erroreerrore– Che prezzo siamo disposti a pagarein cambio di una maggiore accuratezza? Funzioni di costo(numero di valutazioni di F e F’) F30 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Problemi (2/2) Stabilità– Alcuni metodi rischiano di divergerecompletamente– Equazioni “stiff” Metodi impliciti– Diminuire il passo di integrazione puòservire, ma può costare molto e a voltepuò essere addirittura controproducente!31 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Deriva numerica di R: problema R è la matrice 3x3 che esprimela rotazione di un corpo nello spazio Dopo molte elaborazioni successivesi accumulano gli errori numerici Tuttavia non tutte le matrici 3x3sono matrici di rotazione!– R tende ad allontanarsi dall’ortogonalitortogonalità Effetto grafico e fisico non realistico– Difficile ripristinare R32 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Deriva numerica di R: soluzione (1/2)I quaternioni Estensione dei numeri complessi Un valore reale e tre immaginariQ = a + ib + jc +kdcon i 2 = j 2 = k 2 = ijk = -1 Un quaternione è unitario sea 2 + b 2 + c 2 + d 2 = 1 Ogni quaternione unitarioè interpretabile come una rotazionein 3D e viceversa33 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Deriva numerica di R: soluzione (2/2)Risolvono il problema <strong>per</strong>ché: Hanno solo 4 elementi– Si accumula meno errore Sono facili da correggere– Hanno norma unitaria– Tutti i 4v con norma unitariasono quaternioni! Inoltre:– Meno memoria– Facile interpolare rotazioni34 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Struttura di un motore fisico35


Strutture datistruct Particle {float m; /* massa */float x[3]; /* posizione */float v[3];/* velocita’ */float f[3]; /* risultante */};struct ParticleSystem {int n; /* numero di particelle */Particle **p;float t; /* orologio di sistema */};36 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Metodo GetDerivativevoid GetDerivative(ParticleSystem *ps, float *dst) {for (int i = 0; i < ps->n; i++) {Particle *p = ps->p[i];*(dst++) = p->v[0]; p/* xdot = v */*(dst++) = p->v[1]; p*(dst++) = p->v[2]; p*(dst++) = p->f[0] p/ p->m; p/* vdot = f / m */*(dst++) = p->f[1] p/ p->m; p*(dst++) = p->f[2] p/ p->m; p}}37 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Metodo SetStatevoid 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 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


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 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Struttura generalevoid 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 ComputeForcespiù volte durante un singolo step40 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Caso del corpo rigido La struttura si arricchisce– Rotazione R (o q!)– Tensore d’inerzia dIbody– Velocità angolare (o momento)– Momento della forza T Vanno calcolate forze e momenti41 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Utilizzo di un motore fisico(esempio di ODE)42 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Il software ODE Da non confondere:– ODE, la libreria di simulazione dinamica– ODE, equazioni differenziali ordinarie ODE sta <strong>per</strong> “Open Dynamics Engine” È open source– LGPL– BSD C / C++www.ode.org43 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Inizializzazione di ODE Per prima cosa si crea un mondo(contenitore di oggettiin grado di interagire fra loro)dWorldID world = dWorldCreate(); Successivamente possiamoaggiungere i corpi rigididBodyID body = dBodyCreate(world);44 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


I corpi rigidi (dBody) Metodi <strong>per</strong> settare lo statodBodySetPosition(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 <strong>per</strong> aggiungere forzedBodyAddForce(body, x, y, z);dBodyAddTorque(body, R);/* ... E molte altre varianti *//* vengono azzerate dopo ogni time step */45 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


La massa (dMass) (1/2) Struttura che contiene– Massa– Posizione del centro di gravità– Momento d’inerziad È possibile inizializzarlamediante composizione di massedi solidi elementari– Così non c’ècbisogno di calcolare I46 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


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); Esempio: Altre o<strong>per</strong>azioni:– Traslazione– Rotazione– Adjust (<strong>per</strong> settare la massa totale)47 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Collision detection Collision detection– Esterna– Integrata in ODE L’esitoè una serie di “contact points” Per usare la CD integrata– Ogni corpo deve avereuna sua descrizione “spaziale”48 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


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 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


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); Esempio: Da non confondere:– Creazione massa– Creazione geometrie50 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


I vincoli (dJoint) Limitano i movimenti possibili di uncorpo rispetto ad un altro51 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


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 manodJointSetHingeParam(j2, dParamLoStop, val); I joint possono anche avere una velocitàdJointSetHingeParam(j2, dParamVel, val2);dJointSetHingeParam(j2, dParamBounce, 0.2);52 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Disabilitare i corpi Un corpo “lontano” può esseretemporaneamente escluso dallasimulazione In ODE c’ècla possibilità di farloautomaticamente sotto certe soglie divelocitàdBodyEnable(body);dBodyDisable(body);bool b = dBodyIsEnabled(body);dBodySetAutoDisableFlag(body, 1); Questo funziona <strong>per</strong> “isole” di corpiconnessi53 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


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 accurato54 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


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 ordineparagonabile ... E molto altro!55 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Per approfondire56


Motori fisiciTokamak http://www.tokamakphysics.com/ Tokamak– Nativo in XVR (prossima lezione)– Documentazione scarsa– Gratis ma non open source– Sviluppo fermo?PhysX http://www.ageia.com/develo<strong>per</strong>s/ PhysX– Supporto hardware!– Commerciale– Ottimi strumenti <strong>per</strong> gli sviluppatoriBullet http://www.continuousphysics.com/Bullet/ Bullet– Open source– Integrazione con Blender57 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>


Letture consigliate Il famoso “pa<strong>per</strong> di Baraff”– http://www.cs.cmu.edu/~baraff/sigcourse/ ODE User Guide– http://www.ode.org/ode-latestlatest-userguide.html Novodex/PhysX– Registrazione obbligatoria ☹58 <strong>Modellazione</strong> <strong>fisica</strong> <strong>per</strong> <strong>ambienti</strong> <strong>virtuali</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!