Modellazione procedurale con MEL Script in Maya - Day 1

Questo tutorial introduce le eccitanti possibilità di modellazione usando il linguaggio di scripting MEL di Maya. In questa prima parte, impareremo le basi dei comandi MEL e creeremo due script di modelli procedurali che potrebbero essere utili nei tuoi flussi di lavoro.

Guardando sotto il cofano

Maya Embedded Language (o MEL) è la struttura di comando che Maya usa per creare praticamente tutto ciò che vedi sullo schermo. Ogni volta che crei un oggetto o muovi un vertice, viene chiamato un comando MEL per far sì che quell'azione avvenga. Anche tutte le finestre, gli scaffali, le schede, i menu e gli editor sono generati e organizzati utilizzando gli script MEL. Se lo volevi, potresti ricostruire completamente l'interfaccia di Maya usando nient'altro che MEL, rendendo il linguaggio di scripting uno strumento incredibilmente potente da avere sotto la cintura come artista. Se puoi utilizzare gli script per automatizzare le parti più lunghe del tuo lavoro, puoi dedicare molto più tempo a far risaltare il tuo lavoro.

Il posto migliore per conoscere i comandi MEL specifici è nella sezione Documentazione tecnica di Maya Docs e il modo migliore per familiarizzare con i concetti alla base di MEL è vederli in azione. Analizziamo il sistema e iniziamo con il nostro primo script.


Script One

Il primo script creerà un tubo quadrato con i lati piatti allineati sugli assi X e Z. Eseguiremo la creazione dello script e creeremo un pulsante per l'accesso per accedervi.


Passo 1

Scrivi il tuo pseudo-codice.

Lo pseudo-codice è una semplice forma inglese di script, con tutti i passaggi principali elencati. Quando inizi a lavorare su script complessi diventa molto importante delineare i tuoi script prima di iniziare. Per noi, lo pseudo-codice potrebbe apparire come questo:

 Crea un tubo poligonale a quattro lati Ruota di 45 gradi in Y Sposta per sedersi sul piano di terra Sposta il punto di articolazione all'origine Trasforma le trasformazioni

Passo 2

Apri l'editor di script facendo clic sul pulsante in basso a destra della finestra principale di Maya.

All'interno dell'editor di script, ci sono due pannelli principali, il pannello di stato sopra, e la finestra MEL / Python sotto. Assicurarsi che la scheda MEL sia selezionata.


Passaggio 3

Disegna un primitivo a "pipa" nella scena Maya.

Dovresti vedere qualcosa di simile a questo nel pannello di stato della finestra dell'editor di script:

 polyPipe -ch on -o on -r 2.958298 -h 2.434319 -t 0.9; // Risultato: pPipe1 polyPipe1 //

Passaggio 4

Copia e incolla il comando polyPipe dalla riga di stato nello Script Editor.

Dovresti ottenere un duplicato esatto della prima polyPipe, questa volta posizionata esattamente sull'origine.


Passaggio 5: rompere il codice

Il comando polyPipe che hai appena usato è uno dei migliaia di comandi MEL disponibili. La loro struttura (ciò che i programmatori chiamano la sintassi) è praticamente la stessa per ogni comando:

 melCommand -flag valore -flag2 valore targetObject;

La prima parte è il comando stesso e i flag (indicati dal carattere dash) definiscono determinati attributi del comando. I comandi che manipolano oggetti già esistenti richiedono spesso un obiettivo, che indica al comando quale oggetto modificare. Ogni comando richiede anche un punto e virgola, che segna la fine del comando.

Nell'esempio di polyPipe, i tre flag seguenti definiscono il raggio, l'altezza e lo spessore della pipe creata.

 -r 3.162278 -h 3.514619 -t 0.8

Analizzeremo altre flag in dettaglio più avanti nel tutorial, quando mettiamo insieme la sceneggiatura.

Il flusso di lavoro della modellazione procedurale in MEL è essenzialmente un semplice concatenamento, insieme di comandi che creano o manipolano la geometria in Maya.


Passaggio 6

Elimina la pipe originale e seleziona quella che hai appena creato usando il comando MEL.


Passaggio 7

Imposta il numero di suddivisioni degli assi su quattro e scegli alcuni numeri interi "carini" per altezza, raggio e profondità. Le cambieremo in seguito e renderanno l'esempio più semplice.

Queste impostazioni possono essere regolate con il comando polyPipe nel momento in cui l'oggetto viene creato utilizzando i flag, quindi non preoccuparti di ciò che l'editor di script ti offre.


Passaggio 8

Ruota l'oggetto sull'asse Y di 45 gradi

Se ruoti l'oggetto a mano, il risultato nell'editor di script dovrebbe essere qualcosa del genere:

 ruota -r -os 0 -45 0;

