Prosedyremodellering med MEL-script i Maya - Dag 1

Denne opplæringen introduserer de spennende mulighetene for modellering ved hjelp av Mayas MEL-skriptspråk. I denne første delen lærer vi grunnleggende om MEL-kommandoer, og oppretter to prosedyrmodellskript som kan være nyttige i dine egne arbeidsflyter.

Ser under hetten

Maya Embedded Language (eller MEL) er kommandostrukturen som Maya bruker for å skape omtrent alt du ser på skjermen. Hver gang du lager et objekt eller flytter et vertex, kalles en MEL-kommando for å få denne til å skje. Selv alle vinduene, hyllene, fanene, menyene og redaktørene blir generert og organisert ved hjelp av MEL-skript. Hvis du vil, kan du helt bygge opp Maya-grensesnittet uten å bruke annet enn MEL, noe som gjør skriptspråket til et utrolig kraftig verktøy for å ha under beltet ditt som artist. Hvis du kan bruke skripting til å automatisere de mest tidkrevende delene av arbeidet ditt, kan du bruke så mye mer tid på at arbeidet ditt skiller seg ut.

Det beste stedet å lære om bestemte MEL-kommandoer er i den tekniske dokumentasjonsdelen av Maya Docs, og den beste måten å bli kjent med konseptene bak MEL er å se dem i aksjon. La oss grave inn i systemet og komme i gang med vårt første skript.


Script One

Det første skriptet vil skape et firkantet rør med de flate sidene på linje med X- og Z-aksene. Vi løper gjennom å lage skriptet, og lage en hylle-knapp for å få tilgang til det.


Trinn 1

Skriv ut Pseudo-koden din.

Pseudo-kode er en engelsk-engelsk form for skript, med hvert stort trinn oppført. Når du begynner å jobbe med komplekse skript, blir det veldig viktig å skissere skriptene dine før du noen gang kommer i gang. For oss kan pseudokoden se slik ut:

 Lag firesidig polygonrør Roter 45 grader i Y Flytt for å sitte på bakken Flytt dreiepunkt til opprinnelse Frys transformasjoner

Steg 2

Åpne skripteditoren ved å klikke på knappen nederst til høyre i Maya-vinduet.

I skripteditoren er det to hovedpaneler, statuspanelet ovenfor og MEL / Python-vinduet nedenfor. Kontroller at MEL-fanen er valgt.


Trinn 3

Tegn en "pipe" primitiv i Maya-scenen.

Du bør se noe som ligner dette på statuspanelet i skriptredigeringsvinduet:

 polyPipe -ch på -o på -r 2.958298 -h 2.434319 -t 0.9; // Resultat: pPipe1 polyPipe1 //

Trinn 4

Kopier og lim inn polyPipe-kommandoen fra statuslinjen til Script Editor.

Du bør få en nøyaktig kopi av den første polyPipe, denne gangen ligger nøyaktig på opprinnelsen.


Trinn 5: Bryte ned koden

PolyPipe-kommandoen du nettopp brukte, er en av tusenvis av MEL-kommandoer tilgjengelig for deg. Deres struktur (hvilke programmerere kaller syntaks) er stort sett det samme for hver kommando:

 melCommand -flag value -flag2 value targetObject;

Den første delen er selve kommandoen, og flaggene (betegnet av punktstrekket) definerer bestemte attributter av kommandoen. Kommandoer som manipulerer objekter som allerede eksisterer, krever ofte et mål, som forteller kommandoen hvilket objekt å endre. Hver kommando krever også et semikolon, som markerer slutten av kommandoen.

I eksemplet på polyPipe definerer de tre flaggene nedenfor radius, høyde og tykkelse av det opprettede røret.

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

Vi vil gå over andre flagger i detalj senere i opplæringen, når vi setter skriptet sammen.

Prosessormodelleringsprosessen i MEL er i utgangspunktet bare en smart ketting-sammen av kommandoer som skaper eller manipulerer geometri i Maya.


Trinn 6

Slett originaltøret, og velg det du nettopp opprettet ved hjelp av MEL-kommandoen.


Trinn 7

Sett antall aksedelementer til fire, og velg noen "fine" heltallstall for høyde, radius og dybde. Vi endrer disse senere, og de vil gjøre eksemplet enklere.

Disse innstillingene kan justeres med polyPipe-kommandoen på det tidspunktet objektet er opprettet ved hjelp av flagg, så vær ikke bekymret for hva skriptredaktøren gir deg.


Trinn 8

Vri objektet på Y-aksen med 45 grader

Hvis du roterer objektet for hånd, bør resultatet i skripteditoren være noe slikt:

 roter -r -os 0 -45 0;

