Šimon Javorský

Anglický jazyk
Databázové systémy
Neurónové siete
Softvérové ininierstvo
Tajomstvá mikrosveta

Počítačová grafika
Sémantický web


Seminár z počítačovej grafiky a videnia


[odkaz] na stránku predmetu


Unreal

Unreal Engine je herný engine vytvorený spoločnosťou Epic Games, prvykrát predstavený v roku 1998 prostredníctvom FPS hry Unreal. Napriek tomu, že sa engine orientuje na FPS hry, úspešne sa presadil aj medzi ostatným žánrami ako napríklad sealth, zápasnícke, MMORPG, RPG. Kódy enginu písané v C++ mu umožňujú veľkú mieru prenositeľnosti. Je to nástroj používaný mnohými hernými vývojármi a víťaz niekoľkých ocenení, okrem iného aj Guinessového rekordu za najúspešnejší herný engine.

Aktuálna verzia je Unreal Engine 4, určená pre Microsoft Windows, MacOS, Linux, SteamOS, HTML5, iOS, Android, Nintendo Switch, PlayStation 4, Xbox One, Magic Leap One a viruálnu realitu pre HTC Vive, Oculus Rift, PlayStation VR, Google Daydream, OSVR a Samsung Gear VR. [wiki]


Prostredie

Unreal Engine je možné stiahnuť pomocou Epic Games Launcheru [tu]. Na jeho inštaláciu je potrebná registrácia.


Prehľad launcheru:

Comunity obsahuje informácie o novinkách vo svete Unreal Engine alebo Epic Games. Zväčša odkazuje na články, ale nachádzajú sa tu aj odkazy na fórum, wikipédiu a iné.

Learn poskytuje návody pre nováčikov, rozrobené demonštračné projekty ale aj odkazy na dokumentáciu, videonávody a wikipédiu.

Marketplace je miesto, kde je možné nakupovať assety vytvorené inými užívateľmi, prípadne stiahnuť tie, ktoré sú voľne dostupné.

Library uchováva všetky vývojárove súbory. V sekcii Engine versions sú jednotlivé verzie enginu, ktoré sú nainštalované, v sekcii My projects sú projekty uložené na danom počítači a v sekcii Vault sú všetky assety, ktoré má daný účet k dispozícii, nainštalované aj nenainštalované.


Prehľad editoru:

Viewport je pohľad do našeho levelu. Umožňuje nám vidieť objekty a manipulovať s nimi.

World Outliner obsahuje všetkých actorov nachádzajúcich sa v našom leveli.

Details Panel zobrazuje detaily, vlastnosti a nastavena vybraného objektu.

Modes Panel umožnuje meniť módy v editore, napríklad pridávanie objektov, zmena terénu, zmena geometrie tvarov.

Content Browser zobrazuje obsah projektu usporiadaný v priečinkovej štruktúre.

Main Toolbar poskytuje rýchly prístup pre prácu s projektom a odkazy na rôzne nastavenia.

Pre viac informácii prozri [tento] a [tento] tutoriál.


Tutoriál k materiálom

Tento tutoriál bol zostavený pomocou [tohto] videotutoriálu. Pre pokračovanie je potrebné stiahnuť si predpripravený [projekt].

COMING SOON...


Tutoriál k jednoduchej hre

Tento tutoriál bol zostavený pomocou [tohto] videotutoriálu. Pre pokračovanie je potrebné stiahnuť si [assety], ktoré budeme používať.

[link] na rozpracovaný projekt z minulej hodiny.

Spustíme Unreal Engine 4 a zvolíme nasledovné: New Project > BluePrint > Blank. Dole necháme nastavené Desktop/Console, Maximum Quality a No Starter Content. Ďalej je možné zvoliť umiestnenie projektu a jeho názov.

V Content Browseri vytvoríme (pre poriadok v projekte) priečinok s názvom Character. Z assetov doň pretiahneme súbor SK_Mannequin. V časti Mesh klikneme Show Advanced Options a zvolíme Import Normals a dáme importovať. Zmeny je možné priebežne ukladať pomocou Save All tlačidla.

V priečinku Character vytvoríme priečinok Animations. Z assetov doň pretiahneme všetky ostatné súbory. V časti Mesh zvolíme nášho skeletona a dáme Import All.

