Animare una giostra usando le espressioni in Maya 2009

Animare usando le espressioni può essere un grande risparmio di tempo, specialmente quando si tratta di oggetti meccanici come una giostra! In questo tutorial, Stephen Ko ci guida attraverso un semplice progetto basato su espressioni, creando una semplice interfaccia utente con slider per controllare le diverse parti del suo modello. Iniziamo!


File / plugin aggiuntivi:
  • Scarica i file di progetto per questo tutorial

Passo 1

Iniziamo! Innanzitutto, apri Maya e, se vuoi seguire esattamente, apri il file di scena fornito.


Passo 2

Descriverò brevemente la mia modella prima di iniziare. Ho diviso il modello in 2 parti: il merry_go_round_move e il merry_go_round_stage. Tutti i cavalli sono raggruppati all'interno del merry_go_round_move gruppo e sono nominati GRP_Horse1 a GRP_Horse12.


Passaggio 3

Ora capiamo il modello, iniziamo a scrivere le nostre espressioni. Inizia andando su Finestra> Editor di animazione> Editor di espressioni.


Passaggio 4

Il Editor delle espressioni è diviso nella sezione di selezione e nella sezione di espressione. Dopo aver terminato di digitare qualcosa nella sezione dell'espressione, chiamiamo l'espressione nel file Nome espressione campo, quindi fare clic sul pulsante "Crea" per salvare l'espressione. Apparirà quindi nella sezione di selezione pronta per essere utilizzata, richiamata o modificata.

NOTA: se non riesci a vedere le espressioni che hai creato, vai su Seleziona filtro> Per nome espressione. Questo mostrerà tutte le espressioni che hai creato in precedenza, ordinate in base al loro nome (motivo per cui denominare le nostre espressioni è molto importante!)


Passaggio 5

Prima di tutto, abbiamo bisogno di ruotare il merry_go_round_move gruppo. Digitare quanto segue nella sezione espressioni:

 merry_go_round_move.rotateY = merry_go_round_move.rotateY-1;

Ora dai un nome alla tua espressione e colpisci Creare per salvarlo. Quindi cosa sta facendo questo codice? Bene su ogni singolo fotogramma della nostra animazione, questa espressione guarderà al merry_go_round_move corrente del gruppo Y rotazione, sottrarre uno da esso e rendere quella nuova rotazione Y valore. È chiaro che mentre questo si ripete su ogni fotogramma mentre suoniamo attraverso la nostra animazione, il gruppo ruoterà lentamente ma sicuramente nel -Y direzione, ad una velocità di 1 grado ogni frame. Che non è abbastanza veloce!

NOTA: Questo modello è progettato per ruotare in senso orario, motivo per cui stiamo sottraendo 1 grado dal Y valore di rotazione su ciascun fotogramma. Se invece aggiungessimo 1 grado su ciascun fotogramma, il gruppo ruoterebbe nella direzione opposta!


Passaggio 6

Per darci un maggiore controllo sulla velocità di rotazione, aggiungeremo un nuovo attributo al gruppo. Per fare ciò, prima seleziona il merry_go_round_move gruppo, quindi nella casella del canale fare clic su Modifica> Aggiungi attributo.

Nel Aggiungi attributo finestra di dialogo, aggiungi le impostazioni mostrate nell'immagine qui sotto:

  • Nome lungo: Questo è il nome del nostro nuovo attributo.
  • Tipo di dati : L'impostazione del tipo di dati su float ci consente di utilizzare numeri con posizioni decimali (ad es. 1.7) per il valore rotateSpeed.
  • Minimo: Questo è il più piccolo valore che consentiremo per il nostro rotateSpeed.
  • Massimo : Questo è il più grande valore che consentiremo.
  • Predefinito : Infine, questo è il valore predefinito dell'attributo.

Passaggio 7

Se clicchi ok vedrai che il nostro nuovo attributo è in atto nella parte inferiore del riquadro dei canali. Tuttavia, al momento non è collegato a nulla e quindi non ha alcun effetto sulla velocità della nostra rotazione. Per connetterlo, dobbiamo tornare all'editor di espressioni e modificare la nostra espressione. Quindi apri l'editor di espressioni, scegli la tua espressione dalla sezione di selezione e cambiala in:

 merry_go_round_move.rotateY = merry_go_round_move.rotateY -merry_go_round_move.rotateSpeed;

Ora assicurati di fare clic sul nuovo modificare pulsante che ha sostituito il Creare pulsante nella parte inferiore della finestra. Questo salva tutte le modifiche apportate alla tua espressione.

Come puoi vedere abbiamo sostituito il -1 valore con un link al nostro nuovo merry_go_round_move.rotateSpeed attributo, ma cosa fa questo? La nostra nuova espressione alterata ora sottrarrà qualsiasi valore venga inserito nel rotateSpeed canale dal nostro gruppo Y valore di rotazione, su ogni frame.

