Naar de Oogst-overzichtssite

Meer tutorials door Oogst

Tutorial voor animatie-automatisering

voor 3d Studio MAX r4 en r5

door Joost 'Oogst' van Dongen

Lukt de tutorial niet, zitten er fouten in of heb je iets anders te melden? Mail dan ff naar tsgoo@hotmail.com

Inhoudsopgave:
Inleiding
Eeuwig stuiterende bal
Lopende band
Hydraulisch aangedreven arm
Vaste verbinding 1 (spline)
Vaste verbinding 2 (space warp)
Zuiger
Treintje

Inleiding

In deze tutorial komt een aantal technieken aan bod om animaties te automatiseren, zodat je niet meer elke beweging van elk object handmatig in hoeft te stellen. Enkele van die technieken zijn: pivots, looping, linking, de look-at controller, de path deform-modifier, dummies, bones en wire parameters. Deze technieken worden besproken aan de hand van praktijkvoorbeelden en van eenvoudig tot complex, dus van boven naar beneden werken is sterk aan te raden in deze tutorial.

In deze tutorial wordt er vanuit gegaan dat je alles in mijn huisje-tutorial-serie al kent, dus ken je die nog niet en ben je enigszins n00b, doe die dan eerst. Vooral de technieken van het vierde deel in die serie, over animeren, zijn hier veelvuldig nodig.

Eeuwig stuiterende bal

We gaan nu een bal maken die eeuwig blijft stuiteren, hij gaat stuiteren zoals je hier onder kunt zien.

Stel eerst in de time configuration in dat FPS=24 en end time=200. Zet nu een box naar met zijn bovenkant exact op hoogte 0, dit is de ondergrond. Zet nu een geosphere neer met radius=20, recht boven de box, hoe hoog er boven maakt niet uit. Zoom nu een flink stuk in op de bal en selecteer hem. Ga nu naar de material editor en geef de bal een checker-map in diens diffuse map en klik op show map in viewport. Dit laatste doen we overigens alleen maar om onze beweging goed te kunnen zien.

Ga naar het hierachy-paneel en daarin naar pivot, zie hier rechts.. Dit is een nieuw paneel dat we nu nodig hebben en dat de bepaalde instellingen bevat voor een object dat moet reageren op andere objecten, of op zijn eigen pivot, die we nu gaan gebruiken. Klik op affect pivot only. Je krijgt nu de pivot te zien, midden in je object, zoals hier onder links.

De pivot bepaald hoe draaiing en vergroting/verkleining plaats vinden. Voor draaiing is de pivot de as waar omheen gedraaid wordt en voor vergroting/verkleining is de pivot het punt waar het object naar verdwijnt als je hem oneindig klein zou maken. Aangezien we de bal op de grond willen laten vervormen, moet de pivot helemaal onderin de bal komen. Ga daarvoor naar de front-viewport en verplaats de pivot totdat hij exact in het onderste puntje van de bal staat, zoals hier boven rechts. Klik nu nogmaals op affect pivot only om hem zo te laten. Probeer nu eens te draaien en te vergroten/verkleinen. Als alles goed is gegaan moet er nu gedraaid en vergroot/verkleind worden met de pivot als centrum.

We gaan één stuiter nu animeren. Hier links zie je de In- en Out-interpolaties met letters, zodat ik ernaar kan verwijzen.

Kies voor je bal als position-controller voor positionXYZ, want we willen toch alleen maar de Z-as hebben. Voor de scale-controller gebruiken we wat standaard is geselecteerd.

Maak nu voor de positie van de bal de volgende keys aan: op frame 0 en op frame 56 een key met Z-position=200. En frame 26 en op frame 30 een key met Z-position=0. Tussen frame 26 en frame 30 gaat de bal vervormen, dus daar willen we dat hij stil staat. Van frame 0 tot frame 26 willen we dat de bal steeds sneller valt en van frame 30 tot frame 56 willen we dat de bal steeds langzamer omhoog gaat. Probeer zelf te bedenken welke interpolaties daarbij horen, zo dadelijk volgt een tabelletje met de waarden ter controle.

