PDA

Voir la version complète : Xpresso pour l'animation de Voitures ;)



Rompower
31/01/2007, 21h48
Bonsoir les amis,

comme vous le savez peut être, j'aime bien les voitures :mrgreen: (scoop de l'année ^^ )

comme vous le savez aussi peut être, je travaille depuis un certain temps sur un projet de court métrage, qui met en scène des voitures qui roulent ( :shock: si si! :!: ), seulement voilà, pour animer toute cette histoire y a pas 36 solutions, il me faut un expresso qui me permette de travailler de manière plus précise. Les objectifs sont les suivants:

=> 1 Gestion simplifiée (Curseurs User Data) de la voiture, comprenant :
- Direction
- Portes
- Phares
- Capot
- Vitres

=> 2 Calcul automatique réaliste de la rotation de chaque roue individuellement, dans n'importe quelle position/mouvement, même en dérapage. :coup:

=> 3 Calcul automatique du roulis en fonction de l'intensité de l'accélération horizontale (les "G" latéraux) :poucehaut:

=> 4 Calcul automatique de l'inclinaison de la voiture dans le sens de la conduite (accélération, freinage) :poucehaut:

=> 5 Un réglage "Burnout", un curseur User Data qui fait "patiner" les roues en les faisant tourner X fois plus vite que ce qu'elles devraient (d'après le calcul automatique cité plus haut), couplé à des émetteurs de particules, qui vont produire de la fumée de manière proportionnelle au patinage des roues.

et peut être plus à venir...

Pour ce qui est de la gestion simplifiée, je sais le faire, pour les G latéraux j'ai ma petite idée, pour l'inclinaison il y a toujours l'excellent tuto de base (http://www.base80.com/index.php/2005/11/07/p95#more95) ;) , pour le "burnout", je me suis déjà fait une telle formule, mais c'est encore perfectible.

En fait ça fait déjà un certain temps que ça me trotte dans la tête, j'avais déjà fait des essais d'Xpressos sur la Evo en 2005:

http://www.hiboox.com/images/0507/3476223d.jpg

Le gros problème vient du calcul automatique de la rotation des roues en fonction du déplacement du véhicule. J'avais utilisé un Expresso assez simple pour ma dernière animation de la supra:

http://www.hiboox.com/images/0507/9abe5b8e.jpg (http://video.google.fr/videoplay?docid=-806380449538726888)

http://www.hiboox.com/images/0507/6ddc33fd.jpg

Il reprenait le principe de Blazouf selon lequel il suffit de mettre en relation la distance parcourue et le périmètre de la roue pour connaître sa rotation. Plus simple tu moeurs! :poucehaut: ça marche super bien, mais seulement pour les MRU (Mouvement Réctiligne Uniforme) :arg:

Bref, voici les conclusions que j'ai tirées de mes expérimentations diverses:

- Tout d'abord le problème du MRUA (Mouvement Réctiligne Uniformément Accéléré) : dès qu'il y a accélération il y a variation de vitesse, donc on doit inclure la notion de temps d'une manière ou d'une autre.

- Ensuite le problème géométrique: une voiture a 4 roues, dont 2 qui peuvent pivoter, chaque roue tourne à une vitesse différente (sauf en ligne droite), il est donc indispensable que la rotation de chaque roue soit calculée indépendamment des autres.

- Finalement les difficultés liées aux dérapages, patinages, etc... : une roue ne peut pivoter que dans un seul sens, le fait de la faire glisser latéralement ne la fera pas tourner, il faut donc mesurer sa distance parcourue dans une certaine direction uniquement.


Voilà, le problème est posé. Je me suis amusé récemment à réfléchir à comment le résoudre, avec un peu de trigo et de logique, je pense avoir trouvé une solution.

http://www.hiboox.com/images/0507/b3664b3d.jpg

http://www.hiboox.com/images/0507/6253d944.jpg

ça peut parraîte compliqué comme ça mais en fait c'est simple:

pour établir la distance parcourue par la roue dans la direction de rotation:

soient:

X1 = position sur X de la roue au temps 1
X2 = position sur X de la roue au temps 2 (une image plus loin)
Z1 = position sur Z de la roue au temps 1
Z2 = position sur Z de la roue au temps 2 (une image plus loin)

X2-X1 = la distance parcourue sur l'axe X
Z2-Z1 = la distance parcourue sur l'axe Z

