Denna handledning introducerar de spännande möjligheterna till modellering med hjälp av Mayas MEL-skriptspråk. I den här första delen kommer vi att lära oss grunderna för MEL-kommandon och skapa två procedurmodellskript som kan vara användbara i dina egna arbetsflöden.
Maya Embedded Language (eller MEL) är den kommandostruktur som Maya använder för att skapa nästan allt du ser på skärmen. Varje gång du skapar ett objekt eller flyttar ett vertex, kallas ett MEL-kommando för att få den åtgärden att hända. Även alla fönster, hyllor, flikar, menyer och redaktörer genereras och organiseras med MEL-skript. Om du ville ha det, kan du helt bygga om Maya-gränssnittet med ingenting annat än MEL, vilket gör skriptspråket till ett otroligt kraftfullt verktyg för att ha under ditt bälte som konstnär. Om du kan använda skript för att automatisera de mest tidskrävande delarna av ditt arbete, så kan du spendera så mycket mer tid att ditt arbete sticker ut.
Det bästa stället att lära sig specifika MEL-kommandon finns i den tekniska dokumentationen av Maya Docs, och det bästa sättet att bli bekant med koncepten bakom MEL är att se dem i aktion. Låt oss gräva in i systemet och börja med vårt första skript.
Det första skriptet kommer att skapa ett fyrkantigt rör med de platta sidorna inriktade på X- och Z-axlarna. Vi kör igenom skriptet och skapar en hylla för att komma åt den.
Skriv ut din Pseudo-kod.
Pseudo-koden är en vanlig engelska-form av ett manus, med varje stort steg som anges. När du börjar arbeta med komplexa skript blir det väldigt viktigt att beskriva dina skript innan du någonsin kommer igång. För oss kan pseudokoden se ut så här:
Skapa fyrsidig polygonrör Roter 45 grader i Y Flytta för att sitta på markplanet Flytta svängpunkt till ursprung Frysta transformationer
Öppna manusredigeraren genom att klicka på knappen längst ner till höger i huvudfältet Maya.
Inne i skriptredigeraren finns två huvudpaneler, statuspanelen ovan och MEL / Python-fönstret nedan. Se till att fliken MEL är vald.
Rita ett "rör" primitivt i Mayas scen.
Du borde se något liknande det här i statuspanelen i manusfönstret:
polyPipe -ch på -o på -r 2.958298 -h 2.434319 -t 0.9; // Resultat: pPipe1 polyPipe1 //
Kopiera och klistra in polyPipe-kommandot från statusraden till Script Editor.
Du borde få en exakt kopia av den första polyPipe, den här tiden ligger exakt på ursprunget.
Den polyPipe-kommandot du just använt är en av tusentals MEL-kommandon tillgängliga för dig. Deras struktur (vad programmerare kallar syntax) är ungefär samma för varje kommando:
melCommand-flagga värde -flag2 värde targetObject;
Den första delen är själva kommandot, och flaggorna (betecknade med streckteckenet) definierar vissa attribut av kommandot. Kommandon som manipulerar föremål som redan existerar kräver ofta ett mål, vilket berättar kommandot vilket objekt som ska ändras. Varje kommando kräver också en semikolon, som markerar slutet på kommandot.
I exemplet av polyPipe definierar de tre flaggorna nedan radie, höjd och tjocklek på det skapade röret.
-r 3,162278 -h 3,514619 -t 0,8
Vi kommer att gå över andra flaggor i detalj senare i handledningen, när vi lägger manuset ihop.
Processmönstringsarbetet i MEL är i grund och botten bara en smart kedjning-tillsammans av kommandon som skapar eller manipulerar geometri i Maya.
Ta bort originalröret och välj det du just skapat med MEL-kommandot.
Ställ in antal axeldelar till fyra och välj några "fina" heltal för höjd, radie och djup. Vi ändrar dem senare, och de kommer att göra exemplet enklare.
Dessa inställningar kan justeras med polyPipe-kommandot när objektet skapas med flaggor, så oroa dig inte om vad skriptredigeraren ger dig.
Rotera objektet på Y-axeln med 45 grader
Om du roterar objektet för hand, ska resultatet i manusredigeraren vara något så här:
rotera -r-0 -45 0;
Om du roterar objektet genom att skriva in rotationsvärdet blir resultatet:
setAttr "pPipe3.rotateY" 45;
För närvarande använder vi rotera kommandot i vårt manus. I senare handledning kommer vi att använda setAttr för att arbeta med specifika objektattribut.
Flytta röret så att det sitter på gallplanet
Om du flyttar objektet för hand ska koden i skriptredigeraren vara:
flytta -r 0 1 0;
Om du flyttar objektet genom att skriva in y-värdet:
setAttr "pPipe3.translateY" 1;
Återigen kommer vi att använda kommandot Flytta istället för setAttr.
Tryck på "infoga" och rör rörets svängning ner till ursprunget.
På så sätt kan du enkelt skala röret från ett jordplan. Detta är koden jag får i manusredigeraren:
flytta 0 0 0 pPipe3.scalePivot pPipe3.rotatePivot;
Observera att koden här har två mål - polyPipe3.rotatePivot och polyPipe3.scalePivot. Detta innebär att koden endast kan användas när objektet ifrågasätts som polyPipe3. I senare handledning tar vi upp problemet genom att använda variabler, men för närvarande ska vi arbeta runt det genom att använda ett annat kommando som gör detsamma:
xform-a-rotatePivot 0 0 0 -scalePivot 0 0 0;
Frys transformationerna på objektet genom att gå till modifieringsmenyn och välj Frys Transforms.
Koden i manusredigeraren:
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;
makeIdentity är ett sätt att frysa transformationerna, men det är inte ett mycket intuitivt namnet kommando. Maya har ganska många inbyggda skript som automatiserar vissa processer, inklusive frysningstransformationer.
I skriptredigeraren går du till Historia och aktiverar Echo All Commands. Detta tvingar manusredigeraren att "eko" eller visa alla kommandon som kan köra, även om användaren inte aktivt engagerade dem.
Frys omformningarna igen och ta en titt på utmatningen från manusredigeraren. Du får se följande kod:
FreezeTransformations; makeIdentity -apply true -t 1 -r 1 -s 1 -n 0;
FreezeTransformations är ett Maya Helper-skript, ett "runtime-kommando" som kallar makeIdentity. Till skillnad från vanliga Maya-kommandon börjar körtidskommandon generellt med stora bokstäver. Var försiktig när du använder dessa skriptkommandon inuti din kod, eftersom de kanske inte stöds på samma sätt över alla installationer av Maya. För FreezeTransformations är nackdelen att kommandot tar de värden som ställs in i dialogrutan Frystransformeringsalternativ, vilket kan sättas olika beroende på vilken gång du använde den. Jag ändrar sällan inställningarna från standardvärdet, så jag är bekväm med att använda FreezeTransformations och andra hjälpranskript. Detta är en personlig preferens, men jag anser att bekvämligheten med att använda runtime-kommandon överstiger risken att ett manus kan bryta. Det är emellertid viktigt att förstå att i komplexa skript kan körtidskommandon orsaka problem och att använda ett script som bygger på maya-dialogrutor är dålig övning om du planerar att ge manuset till någon annan. Att ha sagt att använda Echo All Commands är ett bra sätt att hitta bakgrundsskript och kommandon som inte finns listade i den tekniska dokumentationen.
Hittills har vi gått igenom fem kommandon som kan sättas samman för att skapa vårt objekt. Låt oss linja som kommandon upp med vår pseudokod, och ta en titt på varandras specifika flaggor. Varje flagga har två "lägen", ett långt namn och en stenografi. Vanligtvis har stenografi bara en eller två bokstäver. Jag föredrar personligen att använda shorthand när det är möjligt, men med hjälp av det fullständiga namnet kan det vara användbart för nybörjare, och gör din kod mer läsbar till icke-scripters. Låt oss bryta ner kommandona:
// Skapa fyrsidig polygonrör (en dubbel-framåt snedstreck anger en kommentar i koden, vilken ignoreras av MEL) polyPipe -r 3 -h 4-t 1 -sa 4;
Relevanta flaggor:
// Rotera 45 grader i Y rotera -r -y 45;
Relevanta flaggor:
// Flytta sitta på markplanet flytta -r 0 1 0;
Relevanta flaggor:
Flyttningskommandot använder här en lite annorlunda syntax från rotera kommandot. 0 1 0 är stenografi för att översätta 0 i x, översätt 1 i y och översätt 0 i z. MEL är ett mycket flexibelt språk och har ofta mer än ett sätt att göra exakt samma sak. I det här fallet kunde vi också ha gjort:
// Flytta sitta på markplanet flytta -r -y 1;
Valet är ditt, och en stor del av skriptet utvecklar egna preferenser och stilar.
// Flytta pivotpunkt till ursprung xform -ws -rp 0 0 0 -sp 0 0 0;
Relevanta flaggor:
xform har ett stort antal flaggor och kan användas för ett stort antal funktioner. Vi kommer definitivt se den här igen i framtida handledning.
// frysa objektets transformationer
FreezeTransformations;
Sätt alla kommandon i skriptredigeraren. Detta är vad du borde ha:
Markera koden i skriptredigeraren och mellandusen drar skriptet till "polygonernas hylla". Detta skapar en anpassad hyllaikon med ditt skript som är associerat med det. Varje gång du klickar på den knappen, kommer skriptet att köras.
För att lägga till en anpassad etikett i hyllknappen, gå till hylla redaktören genom att klicka och hålla ner den nedåtvända pilen längst till vänster i fönstret. Inne i hyllaredigeraren hittar du din nyskapade knapp och lägger till en etikett och ett ikonnamn. Ikonnamnet ska vanligtvis vara under fem tecken. grattis! Du har nu slutfört ditt första MEL-driven modelleringsskript.
Nu när vi har lärt repen, låt oss bläddra genom ett liknande exempel. Här tillämpar vi vad vi redan har lärt oss och skapar en grundläggande "rundad kub" -modell.
Skriv ut din Pseudo-kod.
Skapa en polygon kub Flytta för att sitta på markplanet Flytta pivotpunkt till ursprung Frysta transformeringar välj alla kanter på objektets kantkanter med tre divisioner
Skapa kommandot polygon kub
// skapa en kub polyCube -w 4-h 4-d 4 -x 1-sy 1 -sz 1;
Relevanta flaggor:
Skapa kommandon "Flytta till markplan", "flytta pivot" och "frysa transformer", precis som i föregående skript.
// flytta kuben flytta -r 0 2 0; // Flytta pivotpunkt till ursprung xform -ws -rp 0 0 0 -sp 0 0 0; // frysa FreezeTransformations;
Använd ett kommando för att välja alla kanter på kuben. Det finns några sätt du kan göra om att göra detta. Eftersom objektet redan är valt när MEL genererar det, gillar jag att använda en av Mayas hjälprandor för att göra detta.
// välj kanter ConvertSelectionToEdges;
Använd ett kommando för att skapa nya kanter på din kub.
// bevel polyBevel -of 1 -o .2 -sg3 -fn 1 -mv 1 -sa 180;
Relevanta flaggor:
Lägg samman allt:
polyCube -w4-h4-d4-xx-sy-1-zz; flytta -r 0 2 0; xform -ws -rp 0 0 0 -sp 0 0 0; FreezeTransformations; ConvertSelectionToEdges; polyBevel -of 1 -o .2-gs-3-fn-mv 1 -sa 180;
Skapa din hyllaikon, byt namn på den och vi är klara!