Modelare procedurală cu Script MEL în Maya - Ziua 1

Acest tutorial introduce posibilitățile interesante de modelare folosind limbajul scripting MEL al Maya. În această primă parte, vom învăța elementele de bază ale comenzilor MEL și vom crea două scenarii de model procedural care ar putea fi utile în propriile fluxuri de lucru.

Privind sub capotă

Limba Maya Embedded Language (sau MEL) este structura de comandă pe care Maya o folosește pentru a crea aproape tot ceea ce vedeți pe ecran. De fiecare dată când creați un obiect sau mutați un vârf, este chemată o comandă MEL pentru a face acea acțiune să se întâmple. Chiar și toate ferestrele, rafturile, tab-urile, meniurile și editorii sunt generate și organizate folosind scripturi MEL. Dacă v-ați dorit, ați putea re-construi interfața Maya folosind doar MEL, făcând limba scripting-ului un instrument incredibil de puternic de a avea sub centură ca artist. Dacă puteți utiliza script-uri pentru a automatiza cele mai consumatoare de timp părți ale muncii dvs., atunci puteți petrece mult mai mult timp, făcându-vă munca să iasă în evidență.

Cel mai bun loc pentru a afla mai multe despre comenzile MEL specifice este în documentația Tehnică din Documentele Maya și cel mai bun mod de a se familiariza cu conceptele din spatele MEL este de a le vedea în acțiune. Să săpăm sistemul și să începem cu primul nostru scenariu.


Script One

Primul script va crea o conductă pătrată, cu laturile plane aliniate pe axele X și Z. Vom alerga prin crearea scenariului și vom face un buton de raft pentru accesarea acestuia.


Pasul 1

Scrie pseudo-codul tău.

Pseudo-codul este o formă simplă de engleză a unui scenariu, cu fiecare pas important enumerat. Când începeți să lucrați pe scripturi complexe, devine foarte important să vă prezentați scripturile înainte de a începe vreodată. Pentru noi, pseudocodul ar putea arăta astfel:

 Creați țeavă de poligon cu patru fețe Rotiți 45 de grade în Y Deplasați-vă pentru a sta pe planul solului Deplasați punctul de pivot la origine Transformări înghețate

Pasul 2

Deschideți editorul de scenarii făcând clic pe butonul din partea dreaptă de jos a ferestrei principale Maya.

În interiorul editorului de script, există două panouri principale, panoul de stare de mai sus și fereastra MEL / Python de mai jos. Asigurați-vă că este selectată fila MEL.


Pasul 3

Desenați un primitiv de "țeava" în scena Maya.

Ar trebui să vedeți ceva similar cu acesta în panoul de stare al ferestrei editorului script:

 poliPipe -ch on-on pe -r 2.958298 -h 2.434319 -t 0.9; // Rezultat: pPipe1 polyPipe1 //

Pasul 4

Copiați și inserați comanda polyPipe din linia de stare în Editorul scriptului.

Ar trebui să obțineți un duplicat exact al primului polyPipe, de data aceasta localizat exact pe origine.


Pasul 5: ruperea codului

Comanda polyPipe pe care tocmai ați folosit-o este una dintre mii de comenzi MEL disponibile pentru dvs. Structura lor (ceea ce programatorii numesc sintaxa) este aproape aceeași pentru fiecare comandă:

 melCommand -valoarea de flacără -valoarea flag2 targetObject;

Prima parte este comanda însăși, iar drapelele (desemnate prin caracterul liniuței) definesc anumite atribute ale comenzii. Comenzile care manipulează obiecte care există deja necesită adesea o țintă, care spune comenzii ce obiect să se schimbe. Fiecare comandă necesită și punct și virgulă, care marchează sfârșitul comenzii.

În exemplul polyPipe, cele trei steaguri de mai jos definesc raza, înălțimea și grosimea conductei create.

 -r 3,162278 -h 3,514619 -t 0,8

Vom trece peste alte steaguri în detaliu mai târziu în tutorial, când vom pune scenariul împreună.

Fluxul de lucru de modelare procedurală din MEL este în esență doar o combinare inteligentă - împreună a comenzilor care creează sau manipulează geometria în Maya.


Pasul 6

Ștergeți conducta originală și selectați-o pe cea pe care tocmai ați creat-o folosind comanda MEL.


Pasul 7

Setați numărul de subdiviziuni ale axelor la patru și alegeți numere întregi "frumos" pentru înălțime, rază și adâncime. Vom schimba aceste lucruri mai târziu și vor face acest exemplu mai ușor.

Aceste setări pot fi ajustate cu comanda polyPipe în momentul în care obiectul este creat cu ajutorul unor pavilioane, așa că nu vă faceți griji cu privire la ceea ce vă oferă editorul de script-uri.


Pasul 8

Rotiți obiectul pe axa Y cu 45 de grade

Dacă rotiți obiectul manual, rezultatul în editorul de script ar trebui să fie ceva de genul:

 rotate -r -os 0 -45 0;

