Programare Python Maya HumanIK

Avem un personaj nou, care, pe langa scheletul personajului de saptamana trecuta mai are niste obiecte folosite pentru animatii mai spectaculoase. Deschidem fereastra Outliner  si le vedem acolo , grupate in obiectul Character1_Ctrl_Reference. Aceste obiecte se numesc HumanIK si deschidem fereastra  cu acelasi nume. O deschidem si pe cea pentru programare. Selectia obiectelor HumanIK o pot face si din Outliner si din fereastra HumanIK. Saptamana trecuta am vazut ca operatiile de tip “move” nu erau bune asa ca am folosit doar “rotate”. Acum vom incerca sa mutam obiectele HumanIK , selectam genunchii si oricat ne chinuim nu reusim sa-i mutam. Sa incercam cu gatul fetei. Se muta usor si trecem la mutarea intregului personaj , folosind obiectul de jos, dintre pantofii fetei. Apoi trecem la glezne si la articulatiile mainilor, obtinand animatii faine, pe care le puteam realiza mult mai greu folosind operatiile de saptamana trecuta. In Outliner am numele obiectelor HumanIK pe care o sa le folosim imediat la programare.

Jos mi-a disparut Time Slider-ul si il pun la loc. Am nevoie mare de el la animatii.

Incepem programarea: primul program, avem in plus un import nou. Maya.mel contine comenzi mai rar folosite care nu se afla in maya.cmds . 

Cmds.select selecteaza primul obiect pe care-l vom anima: centrul personajului. Numele obiectelor HumanIK sunt cam lungi, greu de scris corect, le putem lua din Outliner facand dublu-clic pe obiect si apoi cu copy-paste.

Dupa ce am selectat centru personajului ne ducem la inceputul miscarii, la frame-ul 0. Cu ajutorul comenzii Mel SetKey punem acolo un keyframe.

Ca si saptamana trecuta folosim un For pentru a pune inca 9 keyrame-uri. Variabila cu numele “i” se mareste de la 1 la 9 si pentru fiecare i ne mutam in Time Slider pe pozitiile 30 x 1, 30 x 2, …., 30 x 9 , adica 30, 60, …, 270.

Pentru ca avem 30 de frame-uri intr-o secunda, cele 9 pozitii corespund secundelor de la 1 la 9. Pentru fiecare din aceste momente am nevoie, inainte de inceperea miscarii, de comanda mel ”hikManip Start 1 0” si dupa ce se termina miscarea, de comanda “hikManipStop”.

Intre cele doua se misca cele doua obiecte selectate. Folosim comanda if , care se traduce astfel: daca i%2==0 atunci miscarea se face in sus, pe directia “y” , pe distanta 50. i%2 reprezinta restul impartirii lui i la 2. Acest rest poate fi 0 sau 1. Daca i e par restul e 0 , daca e impar atunci restul e 1. Daca i este impar atunci se executa comanda de dupa “else” , care muta obiectul selectat in jos, pe distanta 50. Dupa ce se termina miscarea , dupa comanda mel “hikManipStop”, urmeaza ultima comanda din program , cea care pune keyframe-ul. Animatia are doar 30 de frame-uri , o lungim la 300 adica 10 secunde.

In Time Slider se vad cele 10 keyframe-uri rosii. Suntem multumiti de aceasta animatie asa ca trecem la urmatorul program, urmatoarea miscare. Seamana foarte bine cu precedentul, singura modificare fiind selectarea a doua obiecte in loc de unul singur. La a doua comanda select folosim add=True. Daca nu l-am folosi , la a adoua comanda select s-ar deselecta primul obiect. Acum “add” adauga la primul obiect selectat pe al doilea, vom avea doua. Sunt gleznele fetei. Dupa ce fata a terminat sariturile trecem la programul al treilea, care animeaza mainile.  Ca sa obtinem miscari mai spectaculoase modificam la “move” si coordonatele care pana acum erau neschimbate, x si z. Ca sa nu fie prea spectaculoasa las neschimbata coordonata x .

import maya.cmds as cmds
import maya.mel as mel 
cmds.select("Character1_Ctrl_HipsEffector")
cmds.currentTime(0)
mel.eval("SetKey")
for i in range (1,10):
    cmds.currentTime(i*30)
    mel.eval("hikManipStart 1 0")
    if i%2==0:
        cmds.move(0,50,0,r=True)
    else: 
        cmds.move(0,-50,0,r=True)
    mel.eval("hikManipStop")
    mel.eval("SetKey")

Modelul 3d folosit in lectia 4 e aici https://drive.google.com/file/d/12X59yfKnlNzBHA6_v96QBfFZDTcA1u28/view?usp=sharing

E o arhiva de tip zip care contine 3 foldere. Se deschide scena maya cu numele star19.mb din folderul cu numele “maya”.