BI-PGA Programování grafických aplikací
Jdi na navigaci předmětu

Unreal Engine 4 intro + Blueprints intro

Unreal Engine 4 intro + Blueprints intro

Tutoriál vás uceleně provede začátky v Unreal Enginu a poskytne vám vhled do Blueprints. Myslím že je to dobrý start pokud jste ještě nikdy Unreal Engine neviděli.

Předpokládá se že již máte z Epic Store stažený a nainstalovaný Unreal Engine 4 libovolné verze. Pro naše účely stačí když jej nainstalujete pouze s nejnutnějšími balíčky, neboť náš prvotní projekt nebudeme buildit pro jiné platformy nežli náš desktop. Při instalaci si dejte pozor aby se správně nainstalovalo Visual Studio, respektive pokud ho již nainstalované máte musíte si do něho přidat balíček pro herní vývoj. To uděláte tak že spustíte "Visual Studio Installer", u své nainstalované verze kliknete na "změnit" a zakliknete dvě sady funkcí které potřebujeme, a to sice "Vývoj desktopových aplikací pomocí C++" a "Vývoj her pomocí C++". Visual Studio potřebujeme přestože, jak brzy sami zjistíte, v něm psát nic nebudeme. Unreal Engine (dále už jen UE) je totiž krabicový simulátor ve kterém jen propojujete už hotové funkce a tím vytváříte blueprinty (skripty), ale o těch něco více později. Samozřejmě, že kód můžete psát taky, ale lidi co v UE píšou kód nečtou tenhle tutoriál, mají 10 let praxe a už někde berou 100k týdně. Nechci odrazovat ale teď je nejvhodnější chvíle pro to se otočit a přečíst si některý z tutoriálů na Unity, které není tak komplexní přestože je stále silné. Sice mám osobně radši EU nežli Unity kvůli grafice. V Unity například nejsou oboustrané shadery (materiály) nebo shadery které umí vyrobit průhledné sklo a musíte to někde shánět na Unity marketplace od komunity, na druhou stranu si v něm pěkně zaprogramujete. Nedovedu si totiž představit že bych v UE měl dělat třeba bakalářku blueprintama.

  • Když jsme měli SP1 chtěli jsme jít cestou UE, byli jsme natěšený na C, naštěstí jsme se jako tým dostali do spojení s jedním studentem který psal bakalářku a ten nás správně nasměroval na Unity, bylo to asi to nejlepší a nejdůležitější rozhodnutí co jsme udělali protože si nedovedu představit naše výrazy, kdybychom v polovině semestru zjistili že se tam v C nic nedělá a na náš pokročilejší systém bychom měli jenom blueprinty. Doporučuju si sehnat kontakty na lidi co píšou bakalářku, několik takových nám neskutečně pomohlo, už jen proto že se věnovali podobnému tématu a před rokem byli přesně na našem místě takže nám mohli předat jejich know-how. Tímto jim děkuju.

Založení projektu

V Epic Store klikněte na launch u své nainstalované verze. Vyskočí na vás okno s výběrem možných kategorií. Vybereme si kategorii Games.

  • V poslední době se Unreal začal používat nejen pro game dev ale i ve filmovém průmyslu npř. Star Wars Rogue One / Mandalorian díky možnosti žívého preview v reálném čase zvaném "directors view". Krom toho se taky začal používat pro vizualizaci architektury kde nahradil drahé a pomalé enginy s raytracingem a pomalu se dostává i do dalších odvětví.

Template si vebreme First Person. To nám vytvoří ovládání hráče/kamery z prvního pohledu a rovnou zařídí nějakou fyziku abychom se nepropadali podlahou.

  • Pohled z první osoby je jakoby přímo z očí. Ještě je tu pojem pohled ze třetí osoby a to je když nás kamera sleduje zezadu. Pohled z druhé kamery neexistuje :D (teoreticky existuje, zájemci si vyhledají pojem "second person view")

