ANIMER LE PISTON AVEC le plugin "OHM MECHANIC"

By jc

--------CREER LE PISTON-----------
----------------------------------------------

Je ne reviens pas sur la modélisation, mais je ne saurais trop vous conseiller d'être précis dans cette étape.
Alors astreignez vous à positionner les éléments clés de chaque pièce du puzzle (axes de rotations, buttées,...) de façon logique dans l'espace 3D, en s'efforçant de n'utiliser que des nombres entiers dans le positionnement XYZ. (merci le gestionnaire de coordonnées!)
En effet, imaginez un peu si dès le départ, vos repères sont en Y= 58,069875... bon courage! :-)

Le piston créé, intéressons-nous à l'objet lui-même: Le piston est composé de deux groupes d'objets distincts:
- Une zone "rouge" (comprenant le rouge et le orange)
- Une zone "bleu" (comprenant les bleus clairs et foncés)


--- 1 --- Traitons tout d'abord chaque zone séparément, sans s'occuper des interactions qui existent entres les deux.
-----------------------------------------------------------------------------------------------------------------------------------------------------------

-1- La zone "rouge"
Créer une chaîne de CI, afin de mettre en place les limitations de mouvements propres à cette zone. (et à cette zone uniquement!)
-> un tag "ancre" pour la "fixation1"
-> un tag de CI pour le "bras1", avec les propriétés suivantes dans notre cas

(nous pourrions ajouter un axe de rotation en Y, entre la fixation et le bras, pour permettre une plus large gamme de mouvement, mais restons simples, et tenons nous juste au "principe" de fonctionnement.)
-> une expression CI pour "extremite1". LAISSER LA CIBLE DE COTE POUR LE MOMENT, on y reviendra en "--- 2---"!

-2- La zone "bleu"
C'est pareil que pour la "rouge", mais en remplaçant le "1" par le "2" ! :-)

-3- conclusion
On a donc créé deux chaînes de CI toutes simples, où la fixation est liée au bras par la CI, autorisant au bras uniquement un mouvement de rotation sur l'axe Z, de 90° et -90°...mais 2 zones toujours indépendantes l'une de l'autre...


--- 2 --- L'interaction de nos deux chaîne de CI.
--------------------------------------------------------------

Notre souhait est qu'en plus de la simple CI par zone : lorsque la fixation ("1" et/ou "2") bouge (sur l'axe X et/ou Y dans notre cas), le "bras1" cible le "bras 2", et inversement...

On va donc créer 2 objets neutres (1 par *zone), qui seront les cibles des expressions CI *des objets "extrémité 1" et "extremite2"
L'enfant de la "fixation1", nommé "axe1", sera la cible de l'expression CI de"extremite2"
L'enfant de la "fixation2", nommé "axe2", *sera la cible de l'expression CI de"extremite1"

-1-
Créer un objet neutre, que l'on nommera "axe1" et le positionner sur l'axe de rotation du "bras1"
(fonction -> transférer-> rechercher "bras1"-> "ok")
Et placer cet objet "axe1" en enfant de la "fixation1"
Faire de même pour "axe2", en remplaçant le "1" par le "2".

-2-
Nos cibles sont en place, il ne reste donc plus qu'à "cibler"!
Dans les attributs du tag d'expression CI de "extremite1", glisser "axe2" dans la cible.
Dans les attributs du tag d'expression CI de "extremite2", glisser "axe1" dans la cible.


--- 3 --- Conclusion

Nous avons créé un piston prêt à être animé, formé de 2 objets distincts.

Si l'on bouge "fixation1" et/ou "fixation2" sur l'axe X les 2 bras restent parallèles... et c'est bien là notre souhait!
Alors, vous allez me dire: oui, mais si l'on écarte trop les fixations l'une de l'autre, le piston se désolidarise...
Vous avez tout à fait raison, mais une fois fixé à l'objet à animer(ce que nous allons voir maintenant...), c'est sur celui-ci que va s'appliquer la contrainte d'amplitude du mouvement, et non sur le piston... ce qui est logique par rapport à une chaîne IK il me semble.

NB: Afin de placer les 2 zones dans un HN (pour qu'il soit plus présentable...), j'ai placé ces 2 zones dans un objet neutre, nommé "piston". Par contre, cet objet neutre doit être placé exactement aux même coordonnées que *"fixation1"... j'expliquerai pourquoi par la suite dans "FIXER LE PISTON".
Et voici le fichier à ce stade
http://perso.wanadoo.fr/akwavox/pist1.c4d



----------- FIXER LE PISTON----------
-----------------------------------------------
Ouvrez le fichier ci-dessous
http://perso.wanadoo.fr/akwavox/pist2.c4d
On y trouve deux planches, et notre piston.
Notre but va être de placer la zone rouge du piston sur la planche verte, et la zone bleu sur la planche jaune.

C'est toujours très simple à réaliser... il faut juste respecter la chronologie ci-dessous:

- 1 - Placer la zone rouge sur la planche verte

Sélectionner le piston (donc l'ensemble rouge+bleu, car ils sont enfants du piston), et placer le sur la planche verte
soit la position suivante: X=0, Y=0, Z=600 (vous voyez que c'est quand même pratique de travailler avec des chiffres ronds...)

- 2 - Placer la zone bleu sur la planche jaune

Sélectionner *"fixation2", et placer le sur la planche jaune
soit la position suivante: X=4700, Y=4700, Z=600
soit la rotation suivante: X=0, Y=0, Z=90°

Et voilà ce que vous devez avoir à l'écran...

- 3 - Fixer les zones à leur planche respective

Pour se faire, dans le gestionnaire d'objet: placer "fixation1" en enfant de "planche1", et "fixation2" en enfant de "planche2".
L'objet neutre nommé "piston" est maintenant vide, et ne nous sert plus à rien, supprimons le!
Vous devriez avoir la hiérarchie suivante:


Et nos deux zones sont maintenant fixées à leur planche respective !!!

----------PARAMETRER LES PLANCHES--------------
--------------------------------------------------------------------

Restons simple, considérons la planche verte fixe, et la jaune mobile...
Nous allons donc affecter à la planche jaune des restriction de mouvement, grâce à OHMmechanic...

Selectionner "planche2" et lui attribuer une expression OHMranger.
fichier->nouvelle expression->OHMranger
Cette expression permet d'affecter à l'objet des restrictions max/min de position/rotation/taille, par rapport au monde (global) ou par rapport à l'objet parent (local).
Dans notre cas,
-> nous voulons que la planche jaune suive la position de la planche verte, donc à la ligne "pos" comme position, cochons X, Y, et Z *et attribué 0 partout
-> nous voulons une rotation limitée, et uniquement en Z de la planche jaune, donc à la ligne "rot" comme rotation, cochons X, Y, et Z *et attribué 0 à X et Y. Pour Z, placer le min à 33° et le max à 50°. (il suffit de tester la rotation manuellement pour trouver ces valeurs)
-> Quant à "scl" comme scale, c'est pour modifier la taille... mais no comment ici.

Et voilà notre hiérarchie terminée:



-----------VOILA C'EST TERMINÉ ! ----------------
------------------------------------------------------------

Vous pouvez maintenant tester le fichier ci-dessous, en effectuant des rotations manuelles à l'objet "planche2".
http://perso.wanadoo.fr/akwavox/pist3.c4d