Ad esempio, immagina il nostro rotateSpeed il valore è 1. Su ogni frame, il nostro gruppo Y il valore di rotazione diminuirà dello stesso valore - 1 grado. Se dovessimo aumentare il nostro rotateSpeed valore a 10, il valore di rotazione diminuirà di 10 gradi su ciascun fotogramma - in altre parole ruoterà 10 volte più velocemente! Potremmo anche fermarlo ruotando interamente impostando il merry_go_round_move.rotateSpeed a 0.


Passaggio 8

Mentre cambiare i valori nel Channel Box è relativamente facile, potrebbe essere divertente per noi mettere insieme una GUI molto semplice da cui possiamo controllare il Merry-Go-Round. Anche se questo non è un tutorial completo di Maya UI, questo dovrebbe darti abbastanza informazioni per iniziare a sperimentare un po '!

Creeremo un'unica finestra, contenente un cursore che controllerà il nostro attributo rotateSpeed. Quindi inizia aprendo il Script Editor andando su Window> General Editors> Script Editor, o cliccando su Script Editor pulsante in basso a destra nella finestra di Maya. Una volta aperto, digita quanto segue nella casella di input:

 window -title "Controls" -width 400 -height 200; frameLayout -collapsable true -label "Merry-go-round"; columnLayout; floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed; connectControl speed merry_go_round_move.rotateSpeed; setParent ...; ShowWindow;

Ok, diamo un'occhiata a quella riga per riga. Questa prima sezione crea una nuova finestra UI di dimensioni 400x200px e imposta la barra del titolo per visualizzare il testo controlli. Tuttavia non apparirà ancora, in quanto dobbiamo specificarlo per mostrarlo più avanti nel codice.

 window -title "Controls" -width 400 -height 200;

Questa sezione di codice aggiunge qualcosa chiamato layout all'interno della nostra finestra. Essenzialmente è necessario un layout per poter aggiungere cursori e pulsanti nella GUI, e questa, essendo una Telaio layout, aggiungerà una cornice a tutto ciò che aggiungiamo al suo interno. Noterai che abbiamo anche aggiunto un'etichetta chiamata Giostra, e impostare la cornice per essere pieghevole, nel senso che possiamo piegare i nostri cursori per pulizia se la nostra GUI si complica ulteriormente.

 frameLayout -collapsable true -label "Merry-go-round";

Questa linea aggiunge un altro layout all'interno del nostro layout di cornice. Perché? Un layout di colonna è molto utile per aggiungere rapidamente e facilmente controlli uno sopra l'altro nell'interfaccia utente, ed è spesso utilizzato per una facile creazione dell'interfaccia utente! Se non lo avessimo aggiunto, dovremmo posizionare manualmente ciascun controllo, che richiederebbe un lotto più a lungo!

 columnLayout;

Questa linea è dove aggiungiamo nel nostro primo controllo! È un floatSliderGrp che è una combinazione di un cursore e una casella di input, che aggiornano entrambi il valore connesso. L'abbiamo etichettato Velocità, impostare il minValue del cursore a 0 e il maxValue del cursore a 5. Molto importante, abbiamo chiamato il controllo velocità. Questo è il modo in cui accediamo al dispositivo di scorrimento tramite MEL - se non avesse un nome, sarebbe estremamente difficile rintracciare e utilizzare nel nostro codice!

 floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed;

È qui che colleghiamo il nostro nuovissimo dispositivo di scorrimento all'altezza dell'attributo rotateSpeed ​​creato in precedenza. È un processo molto semplice ed è coperto da molti dettagli nell'aiuto. In sostanza stiamo dicendo di usare il nostro velocità controllo del cursore, per impostare il valore del rotateSpeed attributo (che a sua volta controlla la velocità di rotazione della nostra giostra. Semplice!)

 connectControl speed merry_go_round_move.rotateSpeed;

Finalmente, usiamo il SetParent ... comando, che, a causa dei due punti, ci salta dal lavorare con ColumnLayout, fino al FrameLayout, e poi alla Finestra stessa, dopo di che mostriamo la finestra!

 setParent ...; ShowWindow;

Fatto questo, seleziona tutto il codice e premi Ctrl + Invio per eseguirlo. Una finestra denominata "Controlli" dovrebbe apparire con un singolo cursore. Se ora premi play, puoi spostare il cursore per cambiare la velocità di rotazione in modo interattivo! Eccezionale!


Passaggio 9

Quindi questo è il corpo principale che ruota, ora passiamo ai cavalli. Si muoveranno su e giù, quindi dovremo scrivere un'espressione per alterare il loro valore Y di traduzione.