Maak voor de scale van de bal de volgende keys aan: op frame 0 en op frame 56 en op frame 26 en op frame 30: x=100; y=100; z=100. Op frame 28: x=140; y=40; z=140. Welke van de drie nou de waarde 40 moet hebben moet je even proberen, want dat is afhankelijk van in welke viewport je je geosphere hebt gemaakt. Het is de bedoeling dat de bal op frame 28 naar beneden is platgedrukt.

Voor de scale moet het zo zijn, dat er tussen frame 0 en frame 26 niks verandert en dat er tussen frame 30 en frame 56 niks verandert. Tussen frame 26 en frame 28 moet de bal steeds langzamer platter worden en tussen frame 28 en frame 30 moet de bal steeds sneller minder plat worden. Probeer zelf te bedenken welke interpolaties daarbij horen.

De waarden die je overpeinzingen op hadden moeten leveren zijn:

key-type en frame In-interpolatie Out-interpolatie
position frame 0 maakt niet uit E
position frame 26 D B
position frame 30 B D
position frame 56 E maakt niet uit
scale frame 0 maakt niet uit B
scale frame 26 B D
scale frame 28 E E
scale frame 30 D B
scale frame 56 B maakt niet uit

Bekijk nu je animatie. Als je alles goed hebt gedaan, zie je nu dat de bal van frame 0 tot frame 56 netjes stuitert en daarna niets meer doet.

Selecteer nu je bal en ga naar track view>>curve editor. Selecteer nu de scale en de Z-position, zoals hier rechts is gegaan. Je zou nu ongeveer dezelfde grafiek te zien moeten krijgen als hier rechts.

Klik nu op parameter curve out-of-range types. Hiermee kun je instellen dat een beweging herhaald moet worden.

Je krijgt nu het menu te zien dat je hier links ziet. Standaard zijn de twee pijltjes die hier links groen omcirkeld zijn geselecteerd. Dit betekent dat er geen herhaling, oftewel looping, plaats moet vinden. Kies daarvoor in de plaats de pijltjes die heir links blauw omcirkeld zijn, onder cycle. De grafiekjes geven aan hoe de animaties herhaald gaat worden. Het te herhalen stuk is het stuk van de eerste tot en met de laatste key, dus in ons geval van frame 0 tot en met frame 56. Het pijltje naar links is voor het deel tot de keys die je hebt ingesteld, dus links in de grafiek, het pijltje naar rechts is rechts van je keys.

Klik nu op OK en bekijk de grafiek. Je ziet nu dat met stippellijntjes de herhaling aan wordt gegeven. Dit is handig, want nu kun je goed zien of je herhaling goed klopt en niet overspringt.

Bekijk nu je animatie en de viewport en je zult zien dat ook na frame 56 de bal vrolijk doorstuitert. In feite stuitert de bal zelf door tot in het oneindige. Ook op frame 364526 en op frame -238 is hij nog vrolijk aan het stuiteren.

Lopende band

We gaan nu een lopende band maken. Dit is op zich iets heel eenvoudigs, maar je moet net even weten hoe je dit handig aan kunt pakken.

Begin met het teken van een spline die de route van je lopende band voorstelt, zo ongeveer als hier rechts boven dus. Probeer zelf maar even met splines hoe je zoiets het gemakkelijkst tekent, mijn vertices zie je hier rechts onder.

Maak nu een lange lopende band die gewoon recht loopt, dus ongeveer zoals je hier onder kunt zien. Het is niet erg als deze lopende band uit een heleboel objecten bestaat. Dit is snel te maken met een array.

Je lopende band kan er in principe uitzien zoals je zelf maar wilt. Let er wel op dat er in de lengte genoeg polygonen aanwezig zijn om hem vloeiend te draaien. Dit kun je hier boven zien in het onderste stukje van het plaatje. De lange verbindingsbalken hebben in de lengte een heleboel polygonen, zodat ze netjes mee kunnen draaien.