Se si ruota l'oggetto digitando il valore di rotazione, il risultato sarà:

 setAttr "pPipe3.rotateY" 45;

Per ora, useremo il comando di rotazione nel nostro script. Nei tutorial successivi, useremo setAttr per lavorare con specifici attributi dell'oggetto.


Passaggio 9

Sposta il tubo in modo che sia seduto sul piano della griglia

Se sposti l'oggetto manualmente, il codice nell'editor di script dovrebbe essere:

 move -r 0 1 0;

Se sposti l'oggetto digitando il valore y:

 setAttr "pPipe3.translateY" 1;

Di nuovo, useremo il comando move invece di setAttr.


Passaggio 10

Premere "Inserisci" e spostare il perno del tubo verso il basso all'origine.

Ciò ti consentirà di scalare facilmente il tubo da un piano di terra. Questo è il codice che ottengo nell'editor di script:

 sposta 0 0 0 pPipe3.scalePivot pPipe3.rotatePivot;

Si noti che il codice qui ha due obiettivi: polyPipe3.rotatePivot e polyPipe3.scalePivot. Ciò significa che il codice può essere utilizzato solo quando l'oggetto in questione è denominato polyPipe3. Nei tutorial successivi, affronteremo questo problema utilizzando le variabili, ma per il momento, ci aggireremo utilizzando un comando diverso che fa la stessa cosa:

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

Passaggio 11

Blocca le trasformazioni sull'oggetto andando al menu modifica e scegliendo Blocca trasformazioni.

Il codice nell'editor di script:

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

makeIdentity è un modo per bloccare le trasformazioni, ma non è un comando con un nome molto intuitivo. Maya ha parecchi script incorporati che automatizzano determinati processi, tra cui le trasformazioni di congelamento.


Passaggio 12: proviamoci di nuovo ...

Nell'editor degli script, vai su Cronologia e attiva Echo All Commands. Questo costringe l'editor di script a "echo" o visualizza tutti i comandi che maya viene eseguito, anche se l'utente non li ha attivamente coinvolti.


Passaggio 13

Blocca nuovamente le trasformazioni e dai un'occhiata all'output dell'editor di script. Vedrai il seguente codice:

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

FreezeTransformations è uno script di maya helper, un "comando di runtime" che chiama makeIdentity. A differenza dei normali comandi Maya, i comandi di runtime iniziano generalmente con lettere maiuscole. Fai attenzione quando usi questi comandi di script all'interno del tuo codice, perché potrebbero non essere supportati allo stesso modo in tutte le installazioni di Maya. Per FreezeTransformations, lo svantaggio è che il comando acquisisce i valori impostati nella finestra di dialogo Freeze Transform Options, che può essere impostata in modo diverso a seconda dell'ultima volta che è stata utilizzata. Raramente cambio le impostazioni dall'impostazione predefinita, quindi mi sento a mio agio con FreezeTransformations e altri script di supporto. Questa è una preferenza personale, ma ritengo che la comodità dell'uso dei comandi di runtime superi il rischio di rottura di uno script. Tuttavia, è importante capire che in script complessi, i comandi di runtime possono causare problemi e l'utilizzo di qualsiasi script basato su finestre di dialogo maya è una cattiva pratica se si intende dare lo script a chiunque altro. Detto questo, usando Echo All Commands è un buon modo per trovare script e comandi in background che non sono elencati nella documentazione tecnica.


Step 14: Mettere tutto insieme

Finora, abbiamo esaminato cinque comandi che possono essere messi insieme per creare il nostro oggetto. Cerchiamo di allineare quei comandi con il nostro pseudo-codice e dare un'occhiata ai flag specifici di ognuno. Ogni bandiera ha due "modalità", un nome lungo e una stenografia. In genere, la stenografia ha solo una o due lettere. Personalmente preferisco usare la stenografia quando possibile, ma usare il nome completo può essere utile per i principianti e rende il codice più leggibile ai non sceneggiatori. Analizziamo i comandi:

 // Crea un tubo poligonale a quattro lati (una barra doppia in avanti denota un commento nel codice, che viene ignorato da MEL) polyPipe -r 3 -h 4 -t 1 -sa 4;

Bandiere pertinenti:

  • -raggio (-r) definisce il raggio del tubo
  • -height (-h) definisce l'altezza y
  • -thickness (-t) definisce lo spessore della polyPipe, misurato dal bordo esterno del raggio verso l'interno
  • -suddivisioniAxis (-sa) definisce il numero di lati di polyPipe
 // Ruota di 45 gradi in Y ruota -r -y 45;

Bandiere pertinenti:

  • -relativo (-r) ruota l'oggetto rispetto alla sua posizione corrente
  • -rotateY (-y) imposta la rotazione sull'asse y
 // Muovi per sedere sulla mossa del piano terra -r 0 1 0;

