View
220
Download
0
Category
Preview:
Citation preview
Dinamica di corpi deformabili basata sulle posizioni
Candidato: Andrea Bracciale
Relatore: Prof. Marco Schaerf
Correlatore: Ing. Marco Fratarcangeli
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Obbiettivo
simulazione fisicamente plausibile
un numero di frame per secondo superiore ai 20
trovare un compromesso tra velocità e qualità
velocità qualità
giusto compromesso
scarsa interattività
simulazione non reale
Framework che simula il comportamento di corpi deformabili
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Struttura dei corpi
corpo deformabile oggetto complesso da simulare
Particelle
opportunamente disposte nel volume occupato dal corpo
Vincoli
limitano il movimento e le posizioni delle
particelle
viene suddiviso in elementi più piccoli ognuno in relazione con
gli altri
sistema mass-spring
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Struttura dei corpitessuto struttura nascosta
particelle vincoli
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Struttura dei corpiEsempio corpo complesso
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Simulazione
• spostare le particelle applicando la legge di Newton F = ma
• applicare i vincoli per muovere le particelle in una posizione corretta
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Algoritmo
Per ogni time step
Applicare le forze e aggiornare le posizioni
Testare le collisioni
Risolvere i vincoli
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Per ogni time step
Testare le collisioni
Algoritmo
Per ogni oggetto
Applica le forze agenti sul corpo
Aggiorna la posizione delle
particelle
Applicare le forze e aggiornare le
posizioni
Risolvere i vincoli
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Aggiornamento delle posizioni
Equazione della dinamica di una particella
Esistono diversi metodi per risolverla, in questo caso serve uno che garantisce stabilità e prestazioni
Metodo di integrazione di Verlet
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Metodo Verlet
nuova posizione posizione corrente
a = f/m time step
velocità implicitamente memorizzata all’interno
della differenza tra posizione corrente e
quella al passo precedente
sistema stabile e molto veloce anche se non estremamente
accurato (dissipazione di energia)
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Aggiornamento delle posizioni
Simulazione con dinamica basata sulle posizioniMetodo utilizzato:
Controllo diretto sulla posizione dell’oggetto modificando direttamente le coordinate
spaziali delle particelle
Rimozione dei problemi di instabilità
Possibilità di modificare la posizione delle particelle durante la simulazione
Semplicità di applicazione dei vincoli
Algoritmo rapido e semplice
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Per ogni time step
Applicare le forze e aggiornare le
posizioni
Testare le collisioni
Risolvere i vincoli
AlgoritmoPer ogni oggetto
Il numero di
iterazioni è pari a
N?
Aggiorna la posizione delle
particelle per far rispettare tutti i
vincoli dell’oggetto
Aumenta il numero di iterazioni di uno
Cancella i vincoli di collisione
si
no
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Vincoli
Strutturali – generati al momento di creazione dell’oggetto
Stretching
Bending
Overpressure
Collisione – generati durante la simulazione e cancellati alla fine di ogni time-step
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Vincoli - StretchingDeterminano la distanza tra le particelle
Cdist(p1,p2) = |p1 – p2| – d
e costante di rigidità kstretch = [0..1]
conservazione della quantità di moto
conservazione del momento angolare
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Vincoli - Distance
kstretch = 1
kstretch = 0,05
kstretch = 0,001
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Vincoli - Bending
e costante di rigidità kbend = [0..1]
Vincolano gli angoli diedri tra le facce di una mesh
conservazione della quantità di moto
conservazione del momento angolare
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Vincoli - Bending
Costante di bending pari a 1
Costante di bending pari a 0
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Vincoli - OverpressureFanno si che il volume di un’oggetto rimanga invariato
Kpressure determina quanto il volume può variare da quello iniziale
Volume attuale Volume iniziale
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Vincoli - Overpressure
Kpressure = 1
Kpressure = 0
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Vincoli - CollisioneGenerati in caso di collisione e cancellati dopo ogni time-step
n
p1
p2p3
n
q
p
p2 p1p3 q
p n
In effetti il calcolo effettuato è più complesso perché viene considerato anche lo spostamento della faccia dopo l’urto
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Per ogni time step
Algoritmo
Per ogni oggetto
Aggiungi un vincolo di collisioneRisolvere i vincoli
Applicare le forze e aggiornare le
posizioni
Testare le collisioni
C’è una collisione con altri oggetti?
si
noContinua
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Collisioni
Verifica delle collisioni delle Bounding Box
Individuazione dei vertici che collidono
Aggiunta di un vincolo di collisione
Calcolo molto semplice e veloce per testare le collisioni
A fronte di un leggero calcolo in più in caso di collisione, c’è un grande risparmio di calcolo in caso di mancata collisione
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Collisioni
Verifica delle collisioni delle Bounding Box
Individuazione dei vertici che collidono
Aggiunta di un vincolo di collisione
Spatial Hashing
Le facce che compongono la mesh di uno degli oggetti vengono mappate secondo in una griglia di dimensioni definite dall’utente
Vengono calcolati gli indici di hash per ogni cella che contiene le facce dell’oggetto
Si calcolano gli indici di hash per ogni vertice appartenente all’altro oggetto
Se un vertice ha un indice uguale a uno di quelli calcolati in precedenza si verifica una collisione tra la particella e la faccia
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Collisioni
Verifica delle collisioni delle Bounding Box
Individuazione dei vertici che collidono
Aggiunta di un vincolo di collisione
Una volta verificata la collisione, viene generato un vincolo contenente la particella e
la faccia che hanno colliso
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Risultati ottenuti
framework
simula contemporaneamente corpi deformabili con diverse strutture
gestisce le collisioni senza subire rallentamenti significativi
ha un algoritmo stabile, leggero e visibilmente valido
utilizzabile anche in applicazioni interattive (videogiochi o animazioni in tempo reale)
semplice estensione a nuove caratteristiche
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Risultati ottenuti
75 iterazioni
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Lavori futuri
collisione con corpi rigidi
attrito dinamico e statico
aggiunta del self-collision
Recommended