Hvis du roterer objektet ved å skrive inn rotasjonsverdien, blir resultatet:

 setAttr "pPipe3.rotateY" 45;

For nå vil vi bruke rotere kommandoen i vårt skript. I senere veiledning vil vi bruke setAttr til å jobbe med bestemte objektattributter.


Trinn 9

Flytt røret slik at det sitter på rutenettet

Hvis du flytter objektet for hånd, skal koden i skriptredigereren være:

 flytte -r 0 1 0;

Hvis du flytter objektet ved å skrive inn y-verdien:

 setAttr "pPipe3.translateY" 1;

Igjen, vil vi bruke bevegelseskommandoen i stedet for setAttr.


Trinn 10

Trykk på "Sett inn" og flytt rørets sving ned til opprinnelsen.

Dette gjør at du enkelt skaler røret fra et bakkeplan. Dette er koden jeg får i skripteditoren:

 flytte 0 0 0 pPipe3.scalePivot pPipe3.rotatePivot;

Legg merke til at koden her har to mål - polyPipe3.rotatePivot og polyPipe3.scalePivot. Dette betyr at koden bare kan brukes når objektet er kalt polyPipe3. I senere opplæringer behandler vi dette problemet ved hjelp av variabler, men for nå skal vi jobbe rundt ved å bruke en annen kommando som gjør det samme:

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

Trinn 11

Frys transformasjonene på objektet ved å gå til modifikasjonsmenyen, og velg Freeze Transforms.

Koden i skripteditoren:

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

makeIdentity er en måte å fryse transformasjonene på, men det er ikke en veldig intuitivt navngitt kommando. Maya har ganske mange innebygde skript som automatiserer bestemte prosesser, inkludert frysingstransformasjoner.


Trinn 12: La oss prøve det igjen ...

I skripteditoren går du til Historikk og slår på Echo All Commands. Dette tvinger skripteditoren til å "ekko" eller vise alle kommandoene som kan kjøre, selv om brukeren ikke har aktivt engasjert seg.


Trinn 13

Frys omformingene igjen, og ta en titt på utgangen fra skripteditoren. Du ser følgende kode:

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

FreezeTransformations er et maya-hjelpeskript, en "runtime-kommando" som kaller makeIdentity. I motsetning til vanlige Maya-kommandoer starter kjøretidkommandoer vanligvis med store bokstaver. Vær forsiktig når du bruker disse skriptkommandoene i koden din, fordi de kanskje ikke støttes på samme måte i alle installasjoner av Maya. For FreezeTransformations er ulempen at kommandoen tar de verdiene som er angitt i dialogboksen Frys transformasjonsalternativer, som kan settes annerledes avhengig av siste gang du brukte den. Jeg endrer sjelden innstillingene fra standard, så jeg er komfortabel med å bruke FreezeTransformations og andre hjelpeskript. Dette er en personlig preferanse, men jeg føler at bekvemmeligheten ved bruk av runtime-kommandoer overstiger risikoen for at et skript kan bryte. Det er imidlertid viktig å forstå at i komplekse skript kan kjøreloggkommandoer forårsake problemer, og bruk av et script som er avhengig av maya dialogbokser, er dårlig praksis hvis du planlegger å gi manuset til noen andre. Når det er sagt, bruker Echo All Commands en god måte å finne bakgrunnsskript og kommandoer som ikke er oppført i den tekniske dokumentasjonen.


Trinn 14: Setter alt sammen

Så langt har vi gått gjennom fem kommandoer som kan settes sammen for å skape vårt objekt. La oss ordre som kommandoer opp med vår pseudokode, og ta en titt på hver enkelt spesifikke flagg. Hvert flagg har to "moduser", et langt navn og en stenografi. Vanligvis har stenografi bare ett eller to bokstaver. Jeg foretrekker å bruke shorthand når det er mulig, men å bruke det fulle navnet kan være nyttig for nybegynnere, og gjør koden din mer lesbar til ikke-skript. La oss bryte ned kommandoene:

 // Lag firesidige polygonrør (en dobbeltspiss skråstrek angir en kommentar i koden, som ignoreres av MEL) polyPipe -r 3 -h 4-t 1 -sa 4;

Relevante flagg:

  • -radius (-r) definerer rørets radius
  • -høyde (-h) definerer y-høyden
  • -tykkelse (-t) definerer tykkelsen på polyPipe, målt fra den utvendige kanten av radius innover
  • -subdivisionsAxis (-sa) definerer hvor mange sider polyPipe har
 // Roter 45 grader i Y roter -r-av 45;

Relevante flagg:

  • -relativ (-r) roterer objektet i forhold til dets nåværende posisjon
  • -roterY (-y) sett rotasjonen på y-aksen
 // Flytt å sitte på bakken flytte -r 0 1 0;