Project settings projedeme po sloupcích. projekt si dáme blueprint-maximu quality-raytracing disabled-desktop/console-no starter content a vyberem složku ve které chceme projekt vytvořit.

  • Otázka: Blueprint vs C projekt? Přiznám se že si nejsem jistý ale kompatibilita by měla být taková, že když vytvoříte blueprint projekt tak si v něm normálně můžete vytvářet C skripty, když ho ale vytvoříte C tak jste od blueprintů uzamčení. V tomhle si možná udělejte průzkum, já to vždycky vytvářím jako blueprint projekt. Mějte na paměti že UE C není PA2 C++, musíte fungovat s jejich funkcemi a třídami.
  • Otázka: Raytracing disabled? jestli na to máte stroj, dá se zapnout v nastavení projektu později, nerozumím tomu proč je to vlastně hned tady na začátku když je to naprosto nedůležitý pro založení projektu.
  • Otázka: Platforma? Když si vyberete mobile/tablet tak vám to rovnou vytvoří joysticky v GUI aby jste to mohli ovládat v mobilu. Ovládání na desktopu ale tky normálně funguje takže testování je jednoduchý a nemusíte to pokaždý buildit pro sojí platformu. Cílová platforma pro build a distribuci se dá vybrat i později ale ovládání si už v tom případě musíte udělat sami.
  • Otázka: Starter content? Můžete si to tam dát ale dá vám to tam asi 500mb složku materiálů, objektů, particle efektů atd. který stejně nikdy nevyužijete. Možná pro první projekt abyste si jenom pohráli v editoru to není špatný, doporučuju, smazat to můžete vždycky. Teď ovšem to potřebovat nebudeme.

Přehled GUI

Po spuštění projektu byste měli vidět něco takového:

1 GUI

Dole je browser ve kterém budete mít všechny assety (kódy, zvuky, grafiku…​ všechno), vlevo máte nějaký primitivní build in věci, odsud budete v životě potřebovat asi jenom světla a možná nějaké zdroje zvuku ale spíš jenom ty světla. Napravo nahoře vidíte co ve scéně všechno máte a nemusíte to hledat kamerou a složitě naklikávat. Když si něco nakliknete tak vpravo v detailech vidíte různý vlastnosti objektů. Teď jsem si nakliknul kostku, jednak můžete vidět že se mi objevilo gizmo za kterou jí můžu tahat, fungují klasický grafický zkratky W/E/R (posunutí, rotace, škálování) a jednak vidíte že se mi v details něco objevilo.

2 Details

Z vlastní zkušenosti čím hlouběji skrolujete v details tak tím míň důležitý jsou a tím míň jim rozumím. Důležitý je že můžete klasicky měnit pozici, rotaci a scale. Můžete měnit materiál, můžete měnit mesh. Objekty v UE fungují většinou trošku jako třída, není to jen ten 3D model co vidíte na obrazovce. Většinou ty objekty na sobě mají nalepenou nějakou funkcionalitu v podobě blueprintů, nějaký zvukový zdroj třebas, možná světlo, něco co řídí animace atd. vůbec nemusejí mít komponent s 3D modelem. My si jeden takový zkusíme vyrobit. Další důležitou věcí je že ve scéně se můžete pohybovat, když podržíte pravé tlačítko myši začnete se rozhlížet, když k tomu přidáte WASD můžete se pohybovat, QE vás posouvá nahoru/dolu. V horní liště na právé straně je další důležité tlačítko a to PLAY. Když na něj kliknu a kliknu do scény, spustí se mi simulace hry, pomocí Esc ji lze vypnout. V horní liště ještě můžete najít tlačítko build, to je někdy potřeba zmáčknout, UE vás na to případně upozorní. Většinou v případě když zapékáte světlo.

Typy objektů

Objekty a světla se rozlišují na 3 typy, v details si můžete všimnout že se dají měnit hned nahoře pod kolonkou scale.

  • Dynamické - lze s nimi hýbat, třeba na ně může působit gravitace ale všechno světlo je realtime a jsou nejhorší na výkon. Bílé kostky ve scéně
  • Stationary - hybrid mezi statickým a dynamickým, lze na něm spouštět animaci (i když světlo nebude trochu sedět), můžete mu za běhu měnit nějaké vlastnosti (o tom si nastudujte trochu sami, když si nejste jistý vystačíte si se static a dynamic, když si fakt nejste jistý použijte dynamic na tom funguje všechno, ale kdyžtak to bude jenom nadávat) lze na tom zapéct světlo což znamená že se použijí takové speciální textury to kterých se vše zapeče raytracingem a vypadá to opravdu dobře.
  • Statické - ten tam jenom sedí, je nejlepší na výkon, světlo se do nich zapéká, jakmile s nimi hnete tak to musíte buildnout a zapéct znovu. Šedé kvádry ve scéně.

