Úvod do práce s grafickým vývojovým prostředím Unreal Development Kit Ing. Michal Kašpárek, DiS. Katedra aplikované kybernetiky Fakulta strojní Technická univerzita v Liberci Kurz vznikl za podpory projektu FRVŠ 715/2013. 1
Grafický engine Engine = motor základ každého grafického programu Software používaný aplikací pro vykreslení grafiky na obrazovku Provádí renderování obrazu na základě požadavků řídícího programu Engine může být: text-to-speech engine, database engine, layout engine, database engine. 2
Existující grafické 3D enginy Komerční CryENGINE (firma CRYTEK) 3. generace, Crysis série Source Engine (firma VALVE) Half Life 2, Portal, Team Fortress, Counter Stike: Source id Tech Engine (firma id Tech) 10 generací enginu, známých zejména podle titulních představitelů: Wolfenstein 3D, Doom, Quake a jejich pokračování V přípravě next-gen id Tech 6, založený na OpenGL Unreal Engine (firma Epic) 3. generace uvolněna i s vývojový prostředím pro nekomerční použití zdarma V přípravě 4. generace enginu 3
Existující grafické 3D enginy Open Source/Free The Nebula Device (firma Radonlabs) open source Ogre3D open source, multiplatformní, existuje mnoho pluginů, obsáhlá dokumentace díky online komunitě OpenSceneGraph open source, OpenGL, multiplatformní, zaměřený zejména na použití v simulacích, modelování a virtuální realitě Irrlicht open source, zdarma i pro komerční vývoj, OpenGL i Direct 3D 4
Využití 3D počítačové grafiky Během posledních dvou desetiletí zažil obor 3D grafiky masivní nárůst Zábavní průmysl: Animované filmy, počítačové hry, virtuální realita CAD systémy návrhové 3D i 2D systémy Vizualizace výsledků výpočtů, simulací, měření Rozšířená realita (Augmented reality) Vylepšení či náhrada lidských smyslů Lepší pochopení senzomotorického systému člověka 5
Význam 3D počítačové grafiky Rychlá, adaptivní a přenosná vizualizace komplexních jevů Mnohdy výrazně levnější než reálný experiment Např. vizualizace složité výrobní linky pro účely inovace či optimalizace výroby bez nutnosti zastavení výroby či rizika poškození systému Trenažéry a simulátory pro piloty, řidiče, vojáky Vědecká vizualizace S rostoucí komplexitou jevů je přehledná vizualizace často jedinou cestou k přesnému a efektivnímu pochopení a řízení nejenom výrobních strojů a systémů. 6
Unreal Engine Při tvorbě vlastního vizualizačního nástroje je možné buď vyvinout kompletní projekt od začátku s použitím knihoven OpenGL či DirectX, nebo využít některé z jich hotových vývojových protředí (IDE) nabízených obvykle firmami jako komerční řešení nebo v některých případech jako open source projekt v rámci internetové komunity. Unreal Engine je moderní a profesionální grafický nástroj s vývojovým prostředím, který byl uvolněn pro nekomerční použití zdarma (včetně IDE a bohatého obsahu) 7
Unreal Engine/Unreal Development Kit Současná verze engine 3.0 použita mj. v PC hrách Gears of War, Batman: Arkham Asylum, Bioshock, Borderlands, Splinter Cell Trenažérech a simulátorech NASA Moonbase Alpha, HumanSim, Zero Hour: America`s Medic, USA Connected Vehicle Research Animacích Show Lazy Town, software Muvizu Play 8
Vývojové prostředí Unreal Development Kit 9
Možnosti UDK Komplexní správa scény Pokročilá práce se světlem a nasvícením Interaktivní knihovna textur a materiálů Fyzikální engine, kolizní systém AI (umělá inteligence), podpora davu Animační nástroje, práce s kamerou Objektově orientovaný skriptovací jazyk Unreal Script Multiplatformnost Fóra, tutoriály, dokumentace Možnost spuštění scény přímo v editoru 10
Práce se světlem v UDK 11
Instalace UDK Instalátor ke stažení na http://www.unrealengine.com/ Nepravidelně se objevují nové verze (obvykle v řádu několika měsíců) Výuka probíhá na verzi July 2013 UDK Beta Volte instalaci PSGameUT3Title Obsahuje kompletní mapy, textury, modely atd. z titulu Unreal Tournament 3 Po spuštění se zobrazí standardní editor se čtyřmi viewporty, výchozí scénou a Content Browserem 12
Seznámení s UDK Ve standardním open dialogu (File/Open) otevřete mapu DM-DeckDeck Objeví se 4 různé varianty zobrazení scény Seznamte se s jejich vzájemným vztahem (Hlavní 3D zobrazení a 3 viewporty z pohledu jednotlivých os) Seznamte se s pohybem ve scéně (WASD, Q, E, význam tlačítek myši během pohybu) Pohyb kamerou stiskem pravého tlačítka myši (RMB) Změna rychlosti pohybu scroll kolečko při stisknutém RMB 13
Zobrazení scény 14
Interaktivní zobrazení a možnost Play in Viewport Zvýrazněným tlačítkem nebo kombinací Alt+F8 lze spustit scénu přímo v editoru Vyberte část scény (statický model) a přemístěte jej tažením myší Po spuštění se zobrazí chybové hlášení Výběr transformačního nástroje Pro posun, rotaci či transformaci je třeba zvolit odpovídající nástroj z nabídky 15
Posunutý statický model v editačním zobrazení Posunutý statický model po spuštění v editoru. Na obou chybí stíny je třeba přepočítat světlo ve scéně. 16
HW nároky a předem kompilované části scény Vzhledem k množství výpočtů u náročných scén se předem počítá mnoho statických parametrů, které se za běhu nemění zejména statická geometrie a statické osvětlení scény. Mnoho grafiky také není ve scéně momentálně vidět (je zakryta objekty bliž ke kameře) není tedy potřeba ji počítat a vykreslovat Problém viditelnosti řeší CSG (Constructive Solid Geometry), která využívá metodu rozdělení prostoru pomocí binárního stromu BSP (binary space partitioning) Termíny CSG a BSP bývají často vzájemně zaměňovány 17
HW nároky a předem kompilované části scény Pro využití základních částí scény (místnosti, budovy, schodiště ) je doporučeno využít CGS přímo v editoru UDK CGS se vytváří pomocí štětců Brushes Konvexní 3D objekt, obvykle základní (válec, kvádr, jehlan a jejich kombinace) U Geometrie záleží na přesnosti modely by se měly dotýkat (bez mezer) jinak mizí výhoda neprůhlednosti pro engine Rozměry zadávat numericky, vhodné jsou hodnoty mocnin 2 x 18
Tvorba vlastního prostředí v UDK File/New level/blank map Right click (RMB) na vybraný Brush Cube V otevřeném dialogu vlastností vyplňte X = 2048 Y = 4096 Z = 512 Wall thickness = 16 Hollow (dutá) Click Build vytvoří se štětec daných parametrů Červený obrys zadaného tvaru. Pokud není viditelný, stiskněte klávesu B ta zobrazí/skryje štětce ve scéně 19
20
Tvorba vlastního prostředí v UDK V tuto chvíli ještě není přidaná žádná geometrie! Ta se přidá tlačítkem CSG Add (Ctrl + A) Je přidána dutá místnost o daných rozměrech v CSG 21
Tvorba vlastního prostředí v UDK Možnosti zobrazení scény ve viewportu 10 možností zobrazení. Základní jsou Wireframe (drátový model) Unlit (neosvětleno) Lit (osvětleno) Vyzkoušejte různé varianty zobrazení Proč při zobrazení Lit nic nevidíme? 22
Budiž světlo! Objekty ve tmě nejsou vidět je nutné přidat světlo! Najeďte s kamerou ve 3D viewportu dovnitř místnosti Se stisknutou klávesou L klikněte a vytvořte bodové světlo Světlo umístěte do jednoho z rohů místnosti Ikona žárovky je pouze symbolickým zobrazením světla po spuštění není vidět. Dvojklikem na ikonu lze editovat vlastnosti objektu například barvu světelného zdroje 23
Tipy pro práci s UDK Objekty lze kopírovat/duplikovat tažením myši při současném držení klávesy ALT Skupinu objektů lze označit obdobně, pouze s klávesovou kombinací CTRL+ALT Klávesou R se přepíná mezi zobrazením poloměru dosahu světel Light Radius Ve všech viewportech lze používat různé módy zobrazení, ovšem ve 2D portech je nejpřehlednější Brush Wireframe 24
Budiž světlo! Vytvořte síť světel pomocí zmíněných postupů tak, aby byla celá plocha dostatečně osvětlena 25
Budiž světlo! Zkuste spustit hru volbou Play in Viewport Je vidět osvětlená scéna? Světlo spolu s viditelností má zásadní vliv na HW náročnost dané scény, tedy na množství výpočtů pro grafickou kartu během renderování jednoho frame proto se statická (tedy neměnná) světla předpočítají a tím se odlehčí celkové náročnosti Světla dynamická (np. světelný kužel baterky) z principu dopředu spočítat nelze 26
Build options Světla, geometrii a další komponenty je třeba zkompilovat předpočítat Build Geometry pokud se změní poloha či konfigurace CSG štětců (Brushes) Build Lightning spočítá statické osvětlení scény (v editoru je použitý pouze hrubý náhled světel, který nemusí být ve složitějších scénách akurátní) - Build All zkompiluje vše 27
Úkol k procvičení: Vytvořte dvě místnosti a pomocí vhodně zvoleného štětce a příkazu CSG Substract (vyjmout geometrii/hmotu z prostoru štětce) je propojte průchodem. Experimentujte se světlem bude světlo procházející průchodem dostatečně osvětlovat i druhou místnost? Vyzkoušejte vliv různé barvy světelných zdrojů na dlaždicovou texturu CSG Tip: konstrukci scény/objektů pomocí příkazů CSG Add apod. musí obvykle následovat Build Geometry CGS Add vloží jen jakýsi obrys geometrie. Stejně pokud přemístíte původně vytvořený štětec, zůstane CSG na místě do příštího stisku Build Geometry. 28
Textury Geometrii je třeba přiřadit 2D grafickou texturu Jen textura ovšem nestačí materiál v reálném životě má i jiné vlastnosti np. Odrazivost UDK pracuje s Materiály balíky vlastností povrchu Refraction, Transparency, Occlusion, Bump/Normal mapping, Glow, Wet. UDK obsahuje množství již připravených materiálů Materiály a další Assety najdete v Content Browseru 29
Content Browser Prohlížeč obsahu = assetů Assets = modely, zvuky, textury, materiály Je možné používat vše, co je v UDK naimportováno v Content Browseru Importem je nejen zajištěna kompatibilita (např. že zvuk půjde přehrát), ale také ochrana před náhodným smazáním datového souboru (zvuku, obrázku), které by způsobilo pád či nestabilitu výsledné aplikace V množství assetů je dobré se orientovat pomocí typů (Materials, Static Meshes, Textures ) a tagů 30
Konec modrobílých kachlíků V Content Browseru ve složce UDK Cool Materials Vyberte materiál dle vaší libosti a vkusu Přetažením jej aplikujte na stěnu existujícího modelu ve viewportu Dvojklikem na danou plochu upravte vlastnosti povrchu: Pan (posun) v osách U/V o daný či libovolný počet pixelů Rotation o daný či libovolný počet stupňů Flip U, Flip V osové zrcadlení textury Scaling měřítko/lupa dané textury» Je třeba potvrdit tlačítkem Apply Alignment je možné měnit zarovnání 31
Konec modrobílých kachlíků 32
Úkol k procvičení: Vyberte si z přítomných textur a upravte dosavadní prostor dle svého vkusu Jak se chovají animované materiály v editoru a jak po spuštění? Bude vidět textura po aplikaci na vnější stěny místnosti? Pokud není vidět, proč? Jak se změní textury po změně barvy světla? Dvojklik na ikonu světla PointLight Properties» Light» Light Component» Light Component» Light Color 33
Import modelů Pomocí CSG lze tvořit pouze relativně jednoduché modely a scény Pro detailnější či animované/animovatelnéanimovatelné modely je nutné využít externí modelovací programy 3DS MAX, Blender, Google SketchUp, Wings 3D, Alt+W v editoru skrývá a zobrazuje veškeré statické modely (static meshes) Vyzkoušejte v některé z hotových UT úrovní, které části scény jsou tvořeny statickými modely. 34
Import modelů CSG nelze animovat či s nimi hýbat Importované modely musí mít přiřazenou kolizní obálku, jejich osvětlení se počítá za běhu apod. Importované modely mohou být: Statické (Static meshes) nelze měnit jejich tvar Skeletální (Skeletal mesh) obsahují kostru, díky které lze měnit jejich tvar (jako lidské postavy - kostry) Modely lze importovat pomocí Content Browseru 35
Skeletální modely (Skeletal meshes) 36
Statické modely Je možné je animovat Měnit jejich polohu, rotovat, měnit velikost Nelze měnit jejich tvar (na rozdíl od skeletálních modelů) Import barelu do scény: Otevřete Content Browser Do vyhledávání v horním řádku zadejte Barrel Pokud nic nevidíte, jste ve špatném balíčku» V záložce Packages vlevo označte UDKGame Vyberte si jeden z nalezených barelů 37
Import barelu 38
Import barelu Barel (či jiný objekt) lze přidat do scény pouhým přetažením z Content Browseru Je přidán jako statický model bez jakékoliv interaktivity Tak bychom mohli importovat například sochu, ovšem od barelu lze očekávat určitý stupeň interaktivity například kolize V Content Browseru máme označený barel Kliknutí do scény (na podlahu) pravým tlačítkem se rozbalí kontextové menu»» Add Actor» Add Rigid Body Rigid Body přidá objekt jako tuhé/neohebné tělo, tedy animovatelnou část scény, jejíž tvar zůstane neměnný 39
Import barelu 40
Jeden barel - žádný barel Je-li barel naimportován jako Rigid body Stisknutím klávesy alt+tažení myši zkopíruje označený objekt Nakopírujte ve scéně větší počet barelů Zkuste je skládat vedle sebe i na sebe do pyramidy Změňte typ hry na utgame Záložka View» World Propeties» Game Type»» Default Game Type = utgame Otestujte chování barelu v roli Rigid Body 41
Jeden barel - žádný barel 42
První střelnice Použitím předdefinovaného typu utgame lze snadno využít existujících funkcí k vytvoření první interaktivní střelnice Srovnejte rozdíl mezi Rigid Body a Statickým modelem Statický model vytvoříme pouhým přetažením assetu z Content Browseru do scény Pověste několik barelů volně do vzduchu Kdy se začne počítat fyzika objektů? Ihned při spuštění, nebo později? Toto chování lze upravit v nastavení barelu v záložce Kactor» Wake On Level Start 43
Základy skriptu v UDK editor KISMET V této kapitole vytvoříme sled událostí, který bude následovat definovanou akci Jednoduché objekty tak mohou reagovat na akce uživatele a vyvolat více či méně komplexní odezvu Skriptovací editor KISMET způsob programování ve stylu vývojových diagramů Obsahuje množství připravených jednotek Akci spouští Trigger neviditelný objekt, spínač 44
Trigger poprvé Do vytvořeného prostoru vložte nový trigger» Right click v editoru» Add Actor» Add Trigger 45
Trigger podruhé Vytvořenou ikonu neviditelného objektu Trigger lze posouvat, rotovat či zmenšovat transformačními nástroji dle libosti Nastavte pomocí neproporcionální změny velikosti (Non-uniform Scaling Mode) tvar vysokého válce Tip: Pomocí kontextového menu (right click na Trigger) lze přichytit objekt k podlaze» Right click na trigger» Transform» Snap To Floor Co se stane nyní po spuštění? Reaguje Trigger na vstup hráče do své oblasti? 46
Trigger potřetí Trigger nereaguje, neboť nemá nadefinovaný typ akce, na kterou má reagovat, ani typ reakce Otevřete editor Kismet tlačítkem na horní liště Na ploše editoru right click New Event Using Tigger_0 Z typů události můžeme vybrat reakci na Vstup do oblasti Triggeru (Touched) Zásah (Take damage) Upozornění na zacílení (Aim Notify) a další Pokud nelze vytvořit událost Triggeru, není v editoru označený! 47
Úvod do práce s grafickým skriptovacím editorem Vytvořte event typu Touch Dále vložte: New Action»» Voice/Announcements»» Play Announcement Vyzkoušejte si navigaci a orientaci v Kismetu: Ctrl+posun myší 48
První jednoduchý skript 49
První jednoduchý skript Vytvořte dvě instance Play Announcment Připojte obě k objektu trigger: Touched uživatel vstoupil do oblasti triggeru Untouched uživatel opustil oblast triggeru Ve vlastnostech oznámení zadejte text Announcement Text V Content Browseru vyberte vhodný zvuk Zeleným tlačítkem u položky Announcement Sound lze aplikovat zvuk, vybraný v Content Browseru, na aktuální oznámení 50
První jednoduchý skript Po spuštění a následně po vstupu do oblasti spínače se zobrazí, případně přehraje, oznámení Přehrají se obě oznámení? Co se stane po opětovném vstupu do triggeru? Každý trigger má v nastavení položku Max Trigger Count, která uvádí, kolikrát nejvýše lze spínač aktivovat Výchozí nastavení této hodnoty je 1 Při nastavení nuly je limit spuštění neomezen (nekonečné opakování) 51
Interaktivní střelnice 1 Již umíme pracovat se statickými modely jako s Rigid Body Známe základy práce v Kismetu Pro vytvoření skutečně interaktivní střelnice využijeme oboje k tvorbě terčů, které budou reagovat na zásah V Content Browseru najděte statický model Cube Nejedná se o CSG objekt, nýbrž o neotexturovaný Static Mesh Do scény ji vložte jako» Right click ve scéně» Add Actor» Add InterpActor EngineMeshes.Cube 52
Kostka není terč! Vložením modelu jako objekt InterpActor říkáme enginu, že s tímto objektem lze provádět interakce Nyní ji je třeba upravit do podoby terče a otexturovat tedy nic nového Vzhledem k tomu, že již máme nastaven typ aplikace utgame, který obsahuje základní zbraně z UT3, stačí pouze nastavit reakci na událost zásahu terče. 53
KISMET skriptování terče S označeným terčem vytvořte novou událost New Event Using InterpActor_0 Take Damage Tuto položku editujte: Obj Comment zadejte text zasaženo pro potřeby testování Upravte hodnoty Damage Treshold a Max Trigger Count Co tyto údaje znamenají? Proč terč nereaguje na kolizi se střelami? 54
KISMET skriptování terče Ve vlastnostech objektu terče je nutné upravit kolizní typ: InterpActor_0 Properties» Collision» Collision Type Vyzkoušejte chování různých kolizních typů a zvolte ten nejvhodnější Vytvořte v Kismetu novou akci a propojte ji s akcí terče: New Action» Toggle» Toggle Hidden Nasměrujte Target Toggle Hidden na proměnnou New Object Var Using InterpActor_0 55
KISMET záhada mizícího terče 56
KISMET záhada mizícího terče Pro tvorbu skriptu mizejícího terče jsou potřeba následující objekty a komponenty: New Event Using InterpActor_0 Take Damage New Ac on Toggle Toggle Hidden New Object Var Using InterpActor_0 New Action Actor Change Collision New Action Misc Delay New Variable Float Random Float Tak lze vytvořit terč, který po zásahu na náhodnou dobu zmizí a potom se zase objeví. Neviditelný terč neblokuje ani hráče, ani výstřely kolizní typ je ve skriptu upraven spolu s viditelností. 57
Terče pro pokročilé animační editor Matinee Animační nástroj s širokými možnostmi Propojeno s Kismetem Nové Matinee (nový klip) se vkládá do Kismetu jako samostatný objekt: Right click New Ma nee Editor lze otevřít i z hlavního panelu ikonou Matinee (hned vedle ikony Kismet) V případě více vytvořených klipů je dobré využívat komentářů (Obj Comment) kvůli orientaci! 58
59
Terč v pohybu V Matinee vytvořte novou prázdnou skupinu Můžeme ji pojmenovat například pohybterce Skupina / Group může obsahovat větší množství stop Jedna stopa (track) upravuje změnu zvolených vlastností přiřazeného objektu dle určitého klíče V našem případě bude měnit polohu terče Změna transformace parametrů může probíhat lineárně či podle křivkové interpolace apod. Je nutné mít označený objekt terče během vytváření skupiny (Engine si prolinkuje skupinu s daným objektem) 60
Terč v pohybu Klíč = bod na časové ose, udává momentální hodnotu Terč je na začátku (v čase 0) na levé straně místnosti V čase T je terč na straně opačné Mezi těmito body/klíči probíhá interpolace polohy Right click na skupinu Add New Movement Track. Posunem červených trojúhelníků na časové ose lze měnit délku animace Pro snazší úpravu časové osy je vhodné zapnout funkci Snap ikonou na horním panelu 61
Terč v pohybu 62
Terč v pohybu S kurzorem na začátku časové osy stiskněte Add Key (přidat klíč) V řádku Movement se objeví trojúhelník klíč V okně editoru se objeví hlášení ADJUST KEY Movement Translačním nástrojem upravte polohu terče do výchozího stavu tedy na jednu stranu místnosti Přidejte druhý klíč na konec časové osy a v editoru opět upravte polohu - na druhou stranu místnosti Matinee vytvoří interpolovanou transformační funkci dle zadaných klíčů a časové osy; tuto lze uživatelsky editovat v Unreal Matinee Curve Editor v horní části Matinee. 63
Animace v pohybu nebo ne? V Matinee lze tlačítky Play/Play in Reverse přehrát vytvořenou animaci (zde pohyb terče do strany) Po spuštění se ale nic neděje animace nebyla spuštěna v Kismetu! 64
Animace v pohybu nebo ne? Vytvořte v Kismetu event Level Loaded Propojte jej se vstupem Play objektu Matinee Co se stane po spuštění? Kolikrát animace proběhne? Pro opakování animace je možné využít vlastnost Reverse a vzájemně propojit vstupy a výstupy objektu Matinee tak, aby terč neustále cykloval ze strany na stranu. 65
Animace v pohybu! V tuto chvíli máme pohybující se terč, který po zásahu zmizí a po náhodné době se opět objeví, ovšem díky pohybové animaci opět na jiném místě. 66
Když pohyb do stran nestačí! Vytvořte nový terč (nebo kopii stávajícího) Vytvořte animaci, která nový terč po zásahu sklopí na zem, jako terče na střelnici. Po náhodné době se terč opět zvedne. Několik tipů: Rotace je pouze další možnost pohybu Objekty jsou rotovány okolo Pivotu jakéhosi jejich středu. Terč se ovšem chová jako dveře s panty u podlahy je tedy třeba přesunout Pivot z geometrického středu do vhodné pozice: Ve vlastnostech objektu/terče upravte hodnotu Display PrePivot Experimentujte se vztahem mezi polohou objektu a pivotem. 67
Závěr V rámci kurzu byl představen Unreal Development Kit, jeho možnosti a úvod do práce s UDK Byly popsány základní principy CSG, rozdíly mezi importovanými modely, práce se světlem a texturami a rozdíl v hardwarové náročnosti výpočtu statických a dynamických vlastností scény Naučili jsme se pracovat se skriptovacím editorem Kismet a animačním nástrojem Matinee Postupně byly vytvořeny tři varianty interaktivní střelnice: Nejprve s využitím vhodně importovaných barelů Střelnice se statickými mizejícími terči Střelnice s animovanými terči v pohybu 68
Další informace a zdroje http://www.unrealengine.com/udk/ http://udn.epicgames.com/main/webhome.html V českém a slovenském jazyce existuje několik kurzů a webů s tématikou UDK: http://pctuning.tyden.cz/multimedia/hry-a-zabava/17565-hratky-s- unreal-engine-cast-i-prvni-krok-do-nerealna http://www.unrealeditor.cz/ http://www.udk-site.net-core.eu/ Videotutoriály na youtube: http://www. www.youtube.com/watch?v=?v=tpma_dabyo0 http://www. www.youtube.com/watch?v=vvsg3q3gf_q http://www. www.youtube.com/watch?v=vgsubmkox24 69