Selecteer nu alle objecten in je lopende band en maak er één groot object van met group>>group, zoals je hier rechts kunt zien. Je kunt ze ook samenvoegen met attach multiple in een edit mesh-modifier bij één van je objecten. Dit is sneller en effectiever voor je computer, maar je kunt dan de losse objecten niet meer bewerken. Nu met group kun je door bij de group op group>>open te klikken de group eventueel nog openen om onderdelen te bewerken.

Zorg nu dat je je group hebt geselecteerd en ga naar het modifier-paneel. Kies daar als modifier uit de object space modifiers voor de pathDeform-modifier. De instellingen daarvan zie je hier links. De pathDeform-modifier vormt een object om een spline, de path heen. Klik dus op pick path en kies de lijn die je hebt gemaakt als route voor de lopende band.

Nu wordt waarschijnlijk de lopende band behoorlijk vreemd vervormd, niet zoals je graag zou willen. Probeer daarom onder path deform axis welke as je moet hebben voor een goede vervorming. Bij mij was het de X-as, maar dat hoeft niet zo te zijn. Hier onder in het midden zie je hoe het nu zou moeten zijn.

Het kan echter ook dat het is misgegaan, zoals je hier boven links ziet. De band zit nu binnenste buiten. Het is even tricky om dit op te lossen, maar maar wel snel gedaan. Klik daarvoor onder PathDeform op Gizmo, zoals je hier boven rechts ziet. Draai nu de gizmo exact 180 graden (echt exact, niet ongeveer, dan klopt het niet meer). Je moet draaien over de goede as in de goede viewport, dus probeer even welke je moet hebben om het resultaat hier boven midden te krijgen.

Kijk nu eens goed naar je lopende band. Je zult zoiets zien als hier rechts. De stukken van de lopende band zijn in bepaalde delen heel erg klein en in andere delen juist heel breed. Wanneer je dit nu zou gaan animeren, zou je zien dat de stukken de hele tijd vervormen, wat uiteraard niet de bedoeling is. Dit komt doordat in je path de vertices niet op gelijke afstand van elkaar zitten. Dit is gemakkelijk te verhelpen. Selecteer je spline die als path wordt gebruikt en ga naar het modifier-paneel. Kies daarvoor de Normalize spl-modifier en kies een behoorlijk lage waarde, bijvoorbeeld 1,0. Deze modifier zorgt ervoor dat er op gelijke afstand een heleboel vertices bijkomen in de spline.

Nu zou dat goed moeten zijn, maar nu zien we hier links nog een nieuw probleem: in één deel van de lopende band loopt hij dubbel. Verander daarvoor bij de pathDeform-modifier van je lopende band de stretch-waarde zo dat hij exact op zichzelf aansluit. Bij mij was hiervoor nodig dat stretch=0,951. Een zeer precies getal dus, dus probeer even tot je hem perfect hebt aansluiten.

Het enige dat je nu nog hoeft te doen om je lopende band te animeren, is de percent-waarde animeren. Percent geeft namelijk de vordering van onze lopende band over de path aan. Dit kan gewoon geanimeerd worden in de track view en uiteraard kun je ook deze animatie weer laten loopen.

Hydraulisch aangedreven arm

Nu komen we aan bij het complexere werk: een arm met tussen de delen een mooie hydraulishe aandrijving. De bedoeling is nu, om deze zo te maken dat die automatisch meebeweegt wanneer je de arm beweegt. Hierbij komen een paar nieuwe dingen kijken: de look-at constraint en linking.

Maak eerst de constructie die je hier onder kunt zien, bestaande uit twee armen en twee cylinders. Voor de armen zijn boxes met extrude of anders boolean handige methoden om ze te maken. Geef de objecten de namen die ik erbij heb gezet, zodat ik er gemakkelijk naar kan verwijzer.