Tvorba materiálů

Rychlá odbočka ale bude se to hodit, pravým v browseru→Material. Dvojklikem otevřete už něco co se podobá blueprintům.

3 Material

Vidíte že tam můžete nacpat PBR (physical-based-rendering) textury jako je albedo/diffuse + mettalic + roughness + normal atd. Textury tam můžete přidat tak že je v UE naimportujete drag’n drop do browseru a potom drag’n drop do materiálu, Vytvoří se jim vlastní node a vy to jenom propojíte na správný místo. My si teď vyzkoušíme vytvořit materiál jen z barvy. Když přejedete nad vstupní konektor/kolečko tak se vám kurzor změní v kříž, zmáčkněte levé tlačítko, začněte táhnout doleva šňůru a pusťte. vyskočí na vás tabulka co tam chcete připojit/vytvořit. Klávecnicí zadejte "Constant3Vector", dvojklikem si ten nový node rozklikněte, vyberte si barvu, zavřete a vlevo nahoře dejte apply. Měli byste býti ve stejném stavu jako já:

4 MaterialDone

Teď to můžete zavřít, a pomocí drag’n drop z browseru na objekt ve scéně ho použít (nebo si rozkliknout details objektu a tam to nastavit). Měli byste vidět, že se to skutečně aplikovalo:

5 MaterialApplied

Co jsou blueprinty?

Teď se už se konečně dostáváme k tomu co jsou to ty dříve zmiňované blueprinty. Blueprints jsou vizuální programovací jazyk na jehož pozadí běží opravdové C++ funkce. Pokud nevěříte dvojklikem se dají rozkliknout a otevřít ve Visual Studiu, tedy alespoň ty custom které jste si napsali sami, lze totiž přidávat nové uzly s vlastním kódem, i když to je momentálně nad naše síly, víme alespoň, že to jde.

Nyní si zkusíme vytvořit světlo na pohybový senzor jako actor blueprint.

6 funBegins

Na youtube jsou tutoriály jak to udělat v globálním level blueprintu ale my nejsme řepové a zvládneme to udělat v actor blueprintu. Jednak je to hnus podobně jako glovální proměnný, ale hlavně nám to dovolí si dát takových světel do scény několik bez toho abychom "kopírovali kód" v našem level blueprintu a pro každý světlo všechno pořád nastavovali dokola. V našem případě to bude zkrátka jako bychom si udělali classu a potom už jen vytvářeli její objekty.

Pravým v browseru → Blueprint class → Actor → vhodně pojmenujte → dvojklikem otevřte. Měli byste vidět něco čemu vůbec nerozumíte (:D mistr humorník). Červeně jsem označil místa který nás zajímají. Vlevo nahoře je hierarchie komponentů ze kterých se ten actor skládá většinou je to nějaký 3D model, třeba nějaký zdroj zvuku atd. Potom tam jsou 3 karty, nás zajímá jenom viewport kde to poskládáme a potom event graph kde těm komponentům dáme logiku jako takovou v podobě blueprintu. Je tam samozřejmě ještě tlačítko compile aby to fungovalo.

7 BlueprintNew

Nejdřív si tam vytvoříme komponenty který budeme potřebovat. Čili bodové světlo a colider do kterého když vstoupíme tak ono světlo zapneme, když z něho vystoupíme tak se zase vypne. To uděláme tak že vpravo nahoře klikneme na zelený tlačítko "Add component" a do vyhledávání napíšeme light.

8 BlueprintComponents

Analogicky to uděláme pro ten collider. Akorát do vyhledávání napíšeme "Collison".

9 BlueprintComponents2

Potom si ten sphere collider naklikneme a napravo v details tomu dáme scale asi tak 8, jinak by to bylo moc prťavý.

10 ComponentsScale

OK, máme to připravený, teď půjdeme udělat blueprint. Nahoře jak jsou ty 3 záložky se z viewport překlikneme do event graph

11 BlueprintRealDeal

Tady jsou 3 triggery které při určitém okamžiku spouští signál. Můžeme si představit, že v blueprintech jezdí signál zleva doprava. Vlastně to se dá i vizualizovat když si nahoře kliknete na simulate tak vám tam budou jezdit kuličky po drátech a vy uvidíte co se v tom blueprintu zrovna děje, můžete si to později vyzkoušet, dát si blueprint na bok monitoru a na zbytku si pustit hru, teď to dělat nebudeme, ještě ani nic nemáme.