Relevante flagg:

  • -relativ (-r) flytter objektet i forhold til dets nåværende posisjon

Bevegelseskommandoen her bruker en litt annerledes syntaks fra rotasjonskommandoen. 0 1 0 er stenografi for å oversette 0 i x, oversette 1 i y og oversette 0 i z. MEL er et svært fleksibelt språk, og har ofte mer enn én måte å gjøre nøyaktig samme ting. I dette tilfellet kunne vi også ha gjort:

 // Flytt å sitte på bakken flytte -r -y 1;

Valget er ditt, og en stor del av scripting utvikler dine egne preferanser og stiler.

 // Flytt pivotpunkt til opprinnelse xform -ws -rp 0 0 0 -sp 0 0 0;

Relevante flagg:

  • -worldspace (-ws) flytter til en absolutt posisjon i verdensrommet
  • -rotasjonPivots (-rp) beveger rotasjonen svinger i retningene x, y og z
  • -scalePivots (-sp) flytter skalaen pivots i x, y og z retninger

xform har et stort antall flagg, og kan brukes til et stort antall funksjoner. Vi vil definitivt se denne igjen i fremtidige opplæringsprogrammer.
// fryse objektets transformasjoner
FreezeTransformations;


Trinn 15

Sett alle kommandoene inn i skripteditoren. Dette er hva du bør ha:


Trinn 16

Fremhev koden i skripteditoren, og midt-musen drar skriptet til "polygonernes hylle". Dette vil opprette et egendefinert hylleikon med skriptet tilknyttet det. Hver gang du klikker på knappen, utføres skriptet.


Trinn 17

Hvis du vil legge til en egendefinert etikett i hylleknappen, åpner du hylleeditoren ved å klikke og holde nede på pilen nedover til venstre i vinduet. I hylleeditoren finner du den nyopprettede knappen, og legger til en etikett og et ikonnavn. Ikonnavnet skal vanligvis være under fem tegn. Gratulerer! Du har nå fullført ditt første MEL-drevne modelleringsskript.


Skript 2

Nå som vi har lært tauene, la oss bla gjennom et annet lignende eksempel. Her søker vi det vi allerede har lært og lager en grunnleggende "avrundet kube" -modell.


Trinn 1

Skriv ut Pseudo-koden din.

 Lag en polygonkub Flytt til å sitte på bakken Flytt pivotpunkt til opprinnelse Frys transformasjoner velg alle kanter av objektets kantskanter med tre divisjoner

Steg 2

Opprett polygonkubekommandoen

 // lage en kube polyCube -w 4-h 4-d 4 -x 1-sy 1 -sz 1;

Relevante flagg:

  • -bredde (-w)
  • -høyde (-w)
  • -dybde (-w)
  • -underavdelingerX (-x)
  • -subdivisjoner (-sy)
  • -underavdelingerZ (-sz)

Trinn 3

Opprett "kommandoer" flytte til bakkeplan "," flytte pivoter "og" fryse transformer ", akkurat som forrige skript.

 // Flytt kube-bevegelsen -r 0 2 0; // Flytt pivotpunkt til opprinnelse xform -ws -rp 0 0 0 -sp 0 0 0; // fryse FreezeTransformations;

Trinn 4

Bruk en kommando for å velge alle kantene på kuben. Det er et par måter du kan gå på å gjøre dette. Siden objektet allerede er valgt når MEL genererer det, liker jeg å bruke en av Mayas hjelpeskript for å gjøre dette.

 // velg kanter ConvertSelectionToEdges;

Trinn 5

Bruk en kommando for å lage nye kanter på kuben din.

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

Relevante flagg:

  • -offsetAsFraction (-oaf) når sant, vil skråbeløpet bestemmes av en brøkdel av lengden av tilstøtende kanter.
  • -offset (-o) bestemmer mengden av beveling som skal legges til
  • -segmenter (-sg) antall kanter som skal legges til de fasade kantene
  • -fillNgon (-fn) når sant, vil dele opp hjørnene der skråden skaper nesede ansikter
  • -mergeVertices (-mv) når sant, vil fusjonere de opprettede hjørnene av de fylte nesede flater
  • -smoothingAngle (-sa) Bestemmer i hvilken vinkel skjæringen bør herdes normals

Trinn 6

Sett alt sammen:

 polyCube -w4-h4-d4-xx-sy-1-zz; flytte -r 0 2 0; xform -ws -rp 0 0 0 -sp 0 0 0; FreezeTransformations; ConvertSelectionToEdges; polyBevel -of 1 -o .2-g3-lin-mv-1 -sa 180;

Trinn 7

Opprett hylleikonet ditt, gi nytt navn til det, og vi er ferdige!