- Wat vooraf ging
- Inleiding
- Blend Space
- Animation Blueprint
- Inverse kinematics
- Praktische voorbeelden
- Project Twin Stick Shooter – Animatie
- Masterclass
Wat vooraf ging
- U hebt reeds kennisgemaakt met karakteranimaties – Skeleton.
- U kunt een Animation Sequence opzetten.
Inleiding
In Unreal Engine maken we gebruik van bestaande animaties, we voegen ze toe via programmeercode en blenden ze samen. In Unreal Engine bepaalt u wanneer en hoe de animaties gebruikt zullen worden.
Animaties zijn een cursus op zich, deze handleiding is dan ook niet meer dan een eerste kennismaking waarin ik veelvuldig gebruik maak van links naar de officiële handleidingen, wie alles wilt weten, klik deze zeker aan. Tevens heb ik me laten inspireren door deze tutorial komende van de leeromgeving van Unreal Engine.
Ik heb de handleiding opgedeeld in vier delen:
- Karakteranimaties – Skeleton
- Karakteranimaties – Sequence
- Karakteranimaties – Animation Blueprint
- Karakteranimaties – Geavanceerde en experimentele technieken (videotutorials)
Situering van deze handleiding binnen Unreal Engine
Blend Space
- Open het project aangemaakt in Karakteranimaties – Skeleton.
Een Blend Space zal meerdere animaties blenden (mengen) op basis van meestal 2 parameters (vaak richting (Direction) en snelheid (Speed)). Een 1D Blend Space, met slechts 1 parameter kan ook aangemaakt worden en heeft maar één parameter die de animatie stuurt, bv. enkel snelheid (Speed).
Het Animation Starter Pack (dat we reeds toegevoegd hebben) komt met twee Blend Spaces BS_CrouchWalk (de overgang van hurken naar stappen) en BS_Jog.
- Dubbelklik de Blend Space BS_CrouchWalk om deze te bekijken.
Merk op dat u onderaan het venster een tweedimensionale grid hebt. Met over de horizontale as de Direction, gaande van -180 naar 180 en over de verticale as de Speed gaande van 0 tot 270.
Deze benamingen en waarden zijn bepaald in de Axis Settings in het panel Asset Details.
U ziet ook verschillende witte ruitjes, deze bepalen welke animatie er bij die specifieke waarden van Direction en Speed moet worden afgespeeld. U ziet deze ruitjes op verschillende punten in de grid.
Het groene ruitje, dat standaard centraal staat, kunt u verschuiven, u zal merken dat de animatie zich vloeiend aanpast. Alle animaties blenden samen.
Een Blend Space aanmaken
Om een nieuwe Blend Space aan te maken:
- Klik met de rechtermuisknop in de folder waar de Blend Space moet komen.
- Klik op Animation.
- Kies voor een “gewone” Blend Space (2D) of een Blend space 1D.
- Om het eenvoudig te houden kies voor Blend Space 1D.
- Selecteer de gewenste Skeleton (hier de SK_Mannequin_Skeleton komende uit het Animation Starter Pack) en geef een passende naam (bv. BS_Test).
- Dubbelklik om de Blend Space 1D te openen.
U ziet de ééndimensionale grid staan, gaande van 0 naar 100 met de parameternaam None. Om dit te wijzigen:
- Ga naar de Axis Settings Horizontal Axis in het panel Asset Details.
- Geef de gewenste waarden is (bv. voor de (parameter)Name Speed en voor de Maximum Axis Value 600).
Opmerking, verloopt de overgang tussen de animaties niet echt vloeien dan kunt u de Interpolation Time wijzigen (naar een waarde tussen 0.1 en 1). Dit zal zorgen voor een vloeiendere overgang.
Nu rest ons nog de nodige animaties op de as toe te voegen. Bijvoorbeeld:
- Plaats links een Idle animatie
- in het midden een Jog animatie
- en rechts een Sprint animatie.
Om dit te doen,
- Zoek in de Asset Browser naar Idle.
- Sleep de gewenste animatie (bv. Idle_Rifle_Hip) links op de as (Speed 0.0).
- U krijgt een ruitje op de as dat u met de rechtermuisknop kunt aanklikken voor extra informatie.
- Herhaal dit voor een Jog (Jog_Fwd_Rifle Speed 300) en Sprint (Sprint_Fwd_Rifle Speed 600) animatie.
- Sleep het groene ruitje om de animatie op een specifiek Speed te bekijken.
Een “gewone” Blend Space werkt gelijkaardig maar gebruikt 2 assen.
Nu de Blend Space aangemaakt is moet deze nog worden gebruikt binnen het programma, dit gebeurt via de Animation Blueprint.
Animation Blueprint
- We hebben afzonderlijke animaties.
- We hebben Blend Spaces die op basis van parameterwaarden (zoals Speed en Direction) animaties blendt.
Maar waar bepalen we nu wanneer deze animaties worden uitgevoerd en hoe kennen we de waarden toe aan de parameters?
Wel, dit gebeurt in de Animation Blueprint.
- Open de Animation Blueprint UE4ASP_Hero_TPP_AnimBlueprint.
In het panel MyBlueprint ziet u twee belangrijke Graphs:
- EventGraph
- AnimGraph (State machine)
U ziet ook een reeks variabelen staan die gebruikt gaan worden voor de sturing van de animaties (merk reeds de variabelen Speed en Direction op die zullen gebruikt worden om de parameters Speed en Direction van de Blend Spaces aan te sturen.
EventGraph
In de EventGraph worden de nodige waarden berekend voor de variabelen die de animatie sturen (Speed, Direction,…).
Onderstaande schermafdruk bevat de standaardcode, enkel wat beter geordend en voorzien van commentaar.
- De code wordt uitgevoerd bij Event Blueprint Update Animation, dus iedere keer als de animatie wordt geüpdatet.
- De eigenaar van de animatie, ons karakter, wordt opgevraagd via Try Get Pawn Owner en levert de nodige informatie voor de waarden.
- De variabele Speed (de snelheid) wordt bepaald door Get Velocity -> VectorLenght.
- De Velocity en de rotatie (GetActorRotation) worden gebruikt als invoerparameters voor de functie Calculate Direction. Deze functie levert de waarde voor de variabele Direction.
Merk ook de functie Can Jump op.
AnimGraph (State Machine)
De AnimGraph bepaalt hoe de verschillende animaties ten opzichte van elkaar geactiveerd kunnen worden, de State Machine.
- Klik op AnimGraph, u ziet de Final Animation Pose, bepaald door een State Machine met de zelfgekozen naam Locomotion.
Klik op de State Machine Locomotion, u ziet de verschillende mogelijke staten (Idle, Jump, Jog, Run Jump, Crouch en Crouch Walk) van het karakter, hoe ze verbonden zijn en wat de regels zijn voor de overgangen.
- Dubbelklik bv. op de State Jog en u merkt de Blend Space BS_Jog op, gestuurd door de variabelen Direction en Speed.
- Dubbelklik bv. op de State Jump en u merkt dat hier “gewoon” een animatie Jump_From_Stand achter zit.
- Duid een overgang (Transition) aan om te zien wat de regel is voor de overgang.
- Dubbelklik op de overgang om de code te zien.
- De tegenovergestelde overgang zal de tegenovergestelde regel bevatten.
Een Animation Blueprint aanmaken
Om zelf een Animation Blueprint aan te maken:
- Klik met de rechtermuisknop in de folder waar u de Animation Blueprint wilt plaatsen.
- Kies voor Animation – Animation Blueprint.
- Een Animation Blueprint hoort bij een Skeleton, kies de gepaste Target Skeleton (hier de Skeleton van het Animation Starter Pack).
- Geef het een gepaste naam en dubbelklik om te openen.
- De Final Animation Pose staat klaar.
De Final Animation Pose zegt het zelf, de finale animatie die moet gespeeld worden. U kunt dus maar één animatie inpluggen.
Hebt u meerdere mogelijke animaties, waarvan er uiteindelijk maar één zal gespeeld worden, dan moet u kunnen bepalen welke animatie er moet gespeeld worden. Dit gebeurt via een State Machine.
- Klik rechts op de achtergrond en zoek naar Add New State Machine.
- Kies een naam (bv. State Machine).
- Dubbelklik om de State Machine te openen.
U ziet een Entry staan. We gaan nu een heel eenvoudige State Machine bouwen.
- Sleep een pijl vanuit Entry en kies voor Add State….
- Geef het de nieuwe State een naam (bv. Ter Plaatsen)
- Dubbelklik op de net toegevoegde State, u ziet opnieuw een Final Animation Pose.
- Sleep de gewenste animatie (bv. Idle_Rifle_Hip) in de Animation Blueprint en verbindt de animatie met de Final Animation Pose.
- Klik bovenaan weer op State Machine om weer te keren.
- Vanuit de State Ter Plaatsen, sleep opnieuw een pijl en maak een nieuwe State aan (bv. Stappen-Lopen)/
- Merk op dat u een Transition Rule kunt/moet meegeven.
Uiteraard moet u ook kunnen terugkeren van Stappen-Lopen naar Ter Plaatsen, trek dus ook een pijl terug.
Voor de State Stappen-Lopen gaan we onze eigen Blend Space gebruiken en daarvoor gaan we de parameter Speed moeten een waarde toekennen.
De overgang van Ter Plaatsen naar Stappen-Lopen gebeurt als de snelheid (Speed) groter is dan 0, terug, van Stappen-Lopen naar Ter Plaatsen indien de snelheid (Speed) 0 is.
We gaan dus de snelheid (Speed) moeten bepalen en zoals u reeds weet gebeurt dit in de Event Graph.
- Klik op Event Graph. Er staan wel nodes klaar maar, uiteraard, nog geen code.
Nu, om het ons gemakkelijk te maken, we hebben de nodige code al staan in de Animation Blueprint UE4ASP_Hero_TPP_AnimBlueprint.
Ga naar de Event Graph van de Animation Blueprint UE4ASP_Hero_TPP_AnimBlueprint. Kopieer de code tot en met de node Set Direction (hoewel de Direction niet meteen nodig is, is het maar een kleine moeite deze mee te nemen).
- Keer terug naar de Event Graph van onze eigen Animation Blueprint en plak daar de nodes.
U krijgt een Warning op de variabelen, deze zijn immer nog niet aangemaakt.
- Een eenvoudige manier om de variabelen aan te maken is, klik met de rechtermuisknop ingedrukt op de Warning en kies Create Variable.
- Doe dit voor beide variabelen.
- Keer terug naar de State Machine en dubbelklik op de overgang tussen Ter Plaatsen en Stappen-Lopen. U ziet de node staan Can Enter Transition (van het type Boolean)
- De overgang moet gebeuren als de variabele Speed groter is dan 0 (oké, slimme lezers hebben opgemerkt dat de Blend Space reeds begint bij 0, klopt, maar laat ons dit voor het gemak van dit voorbeeld negeren). Maak deze eenvoudige code aan.
- Doe dit nu ook voor de overgang van Stappen-Lopen naar Ter Plaatsen. Hier moet de Speed kleiner dan of gelijk zijn aan 0.
- Tenslotte open de State Stappen-Lopen. Sleep onze zelfgemaakte Blend Space in de Blueprint, verbindt met de Final Animation Pose en verbindt de variabele Speed met de parameter Speed.
- Compile en Save.
Testen
Dit is een heel eenvoudige State Machine maar dit moet voldoende zijn om u in gang te zetten.
In de Anim Preview Editor kunt u waarden ingeven om te testen.
Vergeet niet deze Blueprint aan uw karakter toe te kennen indien u deze zou willen testen in game met uw karakter.
We eindigen met wat goede raad.
Inverse kinematics
Inverse Kinematics, kortweg IK, is het omdraaien van de kinematics.
Bijvoorbeeld, als u uw voet op de grond plaatst heeft dit effect op andere bones, zoals uw been, heup,…of als u uw hand tegen de muur duwt heeft dit invloed op uw elleboog, schouder,…
Inverse Kinematic wordt ook vaak toegepast in de animatie van mechanische toestellen.
Inverse Kinematics is dus belangrijk om de voeten van uw Character correct te plaatsen, iets dat standaard niet het geval is.
Onderstaande video’s toont hoe u dit eventueel kunt toevoegen.
Advanced Locomotion System
Wens u gevorderde karakteranimaties dan kunt u een project starten op basis van ALS (Advanced Locomotion System). Dit systeem is permanent gratis gemaakt en vindt u op de Unreal Marketplace.
Praktische voorbeelden
Project Twin Stick Shooter – Animatie
De video’s vindt u op Twin Stick Shooter with Blueprint (unrealengine.com).
Bekijk de video’s:
- Hero Animation Blend Space
- Character Animation Blueprint
- Character Death Animations
- Attaching the Gun
- Animating the Enemy