An simple object-oriented physics engine based on XVR ... - Percro
An simple object-oriented physics engine based on XVR ... - Percro
An simple object-oriented physics engine based on XVR ... - Percro
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
PhysZero<br />
<str<strong>on</strong>g>An</str<strong>on</strong>g> <str<strong>on</strong>g>simple</str<strong>on</strong>g> <str<strong>on</strong>g>object</str<strong>on</strong>g>-<str<strong>on</strong>g>oriented</str<strong>on</strong>g> <str<strong>on</strong>g>physics</str<strong>on</strong>g> <str<strong>on</strong>g>engine</str<strong>on</strong>g> <str<strong>on</strong>g>based</str<strong>on</strong>g> <strong>on</strong><br />
<strong>XVR</strong><br />
Vitillo Roberto Agostino<br />
1
Requisiti<br />
L’architettura deve essere orientata agli oggetti<br />
Il sistema deve essere implementato nel linguaggio di<br />
scripting di <strong>XVR</strong><br />
L’<str<strong>on</strong>g>engine</str<strong>on</strong>g> deve essere facilmente estendibile<br />
Le performance dev<strong>on</strong>o essere accettabili<br />
La simulazi<strong>on</strong>e deve essere stabile<br />
2
Punti materiali<br />
Le particelle rappresentano l’astrazi<strong>on</strong>e<br />
necessaria per gestire dei corpi come punti<br />
materiali, ovvero dei corpi di cui si trascura<br />
l’estensi<strong>on</strong>e spaziale<br />
La distinzi<strong>on</strong>e tra particelle e corpi rigidi<br />
permette di raggiungere un’efficienza<br />
maggiore quando n<strong>on</strong> s<strong>on</strong>o richieste rotazi<strong>on</strong>i<br />
Questa astrazi<strong>on</strong>e è sufficiente per modellare<br />
proiettili, esplosi<strong>on</strong>i, fumo e tanti altri effetti<br />
In teoria, un insieme di particelle collegate c<strong>on</strong><br />
degli opportuni “c<strong>on</strong>straints” che ne limitano il<br />
movimento, potrebbero rappresentare un<br />
corpo rigido ma la simulazi<strong>on</strong>e potrebbe<br />
risultare poco stabile<br />
3
Corpi rigidi<br />
I corpi rigidi s<strong>on</strong>o oggetti materiali soggetti a dei<br />
vincoli di rigidità: n<strong>on</strong> è possibile deformarli<br />
A differenza dei punti materiali hanno un’estensi<strong>on</strong>e<br />
spaziale ed è quindi possibile applicare delle<br />
rotazi<strong>on</strong>i<br />
E’ l’astrazi<strong>on</strong>e utilizzata prevalentemente nei motori<br />
fisici commerciali (e n<strong>on</strong>) e permette di modellare<br />
fisicamente tutte quelle situazi<strong>on</strong>i che n<strong>on</strong><br />
richied<strong>on</strong>o la deformazi<strong>on</strong>e di un corpo<br />
E’ possibile rappresentare ugualmente le<br />
deformazi<strong>on</strong>i negli urti, in alcuni casi, utilizzando<br />
dei modelli pre-deformati che vanno a sostituire<br />
quello originale durante una collisi<strong>on</strong>e<br />
4
Forza e momento torcente<br />
La forza è una grandezza fisica vettoriale che<br />
applicata ad un corpo produce una variazi<strong>on</strong>e<br />
dello stato di moto<br />
Il momento torcente è l’azi<strong>on</strong>e di una forza<br />
che costringe un oggetto a ruotare intorno ad<br />
un asse<br />
Forze e momenti torcenti poss<strong>on</strong>o essere<br />
combinati a piacere nella simulazi<strong>on</strong>e fisica di<br />
un corpo e poss<strong>on</strong>o essere originate da campi<br />
di forza (es. gravità), da interazi<strong>on</strong>i c<strong>on</strong> altri<br />
corpi (es. urti) o da eventi generati dall’utente<br />
(es. key press)<br />
5
Generatori di c<strong>on</strong>tatti<br />
Un generatore di c<strong>on</strong>tatti prende due corpi e restituisce un insieme di<br />
c<strong>on</strong>tatti nel caso in qui questi collid<strong>on</strong>o<br />
Gli attuali generatori implementati generano c<strong>on</strong>tatti per punti<br />
materiali, piani e sfere<br />
6
C<strong>on</strong>tatti<br />
Un c<strong>on</strong>tatto viene generato quando due<br />
corpi collid<strong>on</strong>o<br />
La risoluzi<strong>on</strong>e di questi c<strong>on</strong>tatti permette al<br />
sistema di evitare che gli oggetti penetrano<br />
gli uni negli altri<br />
7
Architettura complessiva<br />
8
Simulazi<strong>on</strong>e<br />
Per l’approssimazi<strong>on</strong>e delle equazi<strong>on</strong>i differenziali ordinarie si è<br />
implementato il metodo di Eulero; Runge-Kutta n<strong>on</strong> dava le<br />
performance sperate anche c<strong>on</strong> pochi corpi<br />
E’ possibile estendere ed aggiungere nuove forze, momenti<br />
torcenti, punti materiali, corpi rigidi e generatori di c<strong>on</strong>tatti a runtime<br />
Le collisi<strong>on</strong>i veng<strong>on</strong>o risolte linearmente (invece che<br />
c<strong>on</strong>temporaneamente), questo permette di raggiungere<br />
performance più elevate tenendo però c<strong>on</strong>to che la qualità della<br />
simulazi<strong>on</strong>e peggiora<br />
I corpi “fermi” s<strong>on</strong>o stabili (n<strong>on</strong> oscillano se il framerate rallenta)<br />
E’ stato implementato anche un supporto minimale per l’attrito<br />
9
Estensi<strong>on</strong>i future<br />
Supporto completo per mesh polig<strong>on</strong>ali arbitrarie<br />
Uso di uno scene graph per migliorare le performance<br />
nella fase di collisi<strong>on</strong> detecti<strong>on</strong><br />
Un supporto completo a vari tipi di collisi<strong>on</strong>i tra<br />
primitive (box-box, box-plane etc.)<br />
Generalizzare il c<strong>on</strong>cetto di c<strong>on</strong>tatto ad un c<strong>on</strong>straint<br />
generico (vedi joints in ODE)<br />
Supporto per vari tipi di attrito<br />
10
Demo<br />
11
Demo<br />
Una scatola che limita il movimento degli oggetti in essa c<strong>on</strong>tenuti<br />
Una serie di particelle (sfere grigie) che interagisc<strong>on</strong>o tra di loro e che<br />
veng<strong>on</strong>o sparate nella scatola all’inizio della simulazi<strong>on</strong>e in maniera<br />
casuale<br />
Due corpi rigidi che n<strong>on</strong> interagisc<strong>on</strong>o tra di loro e c<strong>on</strong> le particelle: un<br />
rettangolo e una sfera<br />
il rettangolo si muove e ruota nella scatola interagendo c<strong>on</strong> essa<br />
la sfera texturizzata è manovrabile dall’utente tramite i tasti w,a,s,d,j<br />
(tenere premuto per effetto jetpack)<br />
Tranne il rettangolo tutti gli altri oggetti s<strong>on</strong>o soggetti alla forza di gravità<br />
e all’attrito<br />
12
C<strong>on</strong>clusi<strong>on</strong>i<br />
Per ottenere risultati visivi anche semplici ma stabili e realistici è<br />
richiesta molta pazienza: la complessità sta nell’ottenere una<br />
simulazi<strong>on</strong>e che n<strong>on</strong> esplode al variare del frame rate, numero di<br />
oggetti, precisi<strong>on</strong>e di macchina, parametri di c<strong>on</strong>figurazi<strong>on</strong>e etc...<br />
Avere un’idea di come implementare un <str<strong>on</strong>g>engine</str<strong>on</strong>g> fisico permette un uso<br />
più proficuo e agile di pacchetti prec<strong>on</strong>fezi<strong>on</strong>ati per la simulazi<strong>on</strong>e fisica<br />
13