Ten prostřední moc zajímavý není, ten první je důležitý, spouští něco při startu hry. Ten poslední je zajímavý a někdy ho určitě využijete jen ne teď. Pamatujte ale že existuje, spouští něco při každém snímku hry.

  • Tyhle triggery kterými něco začíná jsou vždy červené. Funkce bývají světle modré. Pomocné funkce jako toString() bývají zelené a proměnné bývají tmavě modré s nula vstupnímy porty.

Všechny označíme a smažeme pomocí delete. Začneme od nuly. Potřebujeme trigger který nám pošle signál když vstoupíme do collideru, do té naší koule. Pravým na collider → add event → add onComponentBeginOverlap

12 Begin

Měli bychom mít červenou bublinu která posílá signál když něco koliduje s naši kolizní koulí. teď musíme říct co s ní má kolidovat. Teď přijde trochu magic který by mě nenapadl kdybych to někde neviděl. Blueprinty většinou fungují tak že si najdete tutoriál na to co chcete udělat a když už máte nějaký zkušenosti tak to zvládáte kombinovat a víte co a jak. Vytáhneme špagát z hlavního konektoru který je bíly, ostatní jsou barevný a většinou to jsou nějaké proměnné nebo tak něco, bílé jsou vždy jediné a ty hlavní co posílají signál dál. Vytáhneme a pustíme, vyskočí nabídka co tam chceme vytvořit, do hledání napíšeme "castToFirstPersonCharacter", bacha možná si v rohu nabídky musíte zaškrtnout aby to nebylo context sensitive a dovolilo vám to nějaké chyby.

13 Cast

potom ještě připojíme other actor na object

14 OtherActor

teď si tam pomocí drag’n drop natáhneme uzel našeho komponentu světla

15 Light

nakonec potřebujeme uzel který nám to světlo vypíná, takže pravým do volného místa v blueprintu a najdeme si funkci "set visibility", vybereme tu v kategorii rendering.

16 visibility

pak tomu nastavíme New visibility na True (prostě to zaškrtněte na fajfku) a zadrátujeme to tak aby to ovlivňovalo stvětlo tohle naše světlo právě když se zaregistruje kolize s hráčem.

17 TurnON

teď máme udělaný zapínání světla když hráč vejde do našeho colideru, laskavý čtenář si jako cvičení udělá vypínání. Jsou to skoro stejné kroky, jen na začátku je endOverlap a na konci není zaškrtnutá fajfka, já jen přidám obrázek do kterého se máte dostat.

18 TurnOFF

Teď se jako Láďa zeptám, "Tak to vypadá že to funguje?" a ano funguje, až na to že světlo nyní začíná defaultně zapnuté takže vejdu dovnitř, nic se nestane a až potom co vejdu ven se vypne, potom čeká nežli vejdu aby se mohlo opět zapnout. To je nechtěné chování, radši bychom kdyby světlo bylo od začátku vypnuté a zapnulo se jen tehdy kdy se k němu přiblížím. To by se ale dalo udělat přes ten trigger který posílá signál se spuštěním hry který jsem zmiňoval dříve ne? No jasně takže pravým→eventBeginPlay a přidám set visbility funkci nastavenou na False.

Tohle je náš finální blueprint:

19 Final

Každý uzel set visiblity může mít klidně pro přehlednost vlastní uzel s tím point light abychom tam neměli troj-nohou chobotnici, to nechám na vás jak se rozhodnete to udělat.

Teď nahoře hitněte compile, zavřete to a drag’n dropněte to z browseru do scény, doporučuju někam na ten tmavě šedý kvádr abyste věděli kde to najít když je to na začátku hry zhasnutý.

20 done

Můžete si to pustit nahoře pomocí play a vyzkoušet jestli to opravdu funguje, případně si s tím zkuste pohrát, můžete si třeba změnit barvu světla, ale na to už určitě příjdete sami jak se to dělá.

Tohle by vám mělo dát solidní základ aby to pro vás všechno nebyla taková magie. Snad jsem vám pomohl a zakceleroval váš start v UE4. Měli byste být minimálně schopní se orientovat při vašem dalším rozvoji. Hodně štěstí

Lukáš Marek