pour obtenir la distance parcourue par la roue dans le sens de rotation, il suffit d'utiliser l'angle global "alpha" de la roue (rotation sur l'axe Y):

si le sens de rotation est dirigé sur l'axe X lorsque "alpha" = 90° , alors il suffit de poser:

[(X2-X1) * Sin (alpha)] + [(Z2-Z1) * Cos (alpha)] = distance parcourue dans la bonne direction (étant donné que Sin (90°) = 1 )

sous expresso ça donne ça:

http://www.hiboox.com/images/0507/4fc27655.jpg

J'ai testé et ça marche niquel :poucehaut:

Cela nous donne la distance parcourue dans le sens de rotation depuis l'image précédente, et par conséquent la rotation effectuée par la roue depuis l'image précédente, appelons celle ci "delta alpha".

Hors, la coordonée de rotation de la roue que le programme doit recracher est composée de :

- "delta alpha"
+
- l'angle de la roue à l'image précédente.

il faudrait donc additionner le total des "delta alpha" depuis le début de l'animation, pour que la coordonnée soit juste :| :?:

ou éventuellement refaire le tout de manière vectorielle, mais ça je m'y connais pas du tout :arg:

Voilà, toute aide est la bienvenue!

je posterai ici l'avancée de mes recherches,

l'expresso calculant la rotation des roues sera mis dans les ressources du site. :wink:

D'avance merci! :prie:

base80
01/02/2007, 02h55
urf t'est folle toi :D

si j'ai bien compris il y a un type qui prétend développer un plug qui fait tout ce que tu veux.
C'est des saloperies toute ces maths. La petite voiture de ma grand mère est très bien grée par mn basecar 0.41 mais si tu veux faire le sauvage dans ta caisse c'est pas le bon outil.
La basecar s'occupe bêtement de faire des divisions de distances et de circonférences de pneus. Faire pencher la voiture dans un virage reste dans les possibilités ( j'en ai fait un tut) mais les dérapages de roues ça c'est autre chose.

Mon approche du basecar consiste en : l'objet avance donc les roues rotes (rotationisent) en réalité le moteur fait tourner la roue et celle si fait avancer la voiture. le dérapage est la suite de trop de force sur la roue et pas assez de friction pour faire avancer le bazar (une perte d'énergie que les djeuns aiment)
Pour simuler ce dérapage je doit refaire la base car complètement a l'envers. pas évident du tout.

Mais...
Je pense que la basecar peux faire une très grosse partie du taf mais tu va devoir animer certain trucs a la main.

edj kodiak
01/02/2007, 03h47
les roues rotes (rotationisent)


on dit "tournent" tout simplement, du verbe tourner (to rotate)
pourquoi employer des mots bizarres ???

Base tu es excusé, mais attention la prochaine fois, sinon tu vas nous redéclencher un topic sur la facon d'ecrire ^^,
bon okay on a appris beaucoup, donc tu peux relancer :mrgreen:

désolé pour le dérangement :oops:

sinon pour le sujet ... ça sert a quoi tous ces calculs ???
ok :arrow:

Lt.Col.Powell
01/02/2007, 04h17
Salut !

Pour tes roues qui doivent tourner de façon réaliste, il y a le Tag Coffée de Majoul.

C'est un tag que tu colles à un objet neute dans lequel il ya un objet neutre par essieux. Tu colles ton tag et hop Magie ça tourne nickel !

Voila comme ca c'est dit !
:odile:

Rompower
01/02/2007, 09h50
Merci pour vos réponses les gars! :prie: :poucehaut:

Base: j'ai vu quelques uns des tutos présent sur ton site, ils sont géniaux, originaux, et super bien expliqué, MERCI :prie:

cependant dans ce cas ça va pas le faire avec le moteur parce que ça serait infiniment trop complexe, faudrait prendre en compte les différentiells, LSD, traction intégrale... la Mitsubishi a une transmition de malade et la supra a une espèce de traction control d'origine, donc si je veux pas finir chauve et dans un asile, ça va pas être réalisable. :nono:

Je vais certainement m'inspirer de tes tutos, j'ai déjà pu me faire de super combinés filetés (amortisseurs) grâce à ton tuto sur les ressorts, suffisait d'adapter un poil :bave: :poucehaut:


Kodiak: c'est juste que pour qu'un animation soit crédible, faut que la voiture se comporte de manière réaliste, et obéisse aux lois de la physique, et le fait que les roues tournent c'est assez essentiel, et faut qu'elles tournent de manière correcte. ;)


Lieutenant , Recrue Schmitz au rapport! http://forum.hardware.fr/images/perso/esheep.gif

alors là je suis carrément curieux! c'est dans les ressources du site? :bave:

merci en tous cas, je vais tester, même si le café ça a jamais été mon truc (dans tous les sens du terme)

edit: je cherche... http://perso.orange.fr/archizone/Accueil.htm

edit2: et je trouve! http://www.frenchcinema4d.com/forum/index.php?topic=15216.msg278972#msg278972

:poucehaut: :bave:

BerTiN03
24/02/2007, 15h18
C'est clair que c'est un truc de malade tout ça...

Et si t'allais voir de ce coté la : http://www.heyne-multimedia.de/c4dplugin/indexx.php?l=en