V priečinku Character si môžme vytvoriť vlastný materiál M_character, ktorý upravíme v editore pre materiály a priradíme ho nášmu skeletonovi v editore skeletona v časti Mesh, Material Slots. Za každou taktouto úpravou je nutné uložiť zmeny.

V priečinku Animations si vytvoríme Blend Space 1D s názvom idle_walk_run, čo bude predstavovať plynulý prechod medzi animáciami státia, kráčania a behu. V jeho editore nastavíme v časti Asset Details, Axis Settings maximum na 375 (odporúčané tutoriálom.) Z Asset Browsera pretiahneme animácie nasledovne: ThirdPersonIdle na prvú čiaru, ThirdPersonWalk na druhú čiaru a ThirdPersonRun na poslednú, piatu čiaru. Pomocou farebnej guličky si môžeme pozrieť jednotlivé prechody.

Animáciu pohybu máme sčasti vyriešenú. Pri skákaní však nastáva problém. Nevieme či hráč skáče na mieste alebo z nejakej vyvýšenej plošiny, a teda nevieme, ako dlho bude postava padať. Skok si teda rozdelíme na tri časti: začiatok skoku, padanie vzduchom, doskok na zem.

Na začiatok použijeme animáciu výskoku, v strede dookola púšťame animáciu padania a na konci použijeme animáciu dopadu. Na zabezpečenie takéhoto fungovania animácií sa používa State Machine. V priečinku Character si vytvoríme Animation Blueprint s názvom BP_animation, vyberieme možnosť AnimInstance a nášho skeletona. V jeho editore vytvoríme nový State Machine s názvom Locomotion a ten prepojíme s Resultom.

Locomotion upravíme dvojitým kliknutím. Potiahnutím šípky od Entry vytvorýme nový State s názvom idle_walk_run. Toto predstavuje zatiaľ iba stav, zatiaľ neurčuje ani animáciu, ani spôsob fungovania. Podobným poťahovaním vytvoríme schému, kde sa z klasického pohybu dostaneme do stavu výskoku, z neho do stavu padania, z neho do stavu dopadu a následne naspäť do klasického pohybu. Celá schéma je na obrázku:

Teraz každému stavu priradíme animáciu. Dvojkikom na idle_walk_run sa dostaneme do jeho editora. Z assetov pretiahneme animáciu idle_walk_run a spojíme ju s Resultom. V tomto prípade je ešte potrebné dekladovať jej parameter ako premennú s názvom speed. Takýmto spôsobom priradíme animácie aj ostatným stavom.

Teraz nastavíme za akých podmienok sa majú meniť stavy. Dvojklikom na šípku medzi idle_walk_run a start_jump otvoríme editor. V tomto prípade chceme zabezpečiť prechod stavov, keď sa postava dostane do vzduchu. V editore teda zmeníme podmienku prechodu na premennú s názvom is_in_air.

Prechod medzi start_jump a jump_loop vyriešime sledovaním animácie výskoku, ak bude končiť, prepneme sa do stavu jump_loop. Do editora pridáme funkciu Time Remaining (ratio) a jej výstup prepojíme cez funkciu porovnania < (float) s Resultom. Ako porovnávaciu hodnotu zvolíme 0,5 (odporúčané tutoriálom). Rovnako vyriešime aj prechod medzi end_jump a idle_walk_run, ale tam zvolíme porovnávaciu hodnotu 0,75.

Zostáva už len prechod medzi jump_loop a end_jump. Ten zabezpečujeme presne opačne ako prvý prípad, teda keď postava už nie je vo vzduchu. Pravým klikom získame getter k premennej is_in_air a cez funkciu NOT (boolean) ho prepojíme s Resultom. Skompilujeme a pomocou zmien premenných môžme State Machine otestovať.

Máme nastavené ako majú fungovať animácie v rôznych prípadoch pohybu. Chýbajú však informácie o tom, v ktorom stave by sa mala postava nachádzať. To doplníme v Event Graphe. V prvom rade do neho pridáme funkciu, ktorá nám zabezpečí informácie o postave Try Get Pawn Owner. Ak chceme zistiť, či získané informácie sú v poriadku, potiahneme šípku od Event Blueprint Update Animation a vyhľadáme funkciu Is Valid. Ako input jej dáme Try Get Pawn Owner. Z Is Valid funkcie môžme vyviesť seter na premenné speed a is_in_air. Ich hodnoty získame z grafu neskôr.

