03.01.2015 Views

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

SHOW MORE
SHOW LESS

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

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

Saved successfully!

Ooh no, something went wrong!