Eerst gaan we deze armen aan elkaar linken. Hiervoor zijn er twee icoontjes: select and link en break link. Klik op Select and link, die hier rechts geel is. Klik nu met de linker muisknop op arm2 en sleep van daaruit met de linker muisknop ingedrukt naar verbinding1. Tussen de twee onstaat nu een stippellijn. Laat de muisknop los boven verbinding1. Nu is arm2 gelinkt aan verbinding1. Verbinding1 is nu de parent, oftewel de baas, van arm2. Arm is de child, oftewel de slaaf, van verbinding1. Wanneer je nu verbinding1 draait, verplaatst of roteert, dan gaat arm2 automatisch mee.

Link op dezelfde manier verbinding2 aan verbinding1. Link tenslotte arm1 aan verbinding2. Draai nu verbinding1 en zie dat alles netjes meedraait met dit ene object. Draai nu verbinding2 en zie dat alleen arm1 meedraait. Verbinding2 is nu dus zowel de child van verbinding1 als de parent van arm1.

Mocht je de link ongedaan willem maken, dan kan dat door een child te selecteren en op break link te klikken. De child is dan niet meer gelinkt aan diens parent.

Nu gaan we een nieuw type object gebruiken: een zogenaamde helper. Helpers zijn niet renderbaar en doen op zich niets, maar zijn vaak wel handig in dit soort constructies, juist omdat ze niet meegerenderd worden. Je vindt de helpers in het create-paneel onder helpers, hier links rood omcirkeld. De helper die we nodig hebben is de dummy.

We hebben er twee nodig, dus zet ze neer zoals je hier onder kunt zien en geef ze de namen die er hier onder bij staan.

Link nu dummy1 aan verbinding1 en dummy2 aan verbinding2.

Overigens is het in dit geval niet persé nodig dummies te gebruiken, maar nu maken we mooi even kennis met deze aardige jongens.

Zet nu een tube neer, vlakbij dummy1 en op precies dezelfde hoogte, recht ervoor. Zie hier rechts. Link deze tube01 aan dummy1.

Selecteer nu dummy1 en ga naar het motion-paneel. Verander diens rotation-controller in de lookAt Constraint-controller. Klik nu op Add LookAt Target en kies vervolgens dummy2. Dummy1 zal nu altijd wijzen in de richting van dummy2, ook als je dummy2 of dummy1 verplaatst. Aangezien tube01 gelinkt is aan dummy1, kijkt die nu ook naar dummy2.

De kans is nu groot dat er iets mis is gegaan, zoals hier boven links. Verander dan bij dummy1 bij select lookAt axis (zie hier rechts) de as en zet eventueel flip aan om ervoor te zorgen dat tube01 netjes naar dummy2 wijst. Dit is nodig omdat MAX natuurlijk niet bij voorbaat weet wat volgens jou de voorkant van dummy1 is.

Draai nu met verbinding1 en met verbinding2 om te zien dat tube01 ook dan netjes dummy2 blijft volgen.

Zet nu op vergelijkbare wijze een cylinder, cylinder01, neer bij dummy2. Zorg dat de radius van cylinder01 gelijk is aan de kleinste radius (de binnenkant dus) van tube01, zodat cylinder01 precies in tube01 past. Zorg oo dat cylinder01 niet breder is dan de tussenruimte tussen de twee spaken van arm1, zodat cylinder01 er netjes tussen past. Je zou nu zoiets moeten hebben als hier rechts te zien is.

Maak nu een copy van dummy2, noem die dummy3. Link nu cylinder01 aan dummy3.

Doe nu hetzelfde met dummy3 als met dummy1. Dus geef dummy3 een lookAt constraint-controller en laat hem met add lookAt target kijken naar dummy1. Kies ook de goede as.

Waar we nu dummy3 voor gebruikten, had ook gekund met dummy2. Dit laat MAX echter niet toe, want dan kijken twee objecten naar elkaar en blijkbaar is MAX dan bang voor een probleem (endless loop gok ik), dus dit is niet toegestaan. Vandaar dat we dummy3 hebben moeten maken.

Wanneer je nu met verbinding2 gaat draaien, zul je zien dat zowel cylinder01 als tube01 mooi meebeweegt en dat ze mooi in elkaar vallen, zoals je ook hier onder kunt zien. Ook draaien met verbinding1 gebeurt heel netjes.