Z funkcie Try Get Pawn Owner potiahneme šípku a vyhľadáme funkciu Get Velocity a z nej potiahneme šípku a vyhľadáme funkciu VectorLength. Jej výstup napojíme na setter premennej speed. Presne tak isto vyhľadáme funkcie Get Movement Component a Is Falling a prepojíme ich so setterom premennej is_in_air. Skompilujeme. Celá schéma grafu je na obrázku:

V Main Toolbare klikneme na Settings a vyberieme Project Settings. V časti Input, Bindings pridáme pohyb. V Axis Mapping pridáme MoveForward pre W so Scale 1,0 a pre S so Scale -1,0. Tiež tam pridáme MoveRight pre D so Scale 1,0 a pre A so Scale -1,0. A ešte tam pridáme Turn pre Mouse X so Scale 1,0 a LookUp pre Mouse Y so Scale -1,0. V Action Mapping pridáme Jump pre Space Bar. Project Setting sa ukladá automaticky.

V priečinku Character vytvoríme Blueprint Class BP_character a vyberieme možnosť Character. Otvoríme v editore. V časti Components označíme Mesh, v jej detailnom paneli v časti Mesh vyberieme nášho skeletona a v časti Animation vyberieme náš BP_animation. Napasujeme ho do kapsule a otočíme podľa ArrowComponent. V časti Componenrs pridáme nový komponent SpringArm, ktorý predstavuje pripnutie kamery k postave. Napasujeme na postavu. Pridáme nový komponent Camera pod SpringArm. V Main Toolbare klikneme Class Defaults a v detailnom okne v časti Pawn odčekneme Use Controller Rotation Yaw. V časti Components vyberieme SpringArm a v dailnom paneli v časti Camera Settings čekneme Use Pawn Control Rotation. V časti Components vyberieme Character Movement a v detailnom paneli v časti Character Movement (Rotation Settings) čekneme Orient Rotation to Movement.

Otvoríme BP_character v jeho editore a zvolíme Event Graph. Defaultné funkcie odignorujeme a vytvoríme si vlastnú schému. Pridáme funkcie MoveForward a MoveRight z Input Axis. Pridáme dve funkcie Add Movement Input. S jednou prepojíme MoveForward a s druhou MoveRight. Pridáme funkciu Get Control Rotation, Break Rotator a Make Rotator a prepojíme ich, pričom Rotatory prepojíme cez Z (Yaw). Pridáme funkcie Get Forward Vector a Get Right Vector a prepojíme na ne Make Rotator. Tie ešte prepojíme na príslušné Add Movement Input funkcie. Označíme si celú túto schému, klikneme C, čo nám ju hodí do comment bloku a ten nazveme Movement. Celá táto schéma je na obrázku:

Pokračujeme nižšie. Pridáme funkcie Turn a LookUp z Input Axis. Pridáme funkcie Add Controller Yaw Input a Add Controller Pitch Input. Prepojíme Turn s Yaw a LookUp s Pitch. Zakomentujeme pod názvom Mouse Input. Pokračujeme vedľa. Pridáme funkciu Jump z Input Action a Jump z Character a prepojíme ich. Zakomentujeme pod názvom Jump. Skompilujeme. Zvyšok schémy je na obrázku:

V priečinku Character vytvoríme Blueprint Class BP_gamemode a vyberieme možnosť Game Mode Base. Otvoríme v editore. V Class Defaults detailnom paneli v časti Classes nastavíme Default Pawn Class ako náš BP_character. Skompilujeme.

V Main Toolbare klikneme na Settings a vyberieme World Settings. V časti Game Mode vyberieme náš BP_gamemode. Vo Viewporte vymažeme Defaultný Player Start a pretiahneme doň náš BP_character. Označíme našu postavu a v Details Paneli v časti Pawn vyberieme v Auto Possess Player možnosť Player 0.

Teraz pri kliknutí na Save All zvolíme priečinok Content a uložíme doň nami upravený level L_clearplane. Následne musíme v Project Settings v časti Maps and Modes zvoliť náš L_clearplane pre Default Maps.