Bandiere pertinenti:

  • -relativo (-r) sposta l'oggetto rispetto alla sua posizione corrente

Il comando move qui usa una sintassi leggermente diversa dal comando ruotare. 0 1 0 è una scorciatoia per tradurre 0 in x, tradurre 1 in y e tradurre 0 in z. MEL è un linguaggio molto flessibile e spesso ha più di un modo per fare esattamente la stessa cosa. In questo caso, avremmo potuto anche fare:

 // Muovi per sedere sul piano terreno muovi -r -y 1;

La scelta è tua e gran parte degli script sta sviluppando le tue preferenze e stili.

 // Sposta il punto pivot all'origine xform -ws -rp 0 0 0 -sp 0 0 0;

Bandiere pertinenti:

  • -worldSpace (-ws) si sposta in una posizione assoluta nello spazio del mondo
  • -rotationPivots (-rp) sposta i perni di rotazione nelle direzioni x, yez
  • -scalePivots (-sp) sposta i perni della scala nelle direzioni x, yez

xform ha un numero enorme di flag e può essere utilizzato per un numero enorme di funzioni. Lo rivedremo sicuramente nei prossimi tutorial.
// blocca le trasformazioni dell'oggetto
FreezeTransformations;


Passaggio 15

Metti tutti i comandi nell'editor degli script. Questo è quello che dovresti avere:


Passaggio 16

Evidenzia il codice nell'editor degli script e il middle-mouse trascina lo script sullo shelf 'poligoni'. Ciò creerà un'icona personalizzata sullo scaffale con lo script associato. Ogni volta che fai clic su quel pulsante, lo script verrà eseguito.


Passaggio 17

Per aggiungere un'etichetta personalizzata al pulsante dello scaffale, accedere all'editor degli shelf facendo clic e tenendo premuto sulla freccia rivolta verso il basso nell'estrema sinistra della finestra. All'interno dell'editor di scaffali, trova il pulsante appena creato e aggiungi un'etichetta e il nome dell'icona. Il nome dell'icona dovrebbe in genere essere inferiore a cinque caratteri. Congratulazioni! Ora hai completato il tuo primo script di modellazione basato su MEL.


Script 2

Ora che abbiamo imparato le corde, facciamo un altro esempio simile. Qui applicheremo ciò che abbiamo già imparato e creeremo un modello base di "cubo arrotondato".


Passo 1

Scrivi il tuo pseudo-codice.

 Crea un cubo di poligono Muovi per sedersi sul piano di terra Muovi il punto di rotazione verso l'origine Trasforma di congelamento seleziona tutti i bordi dei bordi di smusso dell'oggetto con tre divisioni

Passo 2

Crea il comando cubo poligono

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

Bandiere pertinenti:

  • -larghezza (-w)
  • -altezza (-w)
  • -profondità (-w)
  • -suddivisioniX (-sx)
  • -suddivisioniY (-sy)
  • -suddivisioniZ (-sz)

Passaggio 3

Crea i comandi "sposta sul piano di massa", "muovi i pivot" e "blocca le trasformazioni", proprio come lo script precedente.

 // sposta il cubo move -r 0 2 0; // Sposta il punto pivot all'origine xform -ws -rp 0 0 0 -sp 0 0 0; // blocco di FreezeTransformations;

Passaggio 4

Utilizzare un comando per selezionare tutti i bordi del cubo. Ci sono un paio di modi in cui potresti fare questo. Dato che l'oggetto è già selezionato quando MEL lo genera, mi piace usare uno degli script helper di Maya per farlo.

 // seleziona bordi ConvertSelectionToEdges;

Passaggio 5

Usa un comando smusso per creare nuovi bordi sul tuo cubo.

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

Bandiere pertinenti:

  • -offsetAsFraction (-oaf) quando è true, la quantità di smusso sarà determinata da una frazione della lunghezza dei bordi adiacenti.
  • -offset (-o) determina la quantità di smussatura da aggiungere
  • -segmenti (-sg) il numero di bordi da aggiungere ai bordi smussati
  • -fillNgon (-fn) quando è true, suddividerà gli angoli in cui lo smusso crea facce su n lati
  • -mergeVertices (-mv) quando è true, fonderà i vertici creati delle facce n-facce riempite
  • -smoothingAngle (-sa) Determina in quale angolo la smussatura deve indurire le normali

Passaggio 6

Metterli tutti insieme:

 polyCube -w 4 -h 4 -d 4 -sx 1 -sy 1 -sz 1; move -r 0 2 0; xform -ws -rp 0 0 0 -sp 0 0 0; FreezeTransformations; ConvertSelectionToEdges; polyBevel -oaf 1 -o .2 -sg 3 -fn 1 -mv 1 -sa 180;

Passaggio 7

Crea l'icona dello scaffale, rinominala e abbiamo finito!