Het gaat nu echter wel goed mis wanneer je de hoek te groot of te klein maakt, zoals je hier rechts kunt zien. Dit is een heel normaal probleem, dat er ook in het echt gewoon is. Om dit op te lossen, kun je de lengtes van tube01 en van cylinder01 aanpassen, maar je houdt het probleem altijd, alleen dan bij andere hoeken tussen de armen.

Overigens hebben we nu nog iets niet gedaan: we hebben nog geen mooie verbinding gemaakt tussen arm2 en tube01. Dit is heel eenvoudig, want je kunt gewoon linken aan dummy1, dus ik ga het niet voor je uitleggen.

Het resultaat van dit deel van deze tutorial is dus een mooi arm met een hydraulische aandrijving er tussen, die netjes volautomatisch meebeweegt wanneer je de arm beweegt.

Vaste verbinding 1 (spline)

Soms heb je twee objecten die je met elkaar wilt verbinden door middel van een derde object. Dit kan een touw zijn, een elastiek, of eigenlijk al het andere ook wel. Je kunt er dan voor zorgen dat MAX dat derde object er gewoon standaard tussen houdt. Let wel: MAX controleert bij deze vaste verbinding zoals we hem nu doen geen afstanden, dus je object kan flink uitgerekt worden als je niet oplet.

De eerste methode hiervoor is met een spline. Maak even de simpele scene zoals je hier rechts kunt zien. Twee boxes, die dus met elkaar verbonden willen worden, en daar tussen een spline met twee vertices.

Voeg aan de spline een edit spline-modifier toe, ga naar het vertex sub-level en selecteer de bovenste vertex. Terwijl deze nog steeds netjes geselecteerd is, voeg je de linked XForm-modifier toe. Klik op pick control object en kies de bovenste box.

Je modifier-stack zou er nu zo uit moeten zien als hier links. Zeer belangrijk zijn de rood omcirkelde puntjes. Deze geven aan dat er vertices geselecteerd zijn en dat de modifier die er voor staat dus alleen werkt voor die specifieke vertices.

Beweeg nu met de bovenste box. Als het goed is blijft de bovenste vertex van de lijn er aan vast plakken.

Voeg nu een nieuwe edit spline-modifier toe aan je spline en selecteer daarin alleen de onderste vertex. Voeg opnieuw een linked XForm-modifier toe, klik op pick control object en kies nu je onderste box. Beweeg nu eens met je boxes en zie dat de lijn de beide boxes netjes volgt. Je modifier-stack zou er nu zo uit moeten zien als hier rechts.

Onze lijn loopt nu recht, maar je kunt hem natuurlijk ook krom laten lopen, want het is tenslotte een spline. Hier rechts zie je hoe dat dan kan. Je kunt een vertex achteraf veranderen van een vertex zonder richting naar een vertex met richting door met de rechter muisknop op de vertex te klikken. Kies Uit het grote menu dat er nu opkomt voor bezier in plaats van corner en je hebt een vloeiender lijn.

Overigens gaan we nu verder met de rechte lijn, deze kromme lijn is er alleen als voorbeeldje.

Maar nu hebben we een leuke lijn, maar nog geen renderbaar object. Natuurlijk kun je je lijn nu renderbaar maken in diens instellingen in het modifier-paneel, maar dat geeft niet veel mogelijkheden: alleen een ronde lijn.

Veel meer mogelijkheden levert de loft-object. Hierbij wordt een vorm, de shape, over een lijn getrokken, de path. Wat we nu hebben is de path, dus zet een spline neer van het type circle om ook een shape te hebben.

Selecteer nu je lijn, ga naar create>>geometry>>compound objects en kies loft, zoals je hier links kunt zien. Nu verschijnt er een menu onder, klik daarin op get shape, hier links rood omcirkeld. Kies nu je circle, want dit was onze path. Je zul nu zien dat de circle over de line heen wordt getrokken.

Loft-objects bieden ongelooflijk veel mogelijkheden. Zoveel dat ik zelfs niet een poging ga doen ze uit te leggen, want het is gewoon teveel. Met loft-objects kun je werkelijk bijna alles maken en ze zijn dan ook vaak handig.

