Programmeren van een 3D omgeving in Unreal Engine – Karakteranimaties – Animation Blueprint

print
Deze handleiding maakt deel uit van het programmeertraject:



Wat vooraf ging

  • U hebt reeds kennisgemaakt met karakteranimaties – Skeleton.

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. Ik heb de handleiding opgedeeld in twee delen:

Een bron voor gratis karakters en animaties is Maximo.


Blend Space

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.

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 AnimationAnimation 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)/

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.

  • Terslotte 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.


Project Twin Stick Shooter – Animatie

Hero Animation Blend Space

Character Animation Blueprint

Character Death Animations

Attaching the Gun

Animating the Enemy


Masterclasses

Zoals gezegd tijdens de inleiding, deze twee handleidingen zijn slechts een inleiding, er is nog zoveel meer te vertellen en er staat ook nog veel nieuws uit te komen. Animatie in Unreal Engine is een studie op zich.

Wilt u meer weten over animaties in Unreal Engine dan kunnen deze video’s u op weg helpen.

Character Animation in UE4

Animation Blueprint Setup & Walkthrough

Animation Blueprint Setup & Walkthrough Part 2

Animation Blueprint Setup & Walkthrough Part 3

Animation Blueprint Setup & Walkthrough Part 4

Animation Techniques

What is new for animations in UE4

Enhancing Animation with Control Rig

Fortnite: Advancing the Animation Pipeline with Unreal Engine/h3>


Behandelde Basiscompetenties uit de module ICT Programmeren – Specifieke ontwikkelomgeving: complexe functionaliteiten

  • IC BC231 – kan modellen, simulaties of visualisaties van de realiteit maken
  • IC BC246 – kan complexe ontwerpen in een specifieke ontwikkelomgeving maken
  • IC BC251 – kan een ontwerp in een specifieke ontwikkelomgeving verfijnen
  • IC BC253 – kan broncode in een specifieke ontwikkelomgeving optimaliseren

Behandelde Basiscompetenties uit de module ICT Programmeren – Integratie externe functionaliteiten

  • IC BC017 – kan ICT veilig en duurzaam gebruiken
  • IC BC256 – kan diverse elementen tot een nieuw betekenisvol geheel samenstellen
  • IC BC288 – kan ICT-problemen oplossen

Geef een reactie

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

  • Abonneer je op deze website d.m.v. e-mail

    Voer je e-mailadres in om je in te schrijven op deze website en e-mailmeldingen te ontvangen van nieuwe berichten.