- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Deviens membre Premium magic_button
Débloque cette session en devenant Membre Premium 🚀
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette vidéo, on va voir comment créer un script qui va nous permettre de créer des joints et un IKHandle à partir de locators.Donc par exemple, si je crée des locators ici, c'est quelque chose qu'on fait assez régulièrement quand on a du rig.
00:00:14 :En fait, on va avoir des locators à différentes positions comme ceci.Et avec le script qu'on va créer, on va pouvoir sélectionner ces locators dans l'ordre, exécuter notre script et avoir automatiquement une chaîne de rig qui se faitavec un IKHandle à la fin qui nous permet de déplacer notre chaîne de rig.
00:00:31 :Et vous voyez qu'on a également supprimé les locators.Donc le but de cet exercice ici, si vous souhaitez le faire de votre côté, c'est de récupérer la sélection, de récupérer ensuite la position de chaque locator dans notre sélection,de créer un joint sur la position de ces locators et ensuite de créer un IKHandle entre le début et la fin, donc entre le premier et le dernier joint.
00:00:54 :Et ensuite supprimer les locators pour ne garder que les joints et le IKHandle.Donc voilà le script que l'on va réaliser ensemble.Comme je vous dis, vous pouvez essayer de votre côté si vous le souhaitez.
00:01:04 :Et si vous voulez voir la solution, eh bien continuez de regarder.On va faire tout ça ensemble.Donc déjà, je vais créer des locators.Donc ça, je vais le faire à la main.
00:01:11 :On crée des locators à différentes positions et on va récupérer ensuite ces locators en récupérant la sélection.Donc pour ça, on utilise mc.ls qui nous permet de lister certaines choses dans notre scène.
00:01:23 :Dans notre cas, on va lister ce qui est sélectionné.Donc sl égale true et on va récupérer ça dans une variable que je vais appeler locators.
00:01:31 :Donc ça, ça va me permettre de récupérer ici la liste des objets qui sont sélectionnés.Donc si je sélectionne les locators ici et que je récupère ma sélection en exécutant cette ligne, on a bien les quatre locators ici.
00:01:42 :A noter que ça va les récupérer dans l'ordre dans lequel je les ai sélectionnés.Donc là, vous voyez quand je sélectionne tout, c'est un peu aléatoire.
00:01:49 :Et si je sélectionne par contre le premier, le deuxième, le troisième, le quatrième et que je refais ces lignes de code,vous allez voir que cette fois-ci, j'ai bien un, deux, trois et quatre.
00:01:58 :Donc c'est exactement ce qu'on veut puisqu'on va vouloir créer les joints dans l'ordre dans lequel on a sélectionné les locators.Et quand on va boucler sur cette liste, ça va boucler dans l'ordre de la liste.
00:02:07 :Donc avec le premier, le deuxième, le troisième et le quatrième.Une fois qu'on a récupéré la sélection, on va tout désélectionnerpuisqu'on ne veut pas avoir des éléments de sélectionner quand on va créer les joints.
00:02:17 :Sinon ça les mettrait en enfant et ça poserait des problèmes.Donc on va faire un mc.select et on va dire clear égale à true.Ça, ça va me permettre de tout désélectionner et comme ça de pouvoir commencer avec la création des joints.
00:02:29 :On va auparavant créer une liste vide.Donc je l'appelle joints et je crée une liste avec les crochets.Et en fait, on va ajouter dans cette liste chaque joint que l'on va créer.
00:02:39 :Et ça va nous permettre par la suite de récupérer le premier et le dernier élément de cette liste pour créer notre IKHandle.Donc je crée une liste qui pour l'instant est vide mais on va la remplir par la suite.
00:02:49 :On va ensuite commencer une boucle.Donc pour boucler sur tous les locators qu'on a récupéré ici.Donc on va dire pour locator in locators.Donc là n'oubliez pas le S ici, ça c'est bien la liste des locators.
00:03:01 :Et là je crée juste une variable qui s'appelle locator,qui va correspondre à chaque locator ici que l'on va utiliser pour récupérer la positionet créer le joint.
00:03:09 :Donc pour récupérer la position on fait un get attribute.On va récupérer donc notre locator et on va additionner à ça le point translate.Donc là il y a différentes façons de faire, vous voyez que là j'ai utilisé le plus.
00:03:21 :On aurait pu faire un fstring également.Là on a une chaîne de caractère locator et on va lui ajouter une chaîne de caractère.Donc ça ne pose pas de problème.
00:03:28 :On pourrait également faire un fstring et ici dans les accolades mettre locator.Ça fonctionnerait de la même façon.La première façon de faire elle marcherait avec Python 2.
00:03:36 :Donc avec les versions anciennes de Maya.Et comme nous on a Python 3 ici, on peut utiliser les fstrings.Donc on va récupérer le translate.
00:03:45 :On va récupérer ça dans une variable qu'on va appeler pose.Je vais mettre donc pose égale à mc get attribute.Et on ne va pas aller plus loin, on va déjà faire un print de ça pour voir ce que ça nous retourne.
00:03:54 :C'est important quand vous faites des scripts de ne pas aller trop loin,de ne pas écrire plein de lignes de code d'un coup.On va déjà exécuter ça et voir ce que ça nous donne.
00:04:01 :Donc je prends tout ce code, je l'exécute.Et là vous voyez qu'on a quelque chose d'assez surprenant.En fait on a une liste qui contient un autre élément qui dans ce cas-ci est un tuple.
00:04:10 :Donc un tuple c'est un peu comme une liste si vous voulez.C'est représenté par les parenthèses ici.La seule différence c'est qu'un tuple on ne peut pas le modifier.
00:04:17 :Donc nous dans ce cas-ci on a une liste qui contient un seul élément qui est un tuplequi va contenir les trois valeurs x, y et z.
00:04:23 :Donc nous on n'a pas besoin de la liste.On veut juste récupérer le tuple avec les trois positions.Donc ici je vais mettre crochet 0 pour récupérer le premier élément de cette listequi correspond à la position des locators.
00:04:34 :Donc si je sélectionne tous les éléments ici, maintenant que j'ai ajouté crochet 0,on refait le print et là vous voyez qu'on a directement le tuple avec les positions.
00:04:42 :Puisqu'on n'a pas besoin de la liste en plus, on veut directement les trois valeurs à l'intérieur du tuple.Je vais pouvoir ensuite créer un joint avec mcJointet on va mettre ici la position à laquelle on souhaite créer les joints.
00:04:54 :Donc on va dire p qui est le short name pour position pour le mettre au complet.Là dans ce cas-ci je vais juste mettre p égale pos.
00:05:01 :Donc qui est cette variable qu'on a récupéré ici.Alors vous voyez là c'est bien important de récupérer avec le crochet 0 ce premier élémentpuisque le p ici il s'attend à avoir une liste ou un tuple.
00:05:11 :Donc il peut avoir l'un ou l'autre, mais en tout cas il veut un élémentqui contient les trois valeurs de la position.Donc si on ne met pas le crochet 0 ici et qu'on lui passe directement une listequi contient le tuple, il ne va pas être content et on va avoir une erreur.
00:05:23 :Donc nous on lui passe directement le tupleet on va récupérer ce qu'on a créé ici dans une variable que je vais appeler j.Alors on pourrait l'appeler joint, ça ne poserait pas de problèmepuisque ici le joint ici, la fonction joint, elle est à l'intérieur du mayacommand.
00:05:36 :Donc mc ici.Donc dans ce cas-ci on pourrait l'appeler jointet ça n'écraserait pas cette fonction qui se trouve à l'intérieur du module.Si par contre on importait directement cette fonctionen faisant from maya.cmds import joint, là ce serait problématique.
00:05:48 :Donc là je vais juste l'appeler jointet on va ensuite ajouter cette variable que l'on a créée à notre liste.Comme ça, ça va nous permettre de récupérer le nom des joints que l'on va créer.
00:05:58 :Alors avant ça, je vais juste faire un printpour m'assurer que quand on crée un joint, ce qu'on récupère icic'est bien directement le nom du jointet non pas une liste qui contiendrait plusieurs éléments.
00:06:07 :Donc je sélectionne de nouveau des locators, j'exécute tout ce scriptet là vous voyez qu'on a bien notre chaîne qui commence à se créeravec le joint 1 et le joint 2et ici on a bien directement joint 1 et joint 2.
00:06:19 :On n'a pas de liste, donc on va pouvoir ajouter directementcette chaîne de caractère qui correspond au nom des objetsdans notre liste joint ici.
00:06:26 :Alors pour ajouter dans une liste, on fait joints.appendet on ajoute notre variable.Donc append, ça permet d'ajouter dans une liste.Donc comme ça, à la fin de cette boucle, dans jointson aura le nom de tous les joints que l'on aura créésà l'intérieur de cette boucle.
00:06:41 :Je vais ensuite supprimer les locatorsdonc je vais utiliser mc deleteet on va lui passer directement la listede tous les locators, donc la liste que l'on avait récupérée au début.
00:06:50 :Comme ça, ça va supprimer directement tous les objets qu'on lui passe icidonc la liste de tous les locators.Donc avant d'aller plus loin, je vais supprimer ce que j'ai déjà iciet on va voir si tout ça fonctionne.
00:06:59 :Donc je sélectionne mes joints ici,j'exécute le scriptet là on a bien la chaîne de joints qui est crééeavec les locators qui sont suppriméset si j'affiche joints en faisantctrl entrée sur cette variable icivous voyez qu'on a bien les 4 jointsqui sont dans notre liste. Donc c'est parfait
00:07:15 :il ne nous reste plus qu'à créer le IKHandleentre le premier et le dernier joint.Donc là il va falloir sélectionnerle premier joint et ensuite sélectionnerle dernier ici et làvous voyez qu'on a les deux lignes de code qu'on a besoin d'utiliser.
00:07:27 :Donc on a le select avecjoint 1 et le select avec joint 4le R ici ça veut dire replacedonc ça veut dire qu'on va remplacer notre sélectionpar le joint 1et le add ici ça veut dire qu'on va ajouterà notre sélection. Donc ça c'est quand on maintient
00:07:41 :la touche commande sur macOSpour ajouter des éléments dans notre sélection.Donc on va faire unmc.select et on va lui passerle premier joint de notre liste.
00:07:51 :Donc pour ça on fait joint et on met crochet0 pour récupérer le premier élément.On va mettre R égaleatchou puisqu'on veut remplacer notre sélectiondonc c'est le R qu'on avait ici qu'il faut mettreatchou pour lui dire qu'on veut remplacernotre sélection. On va faire un
00:08:05 :select avec le joint et cette fois-cion va récupérer le dernier. Alors pour récupérerle dernier élément de notre liste on peut fairemoins 1 tout simplement et ça va partirde la fin de notre liste. Donc ça c'est
00:08:15 :très pratique puisque ça va nous permettrepeu importe la taille de notre liste de récupérerle dernier élément. Si on mettaitpar exemple 3 ici pour récupérer lequatrième élément de notre liste ça nefonctionnerait que dans le cas où on a 4locators. Et si jamais on avait 5
00:08:29 :locators il faudrait aller modifier notre script icidonc ce n'est pas ce qu'on veut. On veut que tout çasoit fait automatiquement. Donc pour ça
00:08:35 :on met moins 1 et comme ça on va récupérer avec0 le premier et avec moins 1 le dernierélément. On met add égale atchou
00:08:41 :pour ajouter à notre sélectionet ensuite il ne nous reste plus qu'à créerun hack and all sur cette sélection.Donc on fait mc.hackandallattention mettez bien la majusculeici sur le h et on va récupérerle hack and all qui est créédans une variable que je vais appeler handle
00:08:57 :et on va ensuite sélectionner ce handledonc mc.selecthandleet on va remplacer notre sélectionlà encore donc on va dire r égale truepour remplacer les join que l'on avaitde sélectionner. Donc normalement tout
00:09:09 :est bon on va tester le script. Donc làvous voyez ce que ça donne au final on a17 lignes de code avec les espacesdonc je vais supprimer ma chaîne de joinje vais recréer un locatorset faire une chaîne comme cecije sélectionne les locatorsdans l'ordre donc en ajoutant à ma sélection
00:09:25 :et j'exécute tout le scriptet on a bien notre chaîne qui est crééeavec le hack and all qui est sélectionnéautomatiquement et là je peux doncdéplacer cette chaîne de join et on a biensupprimé tous les locators qui nous ont servià créer cette chaîne de join. Donc
00:09:39 :vous voyez vraiment une petite vingtainede lignes de code même pas 20 lignes de code pour créerça. C'est le genre de script très pratique
00:09:45 :que vous pourriez avoir besoin de faire en rigil y en a plein plein plein des scripts comme ça quandvous utilisez des outils de rig et vous voyezque ce n'est pas forcément très compliqué.
00:09:53 :Là encore on utilise la plupart du temps des fonctionnalitésde Maya donc comme la sélectionle delete, le get attributedes fonctions pour créer des objetset ensuite c'est que de la logiquede Python donc la boucle pour boucler surnotre sélection, un peu de manipulationde données donc ça c'est les choses que vous ne connaissez pas encore
00:10:09 :tout à fait comme par exemple la manipulationdes listes donc comment créer des listes, commentajouter des éléments à des listes, tout çac'est toutes les petites choses qu'il va falloir apprendreau fur et à mesure pour pouvoir manipulerdes données et faire ce que vous voulezavec donc dans ce cas-ci récupérer
00:10:23 :une liste pour pouvoir par la suite sélectionnerdifférents éléments dans notre liste et utilisercette sélection pour créer notrehack and roll. Donc voilà pour ce script
00:10:31 :je vous conseille de le revoir en détaild'essayer de le refaire maintenant que vous avez vula solution aussi de votre côtédonc supprimez tout ça, essayez de le refairede votre côté avec peut-être quelques modificationsdonc en ajoutant par exempleun groupe ou en faisant d'autres modificationspour renommer le nom des joints
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.