Passaggio 10

Quindi riapri il redattore di espressioni e creiamo una nuova espressione. Scrivi quanto segue nel campo di testo:

 GRP_Horse1.translateY = sin (tempo);

Il peccato è una delle funzioni matematiche incorporate di Maya, e quando si tratta di movimento oscillatorio, è a molto utile! Una curva sinusoidale (come mostrato in rosso nella parte superiore di questa pagina) è una curva morbida che va su e giù nel tempo. Con un po 'di editing, possiamo usare questo movimento su e giù per guidare il movimento del nostro cavallo.

Con il codice sopra inserito, clicca Creare per attivarlo. Se riproduci ora, il cavallo si muoverà su e giù ma non come vogliamo. Dobbiamo aggiungere alcuni attributi personalizzati!


Passaggio 11

Stiamo per aggiungere un attributo al primo cavallo grp, per cambiare la frequenza di esso su e giù per il movimento. Puoi aggiungere questo attributo a qualsiasi oggetto nella scena, o anche a un localizzatore se preferisci, ma ricorda che dovresti aggiornare le espressioni qui sotto in modo che contengano il percorso corretto per l'attributo, altrimenti non lo faranno avere alcun effetto!

Seleziona GRP_Horse1, e nella casella del canale fai clic su Modifica> Aggiungi attributo. Dagli le impostazioni mostrate nell'immagine sottostante:


Passaggio 12

Con il nostro nuovo attributo creato, dobbiamo tornare all'editor di espressioni per modificare l'espressione Sin. Modifica l'espressione in modo che corrisponda al seguente codice:

 GRP_Horse1.translateY = sin (time * GRP_Horse1.frequency);

Come puoi vedere, stiamo moltiplicando il valore del tempo con il nostro nuovo attributo di frequenza, che ha l'effetto di accelerare o rallentare la velocità del movimento oscillatorio. Molto carino.


Passaggio 13

Con il nostro secondo attributo in atto, avremo bisogno di un altro dispositivo di scorrimento nella nostra interfaccia utente! Apri l'editor degli script e modifica lo script mel come mostrato di seguito:

 window -title "Controls" -width 400 -height 200; frameLayout -collapsable true -label "Merry-go-round"; columnLayout; floatSliderGrp -label "Frequency" -field true -minValue 0 -maxValue 10 frequency; frequenza connectControl GRP_Horse1.frequency; floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5 speed; connectControl speed merry_go_round_move.rotateSpeed; setParent ...; ShowWindow;

Come puoi vedere abbiamo due nuove linee. Il primo crea un nuovo dispositivo di scorrimento chiamato frequenza, e il secondo collega questo frequenza slider al nostro nuovo frequenza attributo. Entrambe le linee usano gli stessi comandi di Velocità slider. Se ora colpisci il gioco, puoi modificare in modo interattivo la velocità del movimento su e giù del cavallo. Ci stiamo arrivando!


Passaggio 14

È ora di spostare anche gli altri cavalli! Crea 11 altre copie dell'espressione Sin precedente, ricordando di aggiornare il nome di HorseGrps come mostrato di seguito. Come vogliamo controllare la velocità di tutti i cavalli dal singolo frequenza attributo, l'ultima parte di ogni espressione rimane la stessa. Ricordati di colpire modificare quando hai finito, quindi premi play e muovi il cursore per vedere il risultato!


Passaggio 15

Brillante! Tranne che i cavalli si muovono su e giù insieme, il che non è molto realistico. Abbiamo bisogno di compensare il valore temporale per alcuni cavalli, in modo che raggiungano la cima del loro salto in momenti diversi. Vediamo come appare:

Come puoi vedere, ho aggiunto 45 ad alcuni cavalli Tempo valori. Questo può essere un valore casuale, tuttavia ho usato 45 come compensa il movimento di quei cavalli di esattamente la metà - saranno nella parte inferiore del loro salto mentre il resto è in cima! Di seguito è riportato un esempio per uno dei cavalli:

 GRP_Horse2.translateY = sin ((time + 45) * GRP_Horse1.frequency);

NOTA: fai attenzione a aggiungere le parentesi aggiuntive in!


Passaggio 16

Infine, apri l'editor degli script, seleziona tutto il codice e middlemouse, trascinalo in una posizione vuota sullo scaffale. Ciò consente di salvare lo script come un pulsante sullo scaffale, consentendo di aprire facilmente la finestra senza riscrivere tutto il codice. Ora fai clic sul pulsante, premi play e guarda i risultati delle tue espressioni-lavoro.


E questo è tutto! Spero che questo tutorial ti sia piaciuto. Se hai qualche domanda, fammelo sapere e proverò a rispondere a te. Grazie!