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.
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.
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.
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
Å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.
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 //
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.
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.
Slett originaltøret, og velg det du nettopp opprettet ved hjelp av MEL-kommandoen.
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.
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.
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.
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;
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.
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.
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.
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:
// Roter 45 grader i Y roter -r-av 45;
Relevante flagg:
// Flytt å sitte på bakken flytte -r 0 1 0;
Relevante flagg:
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:
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;
Sett alle kommandoene inn i skripteditoren. Dette er hva du bør ha:
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.
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.
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.
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
Opprett polygonkubekommandoen
// lage en kube polyCube -w 4-h 4-d 4 -x 1-sy 1 -sz 1;
Relevante flagg:
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;
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;
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:
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;
Opprett hylleikonet ditt, gi nytt navn til det, og vi er ferdige!