Dinamica di corpi deformabili
basata sulle posizioni
Candidato: Andrea Bracciale
Relatore: Prof. Marco Schaerf
Correlatore: Ing. Marco Fratarcangeli
Obbiettivo
Framework che simula il comportamento di corpi deformabili
simulazione fisicamente plausibile
un numero di frame per secondo superiore ai 20
trovare un compromesso tra velocità e qualità
velocità
simulazione
non reale
qualità
giusto
compromesso
scarsa
interattività
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Struttura dei corpi
oggetto complesso da
simulare
corpo deformabile
viene suddiviso in elementi più
piccoli ognuno in relazione con
gli altri
sistema mass-spring
Particelle
opportunamente
disposte nel volume
occupato dal corpo
Vincoli
limitano il
movimento e le
posizioni delle
particelle
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Struttura dei corpi
tessuto
particelle
struttura nascosta
vincoli
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Struttura dei corpi
Esempio 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
Algoritmo
Per ogni time step
Applicare le forze e
aggiornare le
posizioni
Per ogni oggetto
Applica le forze
agenti sul corpo
Testare le collisioni
Aggiorna la posizione
delle particelle
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
velocità implicitamente
memorizzata all’interno
della differenza tra
posizione corrente e
quella al passo
precedente
posizione
corrente
a = f/m
time step
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
Metodo utilizzato: Simulazione con dinamica basata sulle posizioni
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
Algoritmo
Per ogni oggetto
Per ogni time step
Applicare le forze
e aggiornare le
posizioni
Testare le collisioni
Risolvere i vincoli
Il numero
di
iterazioni
è pari a
N?
si
Cancella i vincoli di
collisione
no
Aggiorna la posizione
delle particelle per far
rispettare tutti i vincoli
dell’oggetto
Aumenta il numero di
iterazioni di uno
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 - Stretching
Determinano 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
Vincolano gli angoli diedri tra le facce di una mesh
e costante di rigidità kbend = [0..1]
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 - Overpressure
Fanno si che il volume di un’oggetto rimanga invariato
Volume attuale
Volume iniziale
Kpressure determina quanto il volume può variare da quello
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 - Collisione
Generati in caso di collisione e cancellati dopo ogni time-step
p1
p
n
q
p3
p2
p2
p3
n
q
p1
p
In effetti il calcolo effettuato
è più complesso perché viene considerato
n
anche lo spostamento della faccia dopo l’urto
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
Per ogni oggetto
C’è una
collisione
con altri
oggetti?
no
Continua
si
Aggiungi un vincolo di
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
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
Spatial
Hashing
Aggiunta di un vincolo di collisioneLe 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
Dipartimento di Informatica e Sistemistica -Università di Roma "La Sapienza" - Andrea Bracciale
Scarica

Dinamica di corpi deformabili basata sulle posizioni