We gaan er nu een veer mee maken. Selecteer daarvoor je circle en voeg er een edit spline-modifier aan toen. Ga nu naar het spline sub-object niveau en verplaats heel je spline een stukje van zijn midden vandaan, net zoals ik hier rechts heb gedaan.

De buis van je loft-object loop nu niet meer precies over je line heen, wat ook de bedoeling was.

Selecteer nu weer je loft-object en ga naar het modifier-paneel. Zet onder skin parameters de shape steps op 1 en de path steps op 50, zie hier links. Hiermee krijgt onze loft de juiste polygoon-aantallen voor onze doeleinden.

Ga nu weer verder naar beneden en klik onder deformations op twist om draaiing in te stellen. Kies in het menu dat nu opent het recht punt en zet diens waarde op 2000 (graden), zoals je hier onder kunt zien.

Als alles goed is gegaan zie je nu zoiets als hier boven rechts. Beweeg nu met de beide boxes en zie hoe onze veer ze allebei volgt en hoe hij platter wordt wanneer de boxes dichter bij elkaar komen. Het kan zo zijn dat je veer te breed is, zet dan je circle met diens edit spline-modifier weer wat dichter bij zijn beginpunt.

Vaste verbinding 2 (space warp)

We hebben nu een vaste verbinding gemaakt met een spline en een loft, wat zeer goed werkt. Hoewel een loft veel kan, kun je er niet alles mee. Daarom gaan we nu een ketting neerzetten en die op een andere manier vastmaken. Maak daarvoor zo ongeveer de scene zoals je hier rechts kunt zien. De exacte vorm is niet zo belangrijk.Group je ketting tot één object. Dit is niet noodzakelijk, maar wel handig in dit geval.

We gaan nu weer eens een nieuw type object neerzetten, deze keer een space warp. Je vindt de space warps bij create>>space warps. Space warps zijn niet renderbaar. Het zijn een soort van modifiers die als objecten in je scene hangen en andere objecten beïnvloeden. Voorbeelden daarvan zijn onder andere wind en zwaartekracht.

We hebben er nu één nodig van het type FFD(Box), die je vindt onder geometric/deformable, zie hier links.

Zet deze zo neer dat hij precies heel je ketting omsluit in alle viewports. De gehele ketting moet binnen de FFD(box) vallen, maar maak je FFD(box) niet heel erg groot.

Klik nu op het bind to space warp icoontje dat je hier boven kunt zien. Dit werkt hetzelfde als linken. Klik dus nu met de linker muisknop op de ketting, houdt de linker muisknop ingedrukt, beweeg naar je FFD(box) en laat de linker muisknop daarboven los.

Wanneer je nu je ketting zou ungroupen of de group zou openen en een schakel zou selecteren, zou je zien dat in diens modifier-stack nu boven het volgende staat: *FFD binding. Dit betekent dat je ketting nu beïnvloed wordt door deze space warp.

Selecteer nu de FFD(box) en ga naar het modifier-paneel. Klik daarin op set number of points (zie hier links) en zet alle waarden op 2.

Ga nu in de modifier-stack naar het control points sub-object level. Sleep eens flink met een paar punten en zie dat die je ketting vervormen. Zorg dat ze allemaal weer netjes staan en selecteer de vier bovenste punten. Voeg nu, terwijl ze nog geselecteerd zijn, de linked XForm-modifier toen.

Klik op pick control object en kies de bovenste box. Voeg nu de FFD select-modifier toe en selecteer de onderste vier punten. Voeg nu, opnieuw terwijl deze vier punten nog geselecteerd zijn, weer een linked XForm-modifier toe. Klik nu weer op pick control object en kies deze keer de onderste box. Je modifier-stack zou er nu zo uit moeten zien als hier rechts.

Beweeg nu eens lekker een beetje met je boxes en zie dat de ketting ze netjes volgt.

Naar de Oogst-overzichtssite

Meer tutorials door Oogst