Conception d'objets volant construits à l'aide de toiles

Par Eric Beaudry (Eric.Beaudry@USherbrooke.ca)

http://planiart.usherbrooke.ca/~eric/ift763/

Objectifs

Simuler en temps réel un cerf-volant et un delta-plane à l'aide d'une méthode inspirée de la physique mécanique

Comparer les méthodes d'intégration Euler et Verlet pour la simulation d'objets composés de toile

Méthodes de simulation de toiles (tissus)

Principe de base

Modélisation avec des particules ayant une masse

Maintenir les particules à une certaine distance cible

Fixer certaines particules (« Nails »)

Deux approches évaluées :

Intégration Euler avec réseau de masses et ressorts

Intégration Verlet avec l'usage de contraintes de distances

Exemple sur un drapeau

Algorithmes d'intégration

Euler

a = somme des forces / m

v = vold + a * Δt

p = pold + v * Δt

vold = v

pold = p

Verlet

a = somme des forces / m

p' = 2p - pold + a * Δt2

pold = p

p = p'

Équivalence :

v = (p – pold) / Δt

Avantages

Euler

Méthode simple

Modélise bien la physique

Contrôle facile de la vitesse

Verlet

Méthode simple

Modélise bien la physique

Contrôle facile des contraintes sans avoir à jouer sur des vitesses

Euler / réseau masses-ressorts

L'objet est morcelé en plusieurs particules :

Position (P)

Masse (m)

Vitesse (V)

Les particules sont reliées à l'aide de ressorts

Longueur au repos (r)

Constante de tension (k)

Constante d'amortissement (d)

Ressorts

L = PA – PB // Vecteur AB

V = VA – VB // Vitesse relative

f = k (l – r) + d (V * L) / l //Force en Newton

F = L * f / l // Vecteur force

FA += F // Force sur A

FB -= F // Force sur B

Longueur au repos : r

Longueur au repos : r

Longueur actuel : l

A

A

B

B

Verlet / contraintes de distance

L'objet est morcelé en plusieurs particules :

Position (P)

Masse (m)

Ancienne Position (Pold)

Les particules sont reliées à l'aide de « Stick » (tige) maintenant une distance cible

Distance cible (r)

Contrainte de distance ( « Stick »)

r

Trop long

Au repos

Trop court

r'

r'

V = B – A

r' = | V |

c = (r' – r) / 2

PA -= cV

PB += cV

A

B

A

A

B

B

Contrainte de distance ( « Stick »)

A

B

C

D

État initial

(création objet)

On tire sur D

(application physique)

A

B

C

D

A

B

C

D

Iteration 1

A

B

C

D

Iteration n

(fin)

...

A

B

C

D

A

B

C

D

Les particules ont toutes subi un avancement d'environ le ¼ du déplacement

initiale de D

Algorithme de satisfaction de contraines

SatisfyConstraints(Particules[1...n], Contraints[1...m], Nails[1...k]) :

Répéter 55 fois :

Cor[1...n] = Vector(0,0,0)

Pour i = 1 à m

V = Constraints[i].P2 – Constraints[i].P2;

V *= (Constraints[i].r - |V|)

Cor[Constraints[i].id1] += V * (Constraints[i].imass1)

Cor[Constraints[i].id2] -= V * (Constraints[i].imass2)

Pour i = 1 à n

Particules[i].pos += Cor[i]

Pour i = 1 à k

Particules[i].pos = Nails[i].fixedPos

Algorithme principale

À chaque 1/100 seconde

ApplyPhysic() // calcule les forces...

ApplyVerlet()

SatisfyConstraints(...)

TestCollisions()

Rafraîchir l'écran

Les forces

Gravité : G = 9.80665 N/s2

Vent :

airDensity ~= 1.294217666 Kg/m3

Vel = (VA + VB + VC) / 3

Wrel = Wind – Vel

N = (AB) x (BC)

WreldotABxBC = N * wrel

K = airDensity * WreldotABxBC2 / |N|2

FA += k * N

FB += k * N

FC += k * N

A

B

C

Wind

Comparaison

Exécuter testDrapeau ...

Verlet : 100 iter / sec

Euler : 1000 iter / sec

Conception du cerf-volant

Toile principale triangulaire

Conception du cerf-volant (2)

Toile principale triangulaire avec des

surfaces triangulaires

Conception du cerf-volant (3)

Particules « virtuelles » en haut et en bas pour

maintenir les côtés et le centre rigides

Conception du cerf-volant (4)

Cerf-Volant

Contrôle

Bouger le point d'ancrage de la corde

Conception du deltaplame

Toile principale triangulaire

Conception du deltaplane (2)

3 particules virtuelles (haut, centre et bas) pour maintenir

la rigidité des tiges latérales et centrale

Conception du deltaplane :
fixation de la personne

Le pilote modélisé est fixé sous le deltaplane par des «sticks» reliés à la structure rigide du deltaplane

Contrôle du deltaplane

Le contrôle du deltaplane est fidèle à la réalité : c'est en déplaçant le poids du pilote qu'on peut contrôler la structure

Quand l'usager veut bouger, on change les longueurs au repos des «sticks» de maintien.

Ce changement exerce une tension et force une correction de la position du pilote sous le deltaplane

Puisque le pilote a une masse plus importante que le deltaplane, le mouvement du deltaplane est plus important que celui du pilote

Ainsi, de cette façon, l'usager arrive à modifier l'angle de piqué

Collision avec le sol

Utilisation d'un champ de hauteur (« height field»)

Si la composante altitude d'une particule est inférieur au niveau du sol, on ne fait que corriger

Algo:

Pour toute particule p

Z = terrain.getLevel(p.x, p.z)

if(p.z < Z) p.z = Z

Amélioration possible des collisions

Pold

Pnew

Correction

actuelle

Correction

améliorée

Limitations

La pression d'air n'est pas modélisée

Il n'est pas possible de modéliser une poche d'air

Exemple : un parachute

Ce qui fait gonflé un parachute, c'est la pression d'air à l'intérieur

En utilisant le modèle actuel, un parachute ne se gonflerait pas et tomberait

Solution : ajouter des contraintes sur le contour

Parachute

Parachute (2)

Parachute (3)

Hum...

Conclusion

L'utilisation de l'intégration Verlet avec des contraintes de distance est appropriée pour la simulation d'objets composé de toile

2004-12-19T19:38:20