Animatie van een draaimolen met uitdrukkingen in Maya 2009

Animeren met uitdrukkingen kan een grote tijdwinst zijn, vooral als het gaat om mechanische voorwerpen zoals een draaimolen! In deze zelfstudie laat Stephen Ko ons door een eenvoudig op uitdrukkingen gebaseerd project lopen en creëert een eenvoudige gebruikersinterface met schuifregelaars om de verschillende delen van zijn model te besturen. Laten we beginnen!


Extra bestanden / plug-ins:
  • Download de projectbestanden voor deze zelfstudie

Stap 1

Laten we beginnen! Open eerst Maya en als je precies wilt volgen, open dan het meegeleverde scènebestand.


Stap 2

Ik zal mijn model kort beschrijven voordat we beginnen. Ik heb het model in twee delen verdeeld: de merry_go_round_move en de merry_go_round_stage. Alle paarden zijn gegroepeerd binnen de merry_go_round_move groep en zijn benoemd GRP_Horse1 naar GRP_Horse12.


Stap 3

Nu we het model begrijpen, beginnen we met het schrijven van onze uitdrukkingen. Begin door naar Venster> Animatie-editors> Expression Editor te gaan.


Stap 4

De Expression Editor is verdeeld in de selectiesectie en de expressiesectie. Nadat u klaar bent met het typen van iets in de expressiesectie, noemen we de expressie in de Expression Name veld en klik vervolgens op de knop "Maken" om de uitdrukking op te slaan. Het verschijnt dan in het selectiegedeelte dat gereed is voor gebruik, terugroepen of bewerken.

OPMERKING: Als u de expressies die u maakt niet kunt zien, gaat u naar Filter selecteren> Op naam van expressie. Dit toont alle uitdrukkingen die je eerder hebt gemaakt, gesorteerd op hun naam (vandaar dat het benoemen van onze uitdrukkingen zo belangrijk is!)


Stap 5

Allereerst moeten we het merry_go_round_move groep. Typ het volgende in de expressiesectie:

 merry_go_round_move.rotateY = merry_go_round_move.rotateY-1;

Geef je expressie nu een naam en klik creëren om het op te slaan. Dus wat doet deze code? Goed op elk frame van onze animatie, deze uitdrukking zal kijken naar de merry_go_round_move huidige groep Y rotatie, trek er een ervan af en maak dat de nieuwe rotatie Y waarde. Het is duidelijk dat als dit wordt herhaald op elk frame terwijl we onze animatie afspelen, de groep langzaam maar zeker in de -Y richting, met een snelheid van 1 graad per frame. Dat is niet snel genoeg!

OPMERKING: Dit model is ontworpen om met de klok mee te draaien, daarom trekken we 1 graad van de af Y rotatiewaarde op elk frame. Als we in plaats daarvan 1 graad aan elk frame toevoegen, draait de groep in de tegenovergestelde richting!


Stap 6

Om ons meer controle over de rotatiesnelheid te geven, gaan we een nieuw kenmerk aan de groep toevoegen. Om dit te doen, selecteert u eerst de merry_go_round_move groep en klik vervolgens in het kanaalvak op Bewerken> Kenmerk toevoegen.

In de Attribuut toevoegen dialoogvenster, voeg de instellingen toe die worden weergegeven in de onderstaande afbeelding:

  • Lange naam : Dit is de naam van ons nieuwe kenmerk.
  • Data type : Als u het gegevenstype instelt op zweeft, kunnen we getallen met decimalen (bijvoorbeeld 1,7) gebruiken voor de waarde rotateSpeed.
  • Minimaal: Dit is de kleinste waarde die we toestaan ​​voor onze rotateSpeed.
  • Maximum: Dit is de grootste waarde die we toestaan.
  • Standaard : Ten slotte is dit de standaardwaarde van het kenmerk.

Stap 7

Als u klikt OK je zult zien dat ons nieuwe attribuut op zijn plaats staat onderaan de kanalenbox. Op dit moment is het echter nergens mee verbonden en heeft het dus geen effect op de snelheid van onze rotatie. Om verbinding te maken, moeten we teruggaan naar de expressie-editor en onze expressie bewerken. Open dus de uitdrukkingseditor, kies uw uitdrukking uit de selectiegedeelte en wijzig deze in:

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

Zorg er nu voor dat u op de nieuwe klikt Bewerk knop die de. heeft vervangen creëren knop onderaan het venster. Hiermee slaat u alle wijzigingen op die u in uw expressie hebt aangebracht.

Zoals je kunt zien hebben we de -1 waarde met een link naar onze nieuwe merry_go_round_move.rotateSpeed attribuut, maar wat doet dit? Onze nieuw veranderde expressie trekt nu de waarde af die we in de rotateSpeed kanaal van onze groep Y rotatiewaarde, op elk frame.