Dacă rotiți obiectul introducând valoarea rotației, rezultatul va fi:

 setAttr "pPipe3.rotateY" 45;

Pentru moment, vom folosi comanda de rotire în scriptul nostru. În tutorialele ulterioare, vom folosi setAttr pentru a lucra cu atribute specifice ale obiectelor.


Pasul 9

Deplasați țeava astfel încât să stea pe planul rețelei

Dacă mutați obiectul manual, codul din editorul de script ar trebui să fie:

 mutați-r 0 1 0;

Dacă mutați obiectul introducând valoarea y:

 setAttr "pPipe3.translateY" 1;

Din nou, vom folosi comanda de mutare în loc de setAttr.


Pasul 10

Apăsați "inserați" și deplasați pivotul țevii până la origine.

Acest lucru vă va permite să scalați cu ușurință conducta de la un plan de masă. Acesta este codul pe care îl primesc în editorul de script-uri:

 mutare 0 0 0 pPipe3.scalePivot pPipe3.rotatePivot;

Observați că acest cod are două obiective - polyPipe3.rotatePivot și polyPipe3.scalePivot. Aceasta înseamnă că codul poate fi folosit numai atunci când obiectul în cauză este numit polyPipe3. În tutorialele ulterioare, vom aborda această problemă prin utilizarea variabilelor, dar pentru moment, vom lucra în jurul ei folosind o comandă diferită care face același lucru:

 xform -a -rotatePivot 0 0 0 -scalePivot 0 0 0;

Pasul 11

Înghetați transformările pe obiect accesând meniul de modificare și selectând Transformări Freeze.

Codul din editorul de script:

 makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;

makeIdentity este o modalitate de a îngheța transformările, dar nu este o comandă foarte intuitivă. Maya are câteva script-uri încorporate care automatizează anumite procese, inclusiv transformări de îngheț.


Pasul 12: Să încercăm din nou ...

În editorul de script, accesați Istoric și activați Echo Toate comenzile. Aceasta forțează editorul de script-uri să "echoze" sau să afișeze toate comenzile care pot fi executate, chiar dacă utilizatorul nu le-a angajat în mod activ.


Pasul 13

Înghețați transformările din nou și aruncați o privire la ieșirea editorului de script-uri. Veți vedea următorul cod:

 FreezeTransformations; makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;

FreezeTransformations este un script maya helper, o "comandă runtime" care numește makeIdentity. Spre deosebire de comenzile obișnuite Maya, comenzile runtime, în general, încep cu litere mari. Aveți grijă atunci când utilizați aceste comenzi script în interiorul codului dvs., deoarece acestea nu pot fi acceptate în același mod în toate instalările din Maya. Pentru FreezeTransformations, dezavantajul este că comanda ia valorile setate în caseta de dialog Freeze Transform Options, care poate fi setată diferit în funcție de ultima utilizare a acesteia. Schimbau rar setările de la setările implicite, așa că sunt confortabil folosind FreezeTransformations și alte script-uri de ajutor. Aceasta este o preferință personală, dar consider că comoditatea utilizării comenzilor de rulare depășește riscul ca un scenariu să se întrerupă. Cu toate acestea, este important să înțelegeți că, în scenariile complexe, comenzile runtime pot provoca probleme și folosirea oricărui script care se bazează pe casetele de dialog maya este o practică proastă dacă intenționați să dați scenariul altcuiva. Acestea fiind spuse, folosirea Echo All Commands este o modalitate buna de a gasi scripturi de fundal si comenzi care nu sunt listate in Documentatia Tehnica.


Pasul 14: Împreună cu toți

Până acum, am trecut prin cinci comenzi care pot fi puse împreună pentru a ne crea obiectul. Haideți să aliniem aceste comenzi cu pseudo-codul nostru și să aruncăm o privire la steagurile specifice ale fiecăruia. Fiecare steag are două "moduri", un nume lung și o stenogramă. În mod tipic, stenograma are doar una sau două litere. Personal prefer să folosesc stenograma ori de câte ori este posibil, dar folosirea numelui complet poate fi util pentru începători și face codul dvs. mai ușor de citit pentru non-scripteri. Să distrugem comenzile:

 // Creați o țeavă poligonală pe patru fețe (o slash dublă în față denotă un comentariu în cod, care este ignorat de MEL) polyPipe -r 3 -h 4 -t 1 -sa 4;

Relee relevante:

  • -raza (-r) definește raza țevii
  • -înălțimea (-h) definește înălțimea y
  • -grosimea (-t) definește grosimea polyPipe, măsurată de la marginea exterioară a razei în interior
  • -subdiviunileAxis (-sa) definește câte părți are polyPipe
 // Rotiți 45 de grade în Y rotiți -r -y 45;

Relee relevante:

  • -relativă (-r) rotește obiectul față de poziția sa actuală
  • -rotateY (-y) setați rotația pe axa y
 // Deplasați-vă pentru a sta pe planul planului mută-r 0 1 0;

Relee relevante:

  • -relativa (-r) mută obiectul față de poziția sa actuală

Comanda de mutare utilizează aici o sintaxă ușor diferită de comanda de rotire. 0 1 0 este o stenogramă pentru traducerea 0 în x, traduceți 1 în y și traduceți 0 în z. MEL este un limbaj foarte flexibil și de multe ori are mai multe modalități de a face exact același lucru. În acest caz, am fi putut face și:

 // Deplasați-vă pentru a sta pe planul de la sol muta -r -y 1;

Alegerea este a ta, iar o mare parte din scenariu îți dezvoltă propriile preferințe și stiluri.

 // Mutați punctul de pivot la originea xform -ws -rp 0 0 0 -sp 0 0 0;

Relee relevante:

  • -worldSpace (-ws) se mută într-o poziție absolută în spațiul mondial
  • -rotationPivots (-rp) deplasează pivoturile de rotație în direcțiile x, y și z
  • -Scala Pivote (-sp) deplasează pivoturile scalei în direcțiile x, y și z

xform are un număr mare de steaguri și poate fi folosit pentru un număr foarte mare de funcții. Vom vedea cu siguranta acest lucru din nou in tutoriale viitoare.
// înghețarea transformărilor obiectului
FreezeTransformations;


Pasul 15

Puneți toate comenzile în editorul de script-uri. Așa trebuie să aveți:


Pasul 16

Evidențiați codul în editorul de scripturi, iar mouse-ul de mijloc trageți scriptul pe raftul "poligoane". Aceasta va crea o pictogramă de raft personalizat cu scriptul asociat cu acesta. De fiecare dată când faceți clic pe acel buton, scriptul se va executa.


Pasul 17

Pentru a adăuga o etichetă personalizată butonului raftului, accesați editorul de raft făcând clic și ținând apăsat pe săgeata îndreptată în jos din extrema stângă a ferestrei. În interiorul editorului Shelf, găsiți butonul nou creat și adăugați o denumire și o pictogramă. Numele pictogramei ar trebui să aibă, de obicei, mai puțin de cinci caractere. Felicitări! Ați terminat primul scenariu de modelare bazat pe MEL.


Script 2

Acum că am învățat frânghiile, haideți să aruncăm un alt exemplu similar. Aici vom aplica ceea ce am învățat deja și vom crea un model de "cub rotunjit" de bază.


Pasul 1

Scrie pseudo-codul tău.

 Creați un cub de poligon Mutare pentru a vă așeza pe planul terenului Deplasați punctul de pivot în origine Congelați transformările selectați toate marginile marginilor de tăiere a obiectului cu trei diviziuni

Pasul 2

Creați comanda cubului poligon

 // crea un cub polyCube -w 4-h 4 -d 4 -sx 1 -sy 1 -sz 1;

Relee relevante:

  • -lățime (-w)
  • -înălțime (-w)
  • -adâncime (-w)
  • -subdiviziuniX (-sx)
  • -subdiviziunile Y (-sy)
  • -subdiviziunileZ (-sz)

Pasul 3

Creați comenzile "mișcare la sol", "mișcări pivotante" și comenzi "îngheța transformă", la fel ca și scriptul precedent.

 // mutați cubul muta -r 0 2 0; // Mutați punctul de pivot la originea xform -ws -rp 0 0 0 -sp 0 0 0; // freezeTransformations freeze;

Pasul 4

Utilizați o comandă pentru a selecta toate marginile cubului. Există câteva modalități prin care puteți face acest lucru. Deoarece obiectul este deja selectat când MEL o generează, îmi place să folosesc unul din script-urile ajutoare ale Maya pentru a face acest lucru.

 // selectați marginile ConvertSelectionToEdges;

Pasul 5

Utilizați o comandă bevel pentru a crea noi margini pe cub.

 // bevel polyBevel -oaf 1 -o .2 -sg 3 -fn 1 -mv 1 -sa 180;

Relee relevante:

  • -offsetAsFraction (-oaf) când este adevărat, cantitatea de înclinare va fi determinată de o fracțiune din lungimea marginilor adiacente.
  • -offset (-o) determină cantitatea de beveling de adăugat
  • -segmente (-sg) numărul de margini care se adaugă la margini tăiate
  • -fillNgon (-fn) atunci când este adevărat, va subdivona colțurile în care conicul creează fețe n-față
  • -mergeVertices (-mv) când este adevărat, va fuziona vârfurile create ale fețelor n-sate umplute
  • -smoothingAngle (-sa) Stabilește la ce unghi teșitura trebuie să întărească normalele

Pasul 6

Puneți-le împreună:

 poliCube -w4-h4-d4-sx1 -sy1-sz1; muta -r 0 2 0; xform -ws -rp 0 0 0 -sp 0 0 0; FreezeTransformations; ConvertSelectionToEdges; polibevel-oaf 1-o2-sg3-fn1-mv1 -sa 180;

Pasul 7

Creați pictograma de pe raft, redenumiți-o și am terminat!