Stel je bijvoorbeeld ons voor rotateSpeed waarde is 1. Op elk frame, onze groep Y rotatiewaarde zal met dezelfde waarde afnemen - 1 graad. Als we onze zouden vergroten rotateSpeed waarde voor 10, de rotatiewaarde neemt met 10 graden af ​​op elk frame - met andere woorden, het roteert 10 keer sneller! We zouden ook kunnen stoppen om volledig te roteren door de merry_go_round_move.rotateSpeed tot 0.


Stap 8

Hoewel het wijzigen van waarden in de kanaalbox relatief eenvoudig is, kan het voor ons leuk zijn om een ​​heel eenvoudige GUI samen te stellen waaruit we de Merry-Go-Round kunnen besturen. Hoewel dit geen uitgebreide Maya UI-zelfstudie is, zou dit u voldoende informatie moeten geven om een ​​beetje te experimenteren!

We gaan een enkel venster maken met één schuifregelaar die ons kenmerk rotateSpeed ​​regelt. Dus begin met het openen van de Scripteditor door naar Venster> Algemene editors> Scripteditor te gaan of door op te klikken Scripteditor knop rechtsonder in je Maya-venster. Eenmaal geopend, typt u het volgende in het invoervak:

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

Ok, laten we daar regel voor regel naar kijken. Deze eerste sectie maakt een nieuw UI-venster van 400x200px groot en stelt de titelbalk in om de tekst weer te geven controls. Het zal echter nog niet verschijnen, omdat we het specifiek moeten vertellen om later in de code te laten zien.

 window -title "Controls" -breedte 400 -hoogte 200;

Dit gedeelte van de code voegt iets toe dat we een lay-out noemen in ons venster. In wezen is een lay-out vereist om schuifregelaars en knoppen toe te voegen aan uw GUI, en deze, zijnde een omlijsting lay-out, voegt een kader toe rond alles wat we erin toevoegen. U zult merken dat we ook een label hebben toegevoegd met de naam Zweefmolen, en stel het frame in demontabel, wat betekent dat we onze sliders kunnen opvouwen voor netheid als onze GUI verder gecompliceerd wordt.

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

Deze lijn voegt een andere lay-out toe binnen onze framelay-out. Waarom? Een kolomlay-out is heel handig om snel en eenvoudig besturingselementen boven elkaar in uw gebruikersinterface toe te voegen, en het wordt vaak gebruikt voor eenvoudige gebruikersinterface-creatie! Als we het niet zouden toevoegen, zouden we elk besturingselement handmatig moeten positioneren, wat een a zou kosten lot langer!

 columnLayout;

Op deze regel voegen we onze eerste controle toe! Het is een floatSliderGrp Dit is een combinatie van een schuifregelaar en een invoervak, die beide de gekoppelde waarde bijwerken. We hebben het gelabeld Snelheid, stel de MINVALUE van de schuifregelaar naar 0 en de maximum waarde van de schuifregelaar naar 5. Heel belangrijk is dat we de besturing hebben benoemd snelheid. Dit is hoe we toegang tot de schuifregelaar krijgen via MEL - als deze geen naam had, zou het bijzonder moeilijk zijn om onze code op te sporen en te gebruiken!

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

Dit is waar we onze gloednieuwe slider verbinden met het kenmerk rotateSpeed ​​dat we eerder hebben gemaakt. Het is een heel eenvoudig proces en wordt in de hulp uitgebreid behandeld. In wezen zeggen we om onze te gebruiken snelheid schuifregelaar, om de waarde van de rotateSpeed attribuut (die op zijn beurt de rotatiesnelheid van onze draaimolen regelt. Eenvoudig!)

 connectControl-snelheid merry_go_round_move.rotateSpeed;

Ten slotte gebruiken we de SetParent ... commando, die ons door de twee stippen springt van het werken met de ColumnLayout, tot de FrameLayout, en dan naar het Window zelf, waarna we het venster tonen!

 setParent ...; ShowWindow;

Als dat is gebeurd, selecteert u alle code en drukt u op Ctrl + Enter om het uit te voeren. Een venster met de naam "Besturingselementen" zou moeten verschijnen met een enkele schuifregelaar. Als je nu op play drukt, kun je de schuifregelaar verplaatsen om interactief de rotatiesnelheid te veranderen! Geweldig!


Stap 9

Dus dat is het hoofdgedeelte dat draait, laten we nu naar de paarden gaan. Ze zullen op en neer gaan, dus we zullen een uitdrukking moeten schrijven om hun vertaal Y-waarde te veranderen.


Stap 10

Dus open de Expression Editor-back-up en laten we een nieuwe expressie maken. Schrijf het volgende in het tekstveld:

 GRP_Horse1.translateY = sin (time);

Zonde is een van Maya's ingebouwde wiskundige functies en als het gaat om oscillerende bewegingen, is het een heel bruikbare! Een sinuscurve (zoals weergegeven in het rood bovenaan deze pagina) is een vloeiende curve die in de loop van de tijd op en neer gaat. Met een beetje bewerking kunnen we deze soepele beweging op en neer gebruiken om de beweging van ons paard te sturen.

Klik met de bovenstaande code in creëren om het te activeren. Als je nu speelt, zal het paard op en neer bewegen, maar niet zoals we willen. We moeten enkele aangepaste kenmerken toevoegen!


Stap 11

We gaan een attribuut toevoegen aan de allereerste paardengroep, om de frequentie van de beweging op en neer te veranderen. Je zou dit attribuut kunnen toevoegen aan elk object in de scène, of zelfs een locator, als je dat wilt, maar vergeet niet dat je de onderstaande uitdrukkingen zou moeten bijwerken, zodat ze het juiste pad naar het attribuut bevatten, anders zullen ze niet heb enig effect!

Selecteer GRP_Horse1, en klik in het kanaalvak op Bewerken> Attribuut toevoegen. Geef het de instellingen die worden weergegeven in de onderstaande afbeelding:


Stap 12

Nu ons nieuwe kenmerk is gemaakt, moeten we teruggaan naar de uitdrukkingseditor om de uitdrukking Sin te wijzigen. Bewerk de expressie zodat deze overeenkomt met de onderstaande code:

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

Zoals je kunt zien, vermenigvuldigen we de tijdwaarde met ons nieuwe frequentiekenmerk, wat van invloed is op het versnellen of vertragen van de snelheid van de oscillerende beweging. Best wel gaaf.


Stap 13

Met ons tweede kenmerk op zijn plaats, hebben we een andere schuifknop nodig in onze gebruikersinterface! Open de back-up van de scripteditor en bewerk het mel-script zoals hieronder wordt getoond:

 window -title "Controls" -breedte 400 -hoogte 200; frameLayout-opvouwbaar true -label "Merry-go-round"; columnLayout; floatSliderGrp -label "Frequency" -field true -minValue 0 -maxValue 10 frequentie; connectControl frequentie GRP_Horse1.frequency; floatSliderGrp -label "Speed" -field true -minValue 0 -maxValue 5-speed; connectControl-snelheid merry_go_round_move.rotateSpeed; setParent ...; ShowWindow;

Zoals je ziet hebben we twee nieuwe lijnen. De eerste maakt een nieuwe schuifknop genaamd frequentie, en de tweede verbindt dit frequentie schuif naar ons nieuwe frequentie attribuut. Beide regels gebruiken dezelfde opdrachten als de Snelheid slider. Als je nu op play drukt, kun je de snelheid van de op en neergaande beweging van het paard interactief aanpassen. We komen er!


Stap 14

Tijd om de andere paarden ook te laten bewegen! Maak nog 11 kopieën van de vorige Sin-expressie, denk eraan de naam van de HorseGrps bij te werken zoals hieronder getoond. Omdat we de snelheid van alle paarden van de single willen regelen frequentie attribuut, het laatste deel van elke uitdrukking blijft hetzelfde. Vergeet niet om te slaan Bewerk als je klaar bent, druk je op play en verplaats je de schuifregelaar om het resultaat te zien!


Stap 15

Briljant! Behalve dat de paarden allemaal op en neer bewegen, wat niet erg realistisch is. We moeten de tijdwaarde voor sommige paarden compenseren, zodat ze op verschillende tijdstippen de top van hun sprong bereiken. Laten we eens kijken hoe het eruit ziet:

Zoals je kunt zien, heb ik 45 toegevoegd aan enkele van de paarden Tijd waarden. Dit kan een willekeurige waarde zijn, maar ik heb er 45 gebruikt omdat het de beweging van die paarden met precies de helft compenseert - ze staan ​​onderaan hun sprong terwijl de rest aan de top staat! Een voorbeeld voor een van de paarden wordt hieronder gegeven:

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

OPMERKING: zorg ervoor dat u de extra haakjes erin plaatst!


Stap 16

Open tot slot de script-editor, maak een back-up van alle code en sleep het naar een lege plek op je plank! Hiermee wordt het script opgeslagen als een plankknop, zodat u het venster gemakkelijk kunt openen zonder alle code opnieuw te hoeven schrijven. Klik nu op de knop, klik op afspelen en bekijk de resultaten van je expressiewerk.


En dat is het! Ik hoop dat je deze tutorial leuk vond. Als u vragen heeft, laat het me weten en ik zal proberen contact met u